클러스터 키 없는 모드 설정 및 사용

이 문서에서는 베어메탈용 Google Distributed Cloud(소프트웨어 전용)의 클러스터 키 없는 모드 기능을 설정하고 사용하는 방법을 설명합니다. 키 없는 모드는 서비스 계정 키 대신 단기 토큰과 워크로드 아이덴티티 제휴를 사용하여 클러스터를 만들고 보호합니다. 서비스 계정의 단기 사용자 인증 정보는 OAuth 2.0 액세스 토큰 형태로 제공됩니다. 액세스 토큰은 기본적으로 1시간 후에 만료됩니다. 단, 이미지 가져오기 토큰은 12시간 후에 만료됩니다.

키 없는 모드는 버전 1.30 이상 클러스터에서만 사용할 수 있습니다.

반면 클러스터 생성 및 보호를 위한 표준 방법인 키 모드는 다운로드된 서비스 계정 키를 사용합니다. 자체 관리형(관리자, 하이브리드 또는 독립형) 클러스터를 만들 때 다운로드한 키의 경로를 지정합니다. 그러면 키가 클러스터 및 관리 사용자 클러스터에 보안 비밀로 저장됩니다. 기본적으로 서비스 계정 키는 만료되지 않으며 올바르게 관리되지 않으면 보안 위험이 발생합니다.

키 없는 모드는 서비스 계정 키를 사용하는 것보다 다음과 같은 두 가지 주요 이점이 있습니다.

  • 보안 개선: 서비스 계정 키를 올바르게 관리하지 않으면 보안 위험이 발생할 수 있습니다. OAuth 2.0 토큰과 워크로드 아이덴티티 제휴는 서비스 계정 키의 권장 대안으로 간주됩니다. 서비스 계정 토큰에 관한 자세한 내용은 단기 서비스 계정 사용자 인증 정보를 참조하세요. 워크로드 아이덴티티 제휴에 관한 자세한 내용은 워크로드 아이덴티티 제휴를 참조하세요.

  • 유지보수 감소: 서비스 계정 키는 더 많은 유지보수가 필요합니다. 이러한 키를 정기적으로 순환하고 보호하는 것은 상당한 관리 부담이 될 수 있습니다.

이 기능은 미리보기 버전으로 제공되며 몇 가지 알려진 제한사항이 있습니다.

시작하기 전에

다음 섹션에서는 서비스 계정을 만들고 키 없는 모드에 필요한 역할을 부여합니다. 이 문서의 설정 안내는 Google Cloud 리소스 설정의 안내를 대체하는 것이 아니라 표준 Google Distributed Cloud 소프트웨어 전용 설치 기본 요건과 함께 필요합니다. 키 없는 모드에 필요한 서비스 계정은 Google Cloud 리소스 설정에 설명된 서비스 계정과 유사하지만 고유한 이름이 지정되어 있으므로 기본 서비스 계정 키를 사용하는 클러스터를 방해하지 않습니다.

이 페이지는 기본 기술 인프라의 수명 주기를 설정, 모니터링, 관리하는 관리자, 설계자, 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 작업에 대해 자세히 알아보려면 일반 GKE 기업 사용자 역할 및 태스크를 참조하세요.

다음 표에서는 키 없는 모드에 필요한 서비스 계정을 설명합니다.

서비스 계정 목적 역할
ADMIN_SA 이 서비스 계정을 사용하여 토큰을 생성합니다. 각 토큰에는 서비스 계정 역할과 연결된 권한이 있습니다. roles/gkehub.admin
roles/logging.admin
roles/monitoring.admin
roles/monitoring.dashboardEditor
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
baremetal-controller Connect Agent는 이 서비스 계정을 사용하여 클러스터와 Google Cloud 간의 연결을 유지하고 Fleet에 클러스터를 등록합니다. 이 서비스 계정은 baremetal-gcr 서비스 계정의 토큰도 새로고침합니다. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops Stackdriver Agent는 이 서비스 계정을 사용하여 클러스터의 로그와 측정항목을 Cloud LoggingCloud Monitoring으로 내보냅니다. roles/logging.logWriter
roles/monitoring.metricWriter
roles/stackdriver.resourceMetadata.writer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/monitoring.dashboardEditor
roles/monitoring.viewer
roles/serviceusage.serviceUsageViewer
roles/kubernetesmetadata.publisher
baremetal-gcr Google Distributed Cloud는 이 서비스 계정을 사용하여 Container Registry에서 컨테이너 이미지를 다운로드합니다. 없음

