Fleet 워크로드에서 API 및 서비스 인증

이 페이지에서는 Fleet 워크로드 아이덴티티 제휴를 사용하여 Compute Engine API 또는 AI Platform API와 같은 Google Cloud API에 인증하도록 애플리케이션을 구성하는 방법을 보여줍니다.

Fleet 워크로드 아이덴티티 제휴란 무엇인가요?

워크로드 아이덴티티 제휴를 사용하면 사용자 인증 정보를 다운로드하고 수동으로 순환하고 일반적으로 관리할 필요 없이 클러스터의 워크로드가 Google Cloud에 인증할 수 있습니다. 대신 워크로드가 Google Cloud에서 생성한 단기 토큰을 사용하여 인증합니다.

GKE용 워크로드 아이덴티티 제휴는 GKE 클러스터에서 실행되는 애플리케이션이 아이덴티티를 가져오는 프로젝트 전체 워크로드 아이덴티티 풀을 제공합니다. Fleet 워크로드 아이덴티티 제휴는 클러스터가 다른 프로젝트에 있는지 또는 Google Cloud 외부에 있는지에 관계없이 GKE용 워크로드 아이덴티티 제휴를 모든 Fleet 구성원 클러스터로 확장합니다. Fleet 멤버십에 워크로드 아이덴티티 제휴가 사용 설정된 등록된 클러스터는 Fleet 전체 워크로드 아이덴티티 풀을 사용하여 아이덴티티를 가져오므로, 여러 프로젝트에 걸쳐 전체 Fleet에서 Google Cloud API 및 기타 서비스에 대한 인증을 구성할 수 있습니다.

또한 Fleet 워크로드 아이덴티티 제휴는 일부 클러스터 유형의 Connect Agent에서 Fleet 멤버십의 일부로 Google Cloud에 인증을 수행하기 위해 사용될 수 있으며, Cloud Service Mesh와 같이 프로젝트 간에 작동하는 일부 GKE Enterprise 기능을 사용하기 위해 필요합니다.

워크로드 아이덴티티 제휴 풀 및 ID 동일성

Fleet 워크로드 아이덴티티 제휴를 사용하면 Fleet의 각 애플리케이션에 Google Cloud 및 사용자가 개발하는 기타 서비스에 인증하는 데 사용할 수 있는 고유한 제휴 아이덴티티가 부여됩니다. 애플리케이션에 IAM에서 인식할 수 있는 주 구성원 식별자가 부여됩니다. 이 식별자는 다음 구문을 사용합니다.

PREFIX://iam.googleapis.com/projects/FLEET_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_PROJECT_ID.svc.id.goog/SELECTOR

이 구문에는 다음과 같은 필드가 있습니다.

  • PREFIX: 선택한 리소스에 따라 IAM principal 또는 principalSet
  • FLEET_PROJECT_ID.svc.id.goog: Fleet의 워크로드 아이덴티티 풀. 각 Fleet에는 자동으로 생성된 하나의 고정된 워크로드 아이덴티티 풀이 있습니다.
  • FLEET_PROJECT_NUMBER: Fleet 호스트 프로젝트의 프로젝트 번호
  • SELECTOR: 리소스 선택기. 지원되는 선택기 목록은 지원되는 주 구성원 식별자를 참조하세요.

전체 Fleet이 Fleet 워크로드 아이덴티티 풀을 공유하므로, 각 클러스터에 대한 액세스를 관리할 필요 없이 다른 프로젝트나 클라우드를 포함하여 Fleet의 모든 위치에서 애플리케이션에 동일한 리소스에 대한 액세스 권한을 제공할 수 있습니다. 다른 Fleet 지원 기능과 마찬가지로 Fleet 워크로드 아이덴티티 제휴는 서로 다른 클러스터에서 이름과 네임스페이스가 동일한 Kubernetes 객체가 동일한 대상으로 간주되는 동일성의 원칙을 따릅니다.

