IAM으로 액세스 제어

AI Platform 파이프라인은 머신러닝(ML) 파이프라인이 Google Cloud 리소스에 액세스할 때 ID 및 액세스 관리(IAM) 역할을 사용하여 사용자, 그룹, 서비스를 승인합니다.

이 문서에서는 다음에 필요한 역할을 설명합니다.

IAM 개념 및 IAM 작동 방식에 대해 자세히 알아보세요.

AI Platform 파이프라인 설정에 필요한 역할

AI Platform 파이프라인을 배포하려면 프로젝트에 대한 뷰어(roles/viewer) 및 Kubernetes Engine 관리자(roles/container.admin) 역할을 부여받아야 합니다. 뷰어 역할은 프로젝트 내의 모든 리소스에 대한 읽기 액세스 권한을 제공합니다. Kubernetes Engine 관리자 역할은 Kubernetes 클러스터 및 Kubernetes API 객체에 대한 전체 액세스 권한을 제공합니다.

최소 권한 원칙을 따르려면 세분화된 액세스 권한을 사용하도록 AI Platform 파이프라인 클러스터를 설정하세요. 세분화된 액세스 권한으로 클러스터를 설정하려면 프로젝트에 대한 서비스 계정 관리자(roles/iam.serviceAccountAdmin) 역할도 부여받아야 합니다. 서비스 계정 관리자 역할은 IAM 서비스 계정을 만들고 구성할 수 있는 액세스 권한을 제공합니다.

IAM 역할에 액세스 권한 부여에 대해 자세히 알아보세요.

역할 권한
뷰어(roles/viewer) 프로젝트 내의 기존 리소스 또는 데이터 보기(수정이 아님)와 같이 상태에 영향을 주지 않는 읽기 전용 작업에 대한 권한입니다.

(roles/container.admin)

클러스터 및 관련 Kubernetes API 객체를 전체 관리할 수 있는 액세스 권한을 제공합니다.

노드에 서비스 계정을 설정하려면 노드에서 사용하는 사용자 관리 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)도 있어야 합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 프로젝트