키 없는 모드용 서비스 계정 만들기 및 구성

다음 섹션에는 필요한 서비스 계정을 만들고 키 없는 모드에 필요한 역할을 부여하는 안내가 포함되어 있습니다. 서비스 계정 및 필요한 역할의 목록은 이전 섹션의 표를 참조하세요.

서비스 계정 만들기

키 없는 모드의 서비스 계정을 만들려면 다음 단계를 사용합니다.

  1. 관리자 워크스테이션에서 Google Cloud CLI에 로그인합니다.

    gcloud auth login
    
  2. 원하는 경우 관리 서비스 계정을 만듭니다.

    ADMIN_SA 서비스 계정의 이름은 임의로 지정할 수 있습니다. 이전 섹션의 표에 지정된 역할이 있는 기존 서비스 계정을 사용할 수도 있지만 최소 권한의 원칙에 위배되므로 권장하지 않습니다.

    gcloud iam service-accounts create ADMIN_SA \
        --project=PROJECT_ID
    

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

  3. 키 없는 기능을 위한 표준 서비스 계정을 만듭니다.

    키가 없는 기능의 표준 서비스 계정에는 원하는 경우 맞춤설정할 수 있는 사전 지정된 이름이 있습니다.

    gcloud iam service-accounts create baremetal-controller \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-cloud-ops \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

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

서비스 계정에 ID 및 액세스 관리 정책 바인딩 추가

  1. ADMIN_SA 서비스 계정에 필요한 역할의 IAM 정책 바인딩을 추가합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
  2. baremetal-controller 서비스 계정에 필요한 역할의 IAM 정책 바인딩을 추가합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. baremetal-cloud-ops 서비스 계정에 필요한 역할의 IAM 정책 바인딩을 추가합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/stackdriver.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/kubernetesmetadata.publisher
    
  4. baremetal-controller 서비스 계정에 baremetal-gcr 서비스 계정을 대신하여 액세스 토큰을 생성할 수 있는 권한을 부여합니다.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

클러스터에 워크로드 아이덴티티 제휴 구성

GKE용 워크로드 아이덴티티 제휴를 사용하여 Google Cloud 액세스 권한을 제공하려면 애플리케이션 ID에 해당하는 주 구성원에게 특정 Google Cloud 리소스에 대한 액세스 권한을 부여하는 IAM 허용 정책을 만듭니다. 이 경우 워크로드 아이덴티티 제휴는 클러스터의 특정 운영자에게 액세스 권한을 부여합니다. GKE용 워크로드 아이덴티티 제휴에 관한 자세한 내용은 IAM 문서의 워크로드 아이덴티티 제휴를 참조하세요.

클러스터 운영자의 IAM 정책 바인딩 추가

다음 명령어는 anthos-cluster-operator Kubernetes 서비스 계정에 baremetal-controller 서비스 계정을 가장하고 클러스터를 대신하여 Google Cloud 리소스와 상호작용할 수 있는 권한을 부여합니다.

  1. 부트스트랩 클러스터를 비롯한 각 키 없는 클러스터(또는 계획된 키 없는 클러스터)의 경우 클러스터의 anthos-cluster-operatorbaremetal-controller 서비스 계정을 명의 도용할 수 있는 권한을 부여합니다.

    다음 명령어에서 principalSet는 워크로드 ID 풀과 kube-system 네임스페이스의 Kubernetes 서비스 계정 anthos-cluster-operator로 구성됩니다.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    

    다음을 바꿉니다.

    • PROJECT_NUM: 자동으로 생성되는 프로젝트의 고유 식별자입니다.

    • REGION: 클러스터의 Fleet 멤버십 위치입니다. 기본값은 global입니다. 자세한 내용은 Fleet 멤버십 위치를 참조하세요.

    • CLUSTER_NAME: 클러스터의 이름입니다. 기본적으로 부트스트랩 클러스터 이름은 bmctl-MACHINE_NAME입니다.

  2. baremetal-controller 서비스 계정의 정책 바인딩을 확인합니다.

    gcloud iam service-accounts get-iam-policy \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
    

    응답은 다음과 비슷하게 표시됩니다.

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator
      role: roles/iam.workloadIdentityUser
    etag: BwYoN3QLig0=
    version: 1
    

Google Cloud Observability 운영자의 IAM 정책 바인딩 추가