예를 들어 동일한 Fleet의 여러 클러스터에 백엔드가 배포된 애플리케이션에서 Google Cloud API에 인증해야 하는 경우, backend 네임스페이스의 모든 워크로드가 해당 API에 액세스할 수 있도록 애플리케이션을 구성할 수 있습니다. ID 동일성을 포함하여 Fleet에서 동일성을 사용하는 방법에 대한 자세한 내용은 Fleet 작동 방식을 참조하세요.

Fleet 워크로드 아이덴티티 제휴를 사용 설정한 후 상응하는 주 구성원 식별자를 지정하여 IAM 허용 정책에서 Fleet의 주 구성원을 참조할 수 있습니다. 예를 들어 허용 정책에서 특정 Kubernetes 네임스페이스에 있는 특정 ServiceAccount를 참조할 수 있습니다. 그러면 해당 ServiceAccount를 사용하는 모든 애플리케이션에서 IAM 허용 정책이 적용되는 Google Cloud 리소스에 액세스할 수 있습니다.

사용자 인증 정보 흐름

특정 네임스페이스의 애플리케이션이 Fleet 워크로드 아이덴티티 제휴를 사용하여 인증하도록 하려면 다음 단계를 따르세요.

  1. 다음 정보가 포함된 ConfigMap을 해당 네임스페이스에 배포합니다.

    • 클러스터의 워크로드 아이덴티티 풀 및 ID 공급업체
    • 각 포드에서 Kubernetes가 ServiceAccount 토큰을 마운트하는 경로. 이 토큰은 서명된 JSON 웹 토큰(JWT)입니다.

    이 ConfigMap은 워크로드의 애플리케이션 기본 사용자 인증 정보(ADC) 파일로 작동합니다.

  2. 네임스페이스의 ServiceAccount와 같이 클러스터에 속한 주 구성원의 주 구성원 식별자에 특정 Google Cloud 리소스에 대한 액세스 권한을 부여하는 IAM 허용 정책을 만듭니다.

  3. 네임스페이스에 속한 워크로드의 포드 사양에 다음 구성이 있는지 확인합니다.

    • 포드의 ConfigMap 마운트 경로로 설정된 GOOGLE_APPLICATION_CREDENTIALS 환경 변수
    • GOOGLE_APPLICATION_CREDENTIALS 환경 변수에 지정한 것과 동일한 경로에 마운트된 ServiceAccount 토큰 및 사용자가 만든 ConfigMap을 포함하는 예상 볼륨
    • 예상 볼륨을 참조하는 컨테이너의 볼륨 마운트

워크로드가 Google Cloud API를 호출하면 다음 단계가 수행됩니다.

  1. Google Cloud 인증 라이브러리가 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 사용자 인증 정보를 찾습니다. ADC는 GOOGLE_APPLICATION_CREDENTIALS 환경 변수에 지정된 경로를 확인하여 인증 토큰을 찾습니다.
  2. ADC 인증 라이브러리는 ConfigMap의 데이터를 사용하여 포드에 마운트한 ServiceAccount JWT를 워크로드의 주 구성원 식별자를 참조하는 보안 토큰 서비스의 단기 제휴 토큰으로 교환합니다.
  3. ADC는 API 요청에 제휴 토큰을 포함합니다.
  4. IAM 허용 정책은 주 구성원이 Google Cloud 리소스에서 요청된 작업을 수행하도록 승인합니다.

Fleet 워크로드 아이덴티티 제휴에 지원되는 주 구성원 식별자

다음 표에서는 IAM 허용 정책에서 Fleet의 주 구성원을 참조하는 데 사용할 수 있는 선택기를 설명합니다.

주 구성원 식별자 유형 구문
특정 Kubernetes ServiceAccount를 사용하는 모든 포드 이름별로 ServiceAccount를 선택합니다.
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/SERVICEACCOUNT

다음을 바꿉니다.

  • PROJECT_NUMBER: 숫자 프로젝트 번호입니다. 프로젝트 번호를 가져오려면 프로젝트 식별을 참조하세요.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • NAMESPACE: Kubernetes 네임스페이스입니다.
  • SERVICEACCOUNT: Kubernetes ServiceAccount 이름입니다.