container.*

  • container.apiServices.create
  • container.apiServices.delete
  • container.apiServices.get
  • container.apiServices.getStatus
  • container.apiServices.list
  • container.apiServices.update
  • container.apiServices.updateStatus
  • container.auditSinks.create
  • container.auditSinks.delete
  • container.auditSinks.get
  • container.auditSinks.list
  • container.auditSinks.update
  • container.backendConfigs.create
  • container.backendConfigs.delete
  • container.backendConfigs.get
  • container.backendConfigs.list
  • container.backendConfigs.update
  • container.bindings.create
  • container.bindings.delete
  • container.bindings.get
  • container.bindings.list
  • container.bindings.update
  • container.certificateSigningRequests.approve
  • container.certificateSigningRequests.create
  • container.certificateSigningRequests.delete
  • container.certificateSigningRequests.get
  • container.certificateSigningRequests.getStatus
  • container.certificateSigningRequests.list
  • container.certificateSigningRequests.update
  • container.certificateSigningRequests.updateStatus
  • container.clusterRoleBindings.create
  • container.clusterRoleBindings.delete
  • container.clusterRoleBindings.get
  • container.clusterRoleBindings.list
  • container.clusterRoleBindings.update
  • container.clusterRoles.bind
  • container.clusterRoles.create
  • container.clusterRoles.delete
  • container.clusterRoles.escalate
  • container.clusterRoles.get
  • container.clusterRoles.list
  • container.clusterRoles.update
  • container.clusters.connect
  • container.clusters.create
  • container.clusters.createTagBinding
  • container.clusters.delete
  • container.clusters.deleteTagBinding
  • container.clusters.get
  • container.clusters.getCredentials
  • container.clusters.impersonate
  • container.clusters.list
  • container.clusters.listEffectiveTags
  • container.clusters.listTagBindings
  • container.clusters.update
  • container.componentStatuses.get
  • container.componentStatuses.list
  • container.configMaps.create
  • container.configMaps.delete
  • container.configMaps.get
  • container.configMaps.list
  • container.configMaps.update
  • container.controllerRevisions.create
  • container.controllerRevisions.delete
  • container.controllerRevisions.get
  • container.controllerRevisions.list
  • container.controllerRevisions.update
  • container.cronJobs.create
  • container.cronJobs.delete
  • container.cronJobs.get
  • container.cronJobs.getStatus
  • container.cronJobs.list
  • container.cronJobs.update
  • container.cronJobs.updateStatus
  • container.csiDrivers.create
  • container.csiDrivers.delete
  • container.csiDrivers.get
  • container.csiDrivers.list
  • container.csiDrivers.update
  • container.csiNodeInfos.create
  • container.csiNodeInfos.delete
  • container.csiNodeInfos.get
  • container.csiNodeInfos.list
  • container.csiNodeInfos.update
  • container.csiNodes.create
  • container.csiNodes.delete
  • container.csiNodes.get
  • container.csiNodes.list
  • container.csiNodes.update
  • container.customResourceDefinitions.create
  • container.customResourceDefinitions.delete
  • container.customResourceDefinitions.get
  • container.customResourceDefinitions.getStatus
  • container.customResourceDefinitions.list
  • container.customResourceDefinitions.update
  • container.customResourceDefinitions.updateStatus
  • container.daemonSets.create
  • container.daemonSets.delete
  • container.daemonSets.get
  • container.daemonSets.getStatus
  • container.daemonSets.list
  • container.daemonSets.update
  • container.daemonSets.updateStatus
  • container.deployments.create
  • container.deployments.delete
  • container.deployments.get
  • container.deployments.getScale
  • container.deployments.getStatus
  • container.deployments.list
  • container.deployments.rollback
  • container.deployments.update
  • container.deployments.updateScale
  • container.deployments.updateStatus
  • container.endpointSlices.create
  • container.endpointSlices.delete
  • container.endpointSlices.get
  • container.endpointSlices.list
  • container.endpointSlices.update
  • container.endpoints.create
  • container.endpoints.delete
  • container.endpoints.get
  • container.endpoints.list
  • container.endpoints.update
  • container.events.create
  • container.events.delete
  • container.events.get
  • container.events.list
  • container.events.update
  • container.frontendConfigs.create
  • container.frontendConfigs.delete
  • container.frontendConfigs.get
  • container.frontendConfigs.list
  • container.frontendConfigs.update
  • container.horizontalPodAutoscalers.create
  • container.horizontalPodAutoscalers.delete
  • container.horizontalPodAutoscalers.get
  • container.horizontalPodAutoscalers.getStatus
  • container.horizontalPodAutoscalers.list
  • container.horizontalPodAutoscalers.update
  • container.horizontalPodAutoscalers.updateStatus
  • container.hostServiceAgent.use
  • container.ingresses.create
  • container.ingresses.delete
  • container.ingresses.get
  • container.ingresses.getStatus
  • container.ingresses.list
  • container.ingresses.update
  • container.ingresses.updateStatus
  • container.initializerConfigurations.create
  • container.initializerConfigurations.delete
  • container.initializerConfigurations.get
  • container.initializerConfigurations.list
  • container.initializerConfigurations.update
  • container.jobs.create
  • container.jobs.delete
  • container.jobs.get
  • container.jobs.getStatus
  • container.jobs.list
  • container.jobs.update
  • container.jobs.updateStatus
  • container.leases.create
  • container.leases.delete
  • container.leases.get
  • container.leases.list
  • container.leases.update
  • container.limitRanges.create
  • container.limitRanges.delete
  • container.limitRanges.get
  • container.limitRanges.list
  • container.limitRanges.update
  • container.localSubjectAccessReviews.create
  • container.localSubjectAccessReviews.list
  • container.managedCertificates.create
  • container.managedCertificates.delete
  • container.managedCertificates.get
  • container.managedCertificates.list
  • container.managedCertificates.update
  • container.mutatingWebhookConfigurations.create
  • container.mutatingWebhookConfigurations.delete
  • container.mutatingWebhookConfigurations.get
  • container.mutatingWebhookConfigurations.list
  • container.mutatingWebhookConfigurations.update
  • container.namespaces.create
  • container.namespaces.delete
  • container.namespaces.finalize
  • container.namespaces.get
  • container.namespaces.getStatus
  • container.namespaces.list
  • container.namespaces.update
  • container.namespaces.updateStatus
  • container.networkPolicies.create
  • container.networkPolicies.delete
  • container.networkPolicies.get
  • container.networkPolicies.list
  • container.networkPolicies.update
  • container.nodes.create
  • container.nodes.delete
  • container.nodes.get
  • container.nodes.getStatus
  • container.nodes.list
  • container.nodes.proxy
  • container.nodes.update
  • container.nodes.updateStatus
  • container.operations.get
  • container.operations.list
  • container.persistentVolumeClaims.create
  • container.persistentVolumeClaims.delete
  • container.persistentVolumeClaims.get
  • container.persistentVolumeClaims.getStatus
  • container.persistentVolumeClaims.list
  • container.persistentVolumeClaims.update
  • container.persistentVolumeClaims.updateStatus
  • container.persistentVolumes.create
  • container.persistentVolumes.delete
  • container.persistentVolumes.get
  • container.persistentVolumes.getStatus
  • container.persistentVolumes.list
  • container.persistentVolumes.update
  • container.persistentVolumes.updateStatus
  • container.petSets.create
  • container.petSets.delete
  • container.petSets.get
  • container.petSets.list
  • container.petSets.update
  • container.petSets.updateStatus
  • container.podDisruptionBudgets.create
  • container.podDisruptionBudgets.delete
  • container.podDisruptionBudgets.get
  • container.podDisruptionBudgets.getStatus
  • container.podDisruptionBudgets.list
  • container.podDisruptionBudgets.update
  • container.podDisruptionBudgets.updateStatus
  • container.podPresets.create
  • container.podPresets.delete
  • container.podPresets.get
  • container.podPresets.list
  • container.podPresets.update
  • container.podSecurityPolicies.create
  • container.podSecurityPolicies.delete
  • container.podSecurityPolicies.get
  • container.podSecurityPolicies.list
  • container.podSecurityPolicies.update
  • container.podSecurityPolicies.use
  • container.podTemplates.create
  • container.podTemplates.delete
  • container.podTemplates.get
  • container.podTemplates.list
  • container.podTemplates.update
  • container.pods.attach
  • container.pods.create
  • container.pods.delete
  • container.pods.evict
  • container.pods.exec
  • container.pods.get
  • container.pods.getLogs
  • container.pods.getStatus
  • container.pods.initialize
  • container.pods.list
  • container.pods.portForward
  • container.pods.proxy
  • container.pods.update
  • container.pods.updateStatus
  • container.priorityClasses.create
  • container.priorityClasses.delete
  • container.priorityClasses.get
  • container.priorityClasses.list
  • container.priorityClasses.update
  • container.replicaSets.create
  • container.replicaSets.delete
  • container.replicaSets.get
  • container.replicaSets.getScale
  • container.replicaSets.getStatus
  • container.replicaSets.list
  • container.replicaSets.update
  • container.replicaSets.updateScale
  • container.replicaSets.updateStatus
  • container.replicationControllers.create
  • container.replicationControllers.delete
  • container.replicationControllers.get
  • container.replicationControllers.getScale
  • container.replicationControllers.getStatus
  • container.replicationControllers.list
  • container.replicationControllers.update
  • container.replicationControllers.updateScale
  • container.replicationControllers.updateStatus
  • container.resourceQuotas.create
  • container.resourceQuotas.delete
  • container.resourceQuotas.get
  • container.resourceQuotas.getStatus
  • container.resourceQuotas.list
  • container.resourceQuotas.update
  • container.resourceQuotas.updateStatus
  • container.roleBindings.create
  • container.roleBindings.delete
  • container.roleBindings.get
  • container.roleBindings.list
  • container.roleBindings.update
  • container.roles.bind
  • container.roles.create
  • container.roles.delete
  • container.roles.escalate
  • container.roles.get
  • container.roles.list
  • container.roles.update
  • container.runtimeClasses.create
  • container.runtimeClasses.delete
  • container.runtimeClasses.get
  • container.runtimeClasses.list
  • container.runtimeClasses.update
  • container.scheduledJobs.create
  • container.scheduledJobs.delete
  • container.scheduledJobs.get
  • container.scheduledJobs.list
  • container.scheduledJobs.update
  • container.scheduledJobs.updateStatus
  • container.secrets.create
  • container.secrets.delete
  • container.secrets.get
  • container.secrets.list
  • container.secrets.update
  • container.selfSubjectAccessReviews.create
  • container.selfSubjectAccessReviews.list
  • container.selfSubjectRulesReviews.create
  • container.serviceAccounts.create
  • container.serviceAccounts.createToken
  • container.serviceAccounts.delete
  • container.serviceAccounts.get
  • container.serviceAccounts.list
  • container.serviceAccounts.update
  • container.services.create
  • container.services.delete
  • container.services.get
  • container.services.getStatus
  • container.services.list
  • container.services.proxy
  • container.services.update
  • container.services.updateStatus
  • container.statefulSets.create
  • container.statefulSets.delete
  • container.statefulSets.get
  • container.statefulSets.getScale
  • container.statefulSets.getStatus
  • container.statefulSets.list
  • container.statefulSets.update
  • container.statefulSets.updateScale
  • container.statefulSets.updateStatus
  • container.storageClasses.create
  • container.storageClasses.delete
  • container.storageClasses.get
  • container.storageClasses.list
  • container.storageClasses.update
  • container.storageStates.create
  • container.storageStates.delete
  • container.storageStates.get
  • container.storageStates.getStatus
  • container.storageStates.list
  • container.storageStates.update
  • container.storageStates.updateStatus
  • container.storageVersionMigrations.create
  • container.storageVersionMigrations.delete
  • container.storageVersionMigrations.get
  • container.storageVersionMigrations.getStatus
  • container.storageVersionMigrations.list
  • container.storageVersionMigrations.update
  • container.storageVersionMigrations.updateStatus
  • container.subjectAccessReviews.create
  • container.subjectAccessReviews.list
  • container.thirdPartyObjects.create
  • container.thirdPartyObjects.delete
  • container.thirdPartyObjects.get
  • container.thirdPartyObjects.list
  • container.thirdPartyObjects.update
  • container.thirdPartyResources.create
  • container.thirdPartyResources.delete
  • container.thirdPartyResources.get
  • container.thirdPartyResources.list
  • container.thirdPartyResources.update
  • container.tokenReviews.create
  • container.updateInfos.create
  • container.updateInfos.delete
  • container.updateInfos.get
  • container.updateInfos.list
  • container.updateInfos.update
  • container.validatingWebhookConfigurations.create
  • container.validatingWebhookConfigurations.delete
  • container.validatingWebhookConfigurations.get
  • container.validatingWebhookConfigurations.list
  • container.validatingWebhookConfigurations.update
  • container.volumeAttachments.create
  • container.volumeAttachments.delete
  • container.volumeAttachments.get
  • container.volumeAttachments.getStatus
  • container.volumeAttachments.list
  • container.volumeAttachments.update
  • container.volumeAttachments.updateStatus
  • container.volumeSnapshotClasses.create
  • container.volumeSnapshotClasses.delete
  • container.volumeSnapshotClasses.get
  • container.volumeSnapshotClasses.list
  • container.volumeSnapshotClasses.update
  • container.volumeSnapshotContents.create
  • container.volumeSnapshotContents.delete
  • container.volumeSnapshotContents.get
  • container.volumeSnapshotContents.getStatus
  • container.volumeSnapshotContents.list
  • container.volumeSnapshotContents.update
  • container.volumeSnapshotContents.updateStatus
  • container.volumeSnapshots.create
  • container.volumeSnapshots.delete
  • container.volumeSnapshots.get
  • container.volumeSnapshots.getStatus
  • container.volumeSnapshots.list
  • container.volumeSnapshots.update
  • container.volumeSnapshots.updateStatus