다음 명령어는 다음 Google Cloud Observability Kubernetes 서비스 계정에 baremetal-cloud-ops 서비스 계정을 가장하고 클러스터를 대신하여 Google Cloud 리소스와 상호작용할 수 있는 권한을 부여합니다.

  • cloud-audit-logging
  • gke-metrics-agent
  • kubestore-collector
  • metadata-agent
  • stackdriver-log-forwarder
  1. 부트스트랩 클러스터를 포함한 각 키 없는 클러스터(또는 계획된 키 없는 클러스터)의 경우 클러스터의 Google Cloud Observability 운영자에게 baremetal-cloud-ops 서비스 계정을 가장할 수 있는 권한을 부여합니다.

    다음 명령어에서 principalSet는 워크로드 아이덴티티 풀과 kube-system 네임스페이스의 Kubernetes 서비스 계정(예: cloud-audit-logging)으로 구성됩니다.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
  2. baremetal-cloud-ops 서비스 계정의 정책 바인딩을 확인합니다.

    gcloud iam service-accounts get-iam-policy \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
    

    응답은 다음과 비슷하게 표시됩니다.

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder
      role: roles/iam.workloadIdentityUser
    etag: BwYhT4gL-dY=
    version: 1
    

클러스터 구성

키 없는 모드를 사용하는 클러스터의 가장 명백한 클러스터 구성 차이점은 다운로드된 서비스 계정 키의 경로를 지정하지 않는다는 점입니다.

  1. 구성 파일에서 클러스터 설정을 입력할 때는 다음 예와 같이 사용자 인증 정보 섹션의 서비스 계정 키 경로를 비워 둡니다.

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: cluster-CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
      ...
    
  2. 원하는 경우 키 없는 모드 서비스 계정의 맞춤 이름을 설정합니다.

    맞춤 이름을 지정하면 기존 서비스 계정을 사용할 수 있습니다. 두 개 이상의 서비스 계정에 동일한 맞춤 이름을 지정하면 더 적은 수의 서비스 계정으로 통합할 수 있습니다.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: cluster-CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA"
        baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA"
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_GCR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
        ...
    

클러스터 작업

키가 없는 모드 클러스터를 만들거나 업그레이드하거나 삭제할 준비가 되면 다음 단계를 사용합니다.

  1. Google Cloud CLI에 로그인합니다.

    gcloud auth login
    
  2. 관리자 워크스테이션에서 ADMIN_SA 서비스 계정의 키를 만들고 다운로드합니다.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com
    

    TMP_KEY_FILE_PATH을 다운로드한 키 파일의 경로(파일 이름 포함)로 바꿉니다.

  3. ADMIN_SA 서비스 계정으로 Google Cloud에 대한 액세스 권한을 승인합니다.

    gcloud auth activate-service-account ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  4. 다운로드한 JSON 키 파일을 삭제합니다.

    rm TMP_KEY_FILE_PATH
    
  5. 관리자 워크스테이션에서 ADMIN_SA 서비스 계정으로 만든 액세스 토큰 값을 사용하여 GCP_ACCESS_TOKEN 환경 변수를 만듭니다.

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com)
    

    기본적으로 액세스 토큰의 수명은 1시간입니다.

  6. ADMIN_SA 서비스 계정에서 올바른 만료일로 토큰을 생성했는지 확인합니다.

    curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
    

    응답에는 다음과 유사한 줄이 포함되어 있어야 합니다.

    ...
    "expires_in": "3582",
    "email": "ADMIN_SA@PROJECT_ID.iam.gserviceaccount.com)",
    ...
    

    만료 값은 초 단위이며 3600보다 작아야 합니다. 이는 토큰이 1시간 이내에 만료됨을 나타냅니다.

  7. bmctl 명령어를 실행하여 키가 없는 모드 클러스터를 만들거나 업그레이드하거나 삭제합니다.

    bmctlGCP_ACCESS_TOKEN 환경 변수가 설정되었음을 감지하면 토큰 유효성 검사를 실행합니다. 토큰이 유효하면 bmctl에서 키 없는 모드 클러스터 작업에 이를 사용합니다.

    키가 없는 모드를 사용하는 클러스터의 경우 다음 명령어를 실행하려면 GCP_ACCESS_TOKEN 환경 변수를 유효하고 활성 상태인 액세스 토큰으로 설정해야 합니다.

    • bmctl create cluster -c CLUSTER_NAME
    • bmctl reset cluster -c CLUSTER_NAME
    • bmctl upgrade cluster -c CLUSTER_NAME

제한사항

키 없는 모드가 미리보기 상태인 동안 다음 기능은 키 없는 모드에서 실행되는 클러스터에서 사용할 수 없습니다.

  • 프록시 서버 사용
  • VPC 서비스 제어

다음 단계