UID로 ServiceAccount를 선택합니다.
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/kubernetes.serviceaccount.uid/SERVICEACCOUNT_UID

다음을 바꿉니다.

  • PROJECT_NUMBER: 숫자 프로젝트 번호입니다. 프로젝트 번호를 가져오려면 프로젝트 식별을 참조하세요.
  • PROJECT_ID: Fleet 프로젝트 ID입니다.
  • SERVICEACCOUNT_UID: API 서버에 있는 ServiceAccount 객체의 UID입니다.

시작하기 전에

  • 다음 명령줄 도구가 설치되었는지 확인합니다.

    • 최신 버전의 Google Cloud CLI(Google Cloud와의 상호작용을 위한 명령줄 도구인 gcloud 포함).
    • kubectl

    Google Cloud와의 상호작용을 위해 Cloud Shell을 셸 환경으로 사용하는 경우 이러한 도구가 자동으로 설치됩니다.

  • 프로젝트에 사용할 수 있도록 gcloud CLI를 초기화했는지 확인합니다.

클러스터 준비

Fleet의 애플리케이션이 제휴된 아이덴티티를 수신하려면 먼저 실행되는 클러스터가 Fleet에 등록되어 있어야 하며 Fleet 워크로드 아이덴티티 제휴를 사용하도록 올바르게 구성되어야 합니다. 다음 섹션에서는 다양한 유형의 클러스터에 대해 Fleet 워크로드 아이덴티티 제휴를 설정하는 방법을 설명합니다.

GKE

GKE 클러스터의 경우 다음을 수행합니다.

  1. Google Kubernetes Engine 클러스터에서 아직 사용 설정되지 않았다면 GKE용 워크로드 아이덴티티 제휴를 사용 설정합니다.
  2. Fleet에 클러스터를 등록합니다.

클러스터 생성 및 Fleet 등록 프로세스 중에 GKE용 워크로드 아이덴티티 제휴를 사용 설정할 수도 있습니다.

Google Cloud 외부의 클러스터

다음 유형의 클러스터는 Fleet 워크로드 아이덴티티 제휴를 자동으로 사용 설정하며 클러스터를 만드는 동안 Fleet에 등록됩니다.

  • VMware용 Google Distributed Cloud(소프트웨어 전용)
  • 베어메탈용 Google Distributed Cloud(소프트웨어 전용)
  • GKE on AWS
  • Azure 기반 GKE

연결된 클러스터

GKE Multi-Cloud API를 사용하여 등록된 EKS 및 AKS 연결 클러스터는 기본적으로 Fleet 워크로드 아이덴티티 제휴를 사용하도록 설정된 상태로 등록됩니다. 연결된 다른 클러스터는 필요한 요구사항을 충족하는 경우에만 사용 설정된 Fleet 워크로드 아이덴티티 제휴로 등록됩니다. 클러스터 등록에서 해당 클러스터 유형에 대한 안내를 따르세요.

애플리케이션에서 Fleet 워크로드 아이덴티티 제휴 사용