recommender.containerDiagnosisInsights.*

  • recommender.containerDiagnosisInsights.get
  • recommender.containerDiagnosisInsights.list
  • recommender.containerDiagnosisInsights.update

recommender.containerDiagnosisRecommendations.*

  • recommender.containerDiagnosisRecommendations.get
  • recommender.containerDiagnosisRecommendations.list
  • recommender.containerDiagnosisRecommendations.update

recommender.locations.*

  • recommender.locations.get
  • recommender.locations.list

recommender.networkAnalyzerGkeConnectivityInsights.*

  • recommender.networkAnalyzerGkeConnectivityInsights.get
  • recommender.networkAnalyzerGkeConnectivityInsights.list
  • recommender.networkAnalyzerGkeConnectivityInsights.update

recommender.networkAnalyzerGkeIpAddressInsights.*

  • recommender.networkAnalyzerGkeIpAddressInsights.get
  • recommender.networkAnalyzerGkeIpAddressInsights.list
  • recommender.networkAnalyzerGkeIpAddressInsights.update

resourcemanager.projects.get

resourcemanager.projects.list

(roles/iam.serviceAccountAdmin)

서비스 계정을 만들고 관리합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 서비스 계정

iam.serviceAccounts.create

iam.serviceAccounts.createTagBinding