다음 단계에서는 Fleet 워크로드 아이덴티티 제휴를 사용하도록 등록된 클러스터에서 워크로드를 구성하는 방법을 보여줍니다.

  1. 클러스터 워크로드 아이덴티티 풀 및 ID 공급업체의 이름을 찾습니다.

    gcloud container fleet memberships describe MEMBERSHIP_ID \
        --project=FLEET_PROJECT_ID \
        --format="table(authority.identityProvider,authority.workloadIdentityPool,name)"
    

    다음을 바꿉니다.

    • MEMBERSHIP_ID: 클러스터 멤버십 이름. 클러스터 이름인 경우가 많습니다.
    • FLEET_PROJECT_ID: Fleet 호스트 프로젝트의 프로젝트 ID

    출력은 다음과 비슷합니다.

    IDENTITY_PROVIDER: IDENTITY_PROVIDER
    WORKLOAD_IDENTITY_POOL: WORKLOAD_IDENTITY_POOL
    NAME: projects/FLEET_PROJECT_ID/locations/MEMBERSHIP_LOCATION/memberships/MEMBERSHIP_ID
    

    이 출력에는 다음 정보가 포함됩니다.

    • IDENTITY_PROVIDER: 클러스터의 ID 공급업체
    • MEMBERSHIP_LOCATION: Fleet 멤버십의 위치. 일반적으로 클러스터 위치와 동일합니다.
    • WORKLOAD_IDENTITY_POOL: Fleet과 연결된 워크로드 아이덴티티 풀의 이름. 이 값의 구문은 FLEET_PROJECT_ID.svc.id.goog입니다.
  2. Kubernetes 네임스페이스를 만듭니다. default 네임스페이스를 비롯한 기존 네임스페이스를 사용할 수도 있습니다.

    kubectl create namespace NAMESPACE
    

    NAMESPACE를 네임스페이스 이름으로 바꿉니다.

  3. 네임스페이스에 새 Kubernetes ServiceAccount를 만듭니다. 네임스페이스의 default ServiceAccount를 비롯한 기존 ServiceAccount를 사용할 수도 있습니다.

    kubectl create serviceaccount KSA_NAME \
        --namespace=NAMESPACE
    

    KSA_NAME을 서비스 계정의 이름으로 바꿉니다.

  4. 다음 매니페스트를 adc-config-map.yaml로 저장합니다. 이 ConfigMap에는 워크로드의 ADC 구성이 포함되어 있습니다.

    kind: ConfigMap
    apiVersion: v1
    metadata:
      namespace: NAMESPACE
      name: my-cloudsdk-config
    data:
      config: |
        {
          "type": "external_account",
          "audience": "identitynamespace:WORKLOAD_IDENTITY_POOL:IDENTITY_PROVIDER",
          "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
          "token_url": "https://sts.googleapis.com/v1/token",
          "credential_source": {
            "file": "/var/run/secrets/tokens/gcp-ksa/token"
          }
        }
    
  5. ConfigMap을 배포합니다.

    kubectl create -f adc-config-map.yaml
    
  6. 다음 매니페스트를 workload-config.yaml로 저장합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
      namespace:  NAMESPACE
    spec:
      serviceAccountName: KSA_NAME
      containers:
      - name: sample-container
        image: google/cloud-sdk:slim
        command: ["sleep","infinity"]
        env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /var/run/secrets/tokens/gcp-ksa/google-application-credentials.json
        volumeMounts:
        - name: gcp-ksa
          mountPath: /var/run/secrets/tokens/gcp-ksa
          readOnly: true
      volumes:
      - name: gcp-ksa
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              path: token
              audience: WORKLOAD_IDENTITY_POOL
              expirationSeconds: 172800
          - configMap:
              name: my-cloudsdk-config
              optional: false
              items:
              - key: "config"
                path: "google-application-credentials.json"
    

    이 워크로드를 배포하면 포드의 gcp-ksa 볼륨에 다음 데이터가 포함됩니다.

    포드의 컨테이너는 gcp-ksa 볼륨을 /var/run/secrets/tokens/gcp-ksa 경로에 마운트하고 해당 경로에서 사용자 인증 정보 구성 JSON 파일을 찾도록 ADC를 구성합니다.

  7. 워크로드를 배포합니다.

    kubectl apply -f workload-config.yaml
    

대안: IAM 서비스 계정 가장

또는 IAM 서비스 계정을 가장하여 IAM 서비스 계정이 수행할 수 있는 승인된 작업을 수행하도록 클러스터의 Kubernetes 서비스 계정을 구성할 수 있습니다. 이 방법을 사용하면 IAM과 Kubernetes 모두에서 서비스 계정 쌍을 관리해야 하므로 유지보수 오버헤드가 증가할 수 있습니다.

대부분의 경우 애플리케이션에서 Fleet 워크로드 아이덴티티 제휴 사용의 안내에 따라 IAM 허용 정책에서 Kubernetes 주 구성원을 직접 참조하여 Google Cloud 리소스에 대한 액세스 권한을 부여하는 것이 좋습니다.

  1. 클러스터 워크로드 아이덴티티 풀 및 ID 공급업체의 이름을 찾습니다.

    gcloud container fleet memberships describe MEMBERSHIP_ID \
        --project=FLEET_PROJECT_ID \
        --format="table(authority.identityProvider,authority.workloadIdentityPool,name)"
    

    다음을 바꿉니다.

    • MEMBERSHIP_ID: 클러스터 멤버십 이름. 클러스터 이름인 경우가 많습니다.
    • FLEET_PROJECT_ID: Fleet 호스트 프로젝트의 프로젝트 ID

    출력은 다음과 비슷합니다.

    IDENTITY_PROVIDER: IDENTITY_PROVIDER
    WORKLOAD_IDENTITY_POOL: WORKLOAD_IDENTITY_POOL
    NAME: projects/FLEET_PROJECT_ID/locations/MEMBERSHIP_LOCATION/memberships/MEMBERSHIP_ID
    

    이 출력에는 다음 정보가 포함됩니다.

    • IDENTITY_PROVIDER: 클러스터의 ID 공급업체
    • MEMBERSHIP_LOCATION: 멤버십의 위치. 일반적으로 클러스터 위치와 동일합니다.
    • WORKLOAD_IDENTITY_POOL: Fleet과 연결된 워크로드 아이덴티티 풀의 이름. 이 값의 구문은 FLEET_PROJECT_ID.svc.id.goog입니다.
  2. 애플리케이션에서 가장할 수 있는 IAM 서비스 계정을 만듭니다. 기존 IAM 서비스 계정을 사용할 수도 있습니다.

    gcloud iam service-accounts create IAM_SA_NAME \
        --project=IAM_SA_PROJECT_ID
    

    다음을 바꿉니다.

    • IAM_SA_NAME: IAM 서비스 계정의 이름
    • IAM_SA_PROJECT_ID: IAM 서비스 계정이 포함된 프로젝트의 프로젝트 ID. Fleet 호스트 프로젝트와 다를 수 있습니다.
  3. 필요한 IAM 허용 정책을 추가하여 Google Cloud API에 액세스하는 데 필요한 권한을 IAM 서비스 계정에 부여합니다. gcloud iam service-accounts add-iam-policy-binding 또는 다른 메서드를 사용하면 됩니다. 각 서비스의 문서에서 Google Cloud API를 사용하는 데 필요한 권한을 알아보고 역할 이해에서 필수 권한이 있는 사전 정의된 역할의 전체 목록을 살펴보세요.

  4. 네임스페이스에 Kubernetes ServiceAccount를 만듭니다. 기존 Kubernetes ServiceAccount와 default 서비스 계정, default 네임스페이스를 포함한 모든 네임스페이스를 사용할 수도 있습니다.

    kubectl create serviceaccount KSA_NAME \
        --namespace=NAMESPACE
    

    다음을 바꿉니다.

    • KSA_NAME: ServiceAccount의 이름
    • NAMESPACE: 네임스페이스의 이름
  5. 클러스터의 특정 네임스페이스에 있는 Kubernetes ServiceAccount가 IAM 서비스 계정을 가장할 수 있는 IAM 허용 정책을 만듭니다.

    gcloud iam service-accounts add-iam-policy-binding IAM_SA_NAME@IAM_SA_PROJECT_ID.iam.gserviceaccount.com \
        --project=IAM_SA_PROJECT_ID \
        --role=roles/iam.workloadIdentityUser \
        --member="serviceAccount:WORKLOAD_IDENTITY_POOL[NAMESPACE/KSA_NAME]"
    

    WORKLOAD_IDENTITY_POOL을 워크로드 아이덴티티 풀의 이름으로 바꿉니다.

  6. 다음 매니페스트를 adc-config-map.yaml로 저장합니다. 이 ConfigMap에는 워크로드의 ADC 구성이 포함되어 있습니다.

    kind: ConfigMap
    apiVersion: v1
    metadata:
      namespace: K8S_NAMESPACE
      name: my-cloudsdk-config
    data:
      config: |
        {
          "type": "external_account",
          "audience": "identitynamespace:WORKLOAD_IDENTITY_POOL:IDENTITY_PROVIDER",
          "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/IAM_SA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com:generateAccessToken",
          "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
          "token_url": "https://sts.googleapis.com/v1/token",
          "credential_source": {
            "file": "/var/run/secrets/tokens/gcp-ksa/token"
          }
        }
    

    다음을 바꿉니다.

    • IAM_SA_NAME: 가장하려는 IAM 서비스 계정의 이름
    • IAM_SA_PROJECT_ID: IAM 서비스 계정의 프로젝트 ID
  7. 다음 매니페스트를 workload-config.yaml로 저장합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
      namespace:  K8S_NAMESPACE
    spec:
      serviceAccountName: KSA_NAME
      containers:
      - name: my-container
        image: my-image
        command: ["sleep","infinity"]
        env:
          - name: GOOGLE_APPLICATION_CREDENTIALS
            value: /var/run/secrets/tokens/gcp-ksa/google-application-credentials.json
        volumeMounts:
        - name: gcp-ksa
          mountPath: /var/run/secrets/tokens/gcp-ksa
          readOnly: true
      volumes:
      - name: gcp-ksa
        projected:
          defaultMode: 420
          sources:
          - serviceAccountToken:
              path: token
              audience: WORKLOAD_IDENTITY_POOL
              expirationSeconds: 172800
          - configMap:
              name: my-cloudsdk-config
              optional: false
              items:
                - key: "config"
                  path: "google-application-credentials.json"
    
    

    이 워크로드를 배포하면 포드의 gcp-ksa 볼륨에 다음 데이터가 포함됩니다.

    포드의 컨테이너는 gcp-ksa 볼륨을 /var/run/secrets/tokens/gcp-ksa 경로에 마운트하고 해당 경로에서 사용자 인증 정보 구성 JSON 파일을 찾도록 ADC를 구성합니다.

  8. 워크로드를 배포합니다.

    kubectl apply -f workload-config.yaml
    