iam.serviceAccounts.delete

iam.serviceAccounts.deleteTagBinding

iam.serviceAccounts.disable

iam.serviceAccounts.enable

iam.serviceAccounts.get

iam.serviceAccounts.getIamPolicy

iam.serviceAccounts.list

iam.serviceAccounts.listEffectiveTags

iam.serviceAccounts.listTagBindings

iam.serviceAccounts.setIamPolicy

iam.serviceAccounts.undelete

iam.serviceAccounts.update

resourcemanager.projects.get

resourcemanager.projects.list

사용자 관리 서비스 계정으로 AI Platform 파이프라인을 실행하는 데 필요한 역할

Google Kubernetes Engine(GKE) 클러스터의 pod는 GKE 클러스터의 서비스 계정을 사용하여 Google Cloud에 인증합니다. AI Platform 파이프라인을 더 쉽게 설정하고 사용할 수 있도록 AI Platform 파이프라인에서 만든 GKE 클러스터는 액세스 범위가 https://www.googleapis.com/auth/cloud-platform인 기본 Compute Engine 서비스 계정을 사용합니다. 이 액세스 범위는 프로젝트에서 사용 설정한 Google Cloud 리소스 및 API에 대한 전체 액세스 권한을 제공하므로 Google Cloud에 대한 과도한 액세스 권한을 클러스터의 워크로드에 제공할 수 있습니다.