Fleet 워크로드 아이덴티티 제휴 설정 확인

이 섹션에서는 Cloud Storage 버킷을 만들고 Fleet 워크로드 아이덴티티 제휴를 사용하는 포드에서 액세스합니다. 이 단계를 수행하기 전에 애플리케이션에서 Fleet 워크로드 아이덴티티 제휴 사용 섹션의 안내에 따라 워크로드 아이덴티티 제휴를 구성했는지 확인합니다.

이 섹션에서는 IAM 서비스 계정 가장 방식을 사용하여 워크로드 아이덴티티 제휴를 확인하는 방법을 보여주지 않습니다.

  1. 숫자 프로젝트 번호를 찾습니다.

    gcloud projects describe FLEET_PROJECT_ID \
        --format="value(projectNumber)"
    

    출력은 다음과 비슷합니다.

    1234567890
    
  2. Cloud Storage 버킷을 만듭니다.

    gcloud storage buckets create gs://FLEET_PROJECT_ID-test-bucket \
        --location=LOCATION
    

    LOCATION을 Google Cloud 위치로 바꿉니다.

  3. 앞에서 만든 서비스 계정에 버킷에 대한 액세스 권한을 부여하는 IAM 허용 정책을 만듭니다.

    gcloud storage buckets add-iam-policy-binding gs://FLEET_PROJECT_ID-test-bucket \
        --condition=None \
        --role=roles/storage.objectViewer \
        --member=principal://iam.googleapis.com/projects/FLEET_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
    

    다음을 바꿉니다.

    • FLEET_PROJECT_NUMBER: 숫자 프로젝트 번호
    • FLEET_PROJECT_ID: 프로젝트 ID
    • NAMESPACE: 이전 섹션의 포드를 실행하는 Kubernetes 네임스페이스의 이름
    • KSA_NAME: 이전 섹션의 포드에서 사용하는 Kubernetes ServiceAccount의 이름
  4. 포드에서 셸 세션을 만듭니다.

    kubectl exec -it pods/my-pod --namespace=NAMESPACE -- /bin/bash
    
  5. 버킷의 객체를 나열해 봅니다.

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/storage/v1/b/test-bucket/o"
    

    출력은 다음과 같습니다.

    {
      "kind": "storage#objects"
    }
    