AI Platform 파이프라인 클러스터에서 실행되는 워크로드에 세분화된 권한을 할당하려면 클러스터의 서비스 계정을 만들고 이 서비스 계정에 프로젝트의 다음 역할에 대한 액세스 권한을 부여하세요.

  • 모니터링 뷰어: 모니터링 뷰어(roles/monitoring.viewer) 역할은 모니터링 데이터 및 구성에 대한 읽기 액세스 권한을 제공합니다.
  • 모니터링 측정항목 작성자: 모니터링 측정항목 작성자(roles/monitoring.metricWriter) 역할은 클러스터가 측정항목을 쓸 수 있도록 쓰기 액세스 권한을 제공합니다.
  • 로그 작성자: 클러스터는 로그 작성자(roles/logging.logWriter) 역할을 통해 로그 항목을 쓸 수 있습니다.
  • 스토리지 객체 뷰어: Container Registry에 저장된 파이프라인의 커스텀 컨테이너 이미지를 만들려면 AI Platform 파이프라인 클러스터에 프로젝트의 스토리지 객체 뷰어(roles/storage.objectViewer) 역할에 대한 액세스 권한을 부여합니다.

또한 ML 파이프라인이 사용하는 모든 Google Cloud 리소스 또는 API에 대한 액세스 권한을 서비스 계정에 부여해야 합니다.

역할 제목 설명 권한

(roles/monitoring.viewer)

모니터링 데이터와 구성의 모든 정보를 가져와 나열할 수 있는 읽기 전용 액세스 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 프로젝트

cloudnotifications.activities.list

monitoring.alertPolicies.get

monitoring.alertPolicies.list

monitoring.dashboards.get

monitoring.dashboards.list

monitoring.groups.get

monitoring.groups.list

monitoring.metricDescriptors.get

monitoring.metricDescriptors.list

monitoring.monitoredResourceDescriptors.*

  • monitoring.monitoredResourceDescriptors.get
  • monitoring.monitoredResourceDescriptors.list

monitoring.notificationChannelDescriptors.*

  • monitoring.notificationChannelDescriptors.get
  • monitoring.notificationChannelDescriptors.list

monitoring.notificationChannels.get

monitoring.notificationChannels.list

monitoring.services.get

monitoring.services.list

monitoring.slos.get

monitoring.slos.list

monitoring.snoozes.get

monitoring.snoozes.list

monitoring.timeSeries.list

monitoring.uptimeCheckConfigs.get

monitoring.uptimeCheckConfigs.list

opsconfigmonitoring.resourceMetadata.list

resourcemanager.projects.get

resourcemanager.projects.list

stackdriver.projects.get

stackdriver.resourceMetadata.list

(roles/monitoring.metricWriter)

측정항목에 대한 쓰기 전용 액세스 권한을 제공합니다. 이는 Cloud Monitoring 에이전트 및 측정항목을 전송하는 기타 시스템에 필요한 권한을 정확히 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 프로젝트

monitoring.metricDescriptors.create

monitoring.metricDescriptors.get

monitoring.metricDescriptors.list

monitoring.monitoredResourceDescriptors.*

  • monitoring.monitoredResourceDescriptors.get
  • monitoring.monitoredResourceDescriptors.list

monitoring.timeSeries.create

(roles/logging.logWriter)

로그 항목을 쓸 수 있는 권한을 제공합니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 프로젝트

logging.logEntries.create

logging.logEntries.route

(roles/storage.objectViewer)

객체와 메타데이터(ACL 제외)를 볼 수 있는 액세스 권한을 부여합니다. 버킷의 객체도 나열할 수 있습니다.

이 역할을 부여할 수 있는 최하위 수준 리소스:

  • 버킷

resourcemanager.projects.get

resourcemanager.projects.list

storage.folders.get

storage.folders.list

storage.managedFolders.get

storage.managedFolders.list

storage.objects.get

storage.objects.list

사용자로 AI Platform 파이프라인에 액세스하는 데 필요한 역할

AI Platform 파이프라인 클러스터에 액세스하려면 각 사용자에게 Google Kubernetes Engine 클러스터의 서비스 계정에 대한 Kubernetes Engine 클러스터 뷰어(roles/container.clusterViewer) 역할과 서비스 계정 사용자 역할을 부여해야 합니다.

역할 제목 설명 권한

(roles/container.clusterViewer)

GKE 클러스터를 가져오고 나열할 수 있는 액세스 권한을 제공합니다.

container.clusters.get

container.clusters.list

resourcemanager.projects.get

resourcemanager.projects.list

다음 섹션으로 이동하여 사용자에게 Kubernetes Engine 클러스터 뷰어 역할 및 서비스 계정 사용자 역할에 대한 액세스 권한을 부여하는 방법을 알아봅니다.

사용자에게 AI Platform 파이프라인에 대한 액세스 권한 부여

다음 안내에 따라 사용자 계정에 AI Platform 파이프라인 클러스터에 대한 액세스 권한을 부여합니다.

  1. Google Cloud 콘솔에서 AI Platform 파이프라인을 엽니다.

    AI Platform Pipelines로 이동

  2. AI Platform Pipelines 클러스터를 찾습니다. 후속 단계에서 사용하기 위해 클러스터영역을 기록해 둡니다.

  3. Cloud Shell 세션을 엽니다.

    Cloud Shell 열기

    Cloud Shell이 Google Cloud 콘솔 하단의 프레임에 열립니다. Cloud Shell을 사용하여 이 프로세스의 나머지를 완료합니다.

  4. 다음 명령어를 실행하여 이 Cloud Shell 세션의 기본 Google Cloud 프로젝트를 설정합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

  5. 다음 명령어를 실행하여 GKE 클러스터에서 사용하는 서비스 계정을 찾습니다.

    gcloud container clusters describe CLUSTER_NAME --zone ZONE \
    --format="flattened(nodePools[].config.serviceAccount)"
    

    다음을 바꿉니다.

    • CLUSTER_NAME: GKE 클러스터의 이름입니다.
    • ZONE: 클러스터가 생성된 영역입니다.

    응답에 클러스터가 default라는 서비스 계정을 사용하는 것이 나타날 수 있습니다. 이 값은 Compute Engine의 기본 서비스 계정을 나타냅니다. 다음 명령어를 실행하여 이 서비스 계정의 전체 이름을 찾습니다.

    gcloud iam service-accounts list \
    --filter "compute@developer.gserviceaccount.com"
    

    Compute Engine 기본 서비스 계정에 대해 자세히 알아보세요.

  6. 사용자 계정에 GKE 클러스터 서비스 계정의 서비스 계정 사용자 역할을 부여합니다.

    gcloud iam service-accounts add-iam-policy-binding \
    SERVICE_ACCOUNT_NAME \
    --member=user:USERNAME \
    --role=roles/iam.serviceAccountUser
    

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_NAME: 이전 단계에서 찾은 GKE 클러스터의 서비스 계정 이름입니다. 서비스 계정 이름 형식은 *@*.gserviceaccount.com과 같습니다.
    • USERNAME: Google Cloud의 사용자 이름입니다.
  7. 사용자 계정에 프로젝트의 GKE 클러스터 뷰어 역할에 대한 액세스 권한을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:USERNAME --role roles/container.clusterViewer
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • USERNAME: Google Cloud에서의 사용자 이름입니다.