코드에서 인증

Cloud 클라이언트 라이브러리를 사용하면 인증 라이브러리는 자동으로 ADC를 사용하여 Google Cloud 서비스에 인증하기 위한 사용자 인증 정보를 찾습니다. 워크로드 아이덴티티 제휴를 지원하는 Cloud 클라이언트 라이브러리를 사용해야 합니다. 다음은 필요한 최소 Cloud 클라이언트 라이브러리 버전과 현재 버전을 확인하는 방법에 대한 안내입니다.

C++

대부분의 C++용 Google Cloud 클라이언트 라이브러리grpc::GoogleDefaultCredentials()를 호출하여 생성된 ChannelCredentials 객체를 사용해 ID 제휴를 지원합니다. 이 사용자 인증 정보를 초기화하려면 클라이언트 라이브러리를 gRPC 버전 1.36.0 이상으로 빌드해야 합니다.

C++용 Cloud Storage 클라이언트 라이브러리는 gRPC가 아닌 REST API를 사용하므로 ID 제휴를 지원하지 않습니다.

Go

Go용 클라이언트 라이브러리에서 golang.org/x/oauth2 모듈 버전 v0.0.0-20210218202405-ba52d332ba99 이상을 사용하면 ID 제휴가 지원됩니다.

클라이언트 라이브러리에서 사용하는 이 모듈 버전을 확인하려면 다음 명령어를 실행합니다.

cd $GOPATH/src/cloud.google.com/go
go list -m golang.org/x/oauth2

Java

자바용 클라이언트 라이브러리에서 com.google.auth:google-auth-library-oauth2-http 아티팩트 버전 0.24.0 이상을 사용하면 ID 제휴가 지원됩니다.

클라이언트 라이브러리에서 사용하는 이 아티팩트의 버전을 확인하려면 애플리케이션 디렉터리에서 다음 Maven 명령어를 실행합니다.

mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http

Node.js

Node.js용 클라이언트 라이브러리에서 google-auth-library 패키지 버전 7.0.2 이상을 사용하면 ID 제휴가 지원됩니다.

클라이언트 라이브러리에서 사용하는 이 패키지의 버전을 확인하려면 애플리케이션 디렉터리에서 다음 명령어를 실행합니다.

npm list google-auth-library

GoogleAuth 객체를 만들 때 프로젝트 ID를 지정하거나 GoogleAuth가 프로젝트 ID를 자동으로 찾도록 허용할 수 있습니다. 프로젝트 ID를 자동으로 찾으려면 구성 파일의 서비스 계정에 프로젝트에 대한 브라우저 역할(roles/browser) 또는 동등한 권한이 있는 역할이 있어야 합니다. 자세한 내용은 google-auth-library 패키지용 README를 참조하세요.

Python

Python용 클라이언트 라이브러리에서 google-auth 패키지 버전 1.27.0 이상을 사용하면 ID 제휴가 지원됩니다.

클라이언트 라이브러리에서 사용하는 이 패키지의 버전을 확인하려면 패키지가 설치된 환경에서 다음 명령어를 실행합니다.

pip show google-auth

인증 클라이언트의 프로젝트 ID를 지정하려면 GOOGLE_CLOUD_PROJECT 환경 변수를 설정하거나 클라이언트가 프로젝트 ID를 자동으로 찾도록 허용할 수 있습니다. 프로젝트 ID를 자동으로 찾으려면 구성 파일의 서비스 계정에 프로젝트에 대한 브라우저 역할(roles/browser) 또는 동등한 권한이 있는 역할이 있어야 합니다. 자세한 내용은 google-auth 패키지 사용자 가이드를 참조하세요.

다음 단계

Fleet 워크로드 아이덴티티 제휴를 사용할 때 Fleet을 구성하기 위한 권장사항 알아보기