관리형 워크로드 아이덴티티 인증 구성

이 페이지에서는 gcloud CLI를 사용하여 관리형 워크로드 아이덴티티를 구성하는 방법을 설명합니다.

또한 Compute Engine용 관리형 워크로드 ID의 자동 프로비저닝 및 수명 주기 관리를 설정하는 방법도 설명합니다. Certificate Authority Service를 사용하여 인증서를 발급하도록 인증 기관(CA) 풀을 구성합니다. CA 서비스는 가용성이 높고 확장 가능한 Google Cloud 서비스로서, CA 서비스의 배포, 관리, 보안을 간소화하고 자동화합니다. 구성된 CA 풀에서 X.509 사용자 인증 정보로 프로비저닝된 가상 머신 인스턴스(VM)를 만들 수 있습니다. 그런 다음 이러한 사용자 인증 정보를 사용하여 워크로드 간에 mTLS 연결을 설정할 수 있습니다.

시작하기 전에

  1. Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  2. 관리형 워크로드 아이덴티티 미리보기에 대한 액세스 권한을 요청합니다.

  3. 관리형 워크로드 아이덴티티를 이해합니다.

  4. Certificate Authority Service를 사용한 인증서 발급에 대해 알아봅니다.

  5. 관리형 워크로드 아이덴티티를 사용하여 Compute Engine 워크로드를 인증하는 방법을 알아봅니다.

  6. IAM and Certificate Authority Service API를 사용 설정합니다.

    gcloud services enable iam.googleapis.com privateca.googleapis.com

  7. 결제 및 할당량의 허용 목록에 추가된 프로젝트를 사용하도록 Google Cloud CLI를 구성합니다.

    gcloud config set billing/quota_project PROJECT_ID
    

    PROJECT_ID를 관리형 워크로드 아이덴티티 미리보기의 허용 목록에 추가된 프로젝트의 ID로 바꿉니다.

필요한 역할

관리형 워크로드 아이덴티티를 만들고 관리형 워크로드 아이덴티티 인증서를 프로비저닝하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청합니다.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

또는 IAM 소유자(roles/owner) 기본 역할에는 관리형 워크로드 아이덴티티를 구성하는 권한도 포함됩니다. 프로덕션 환경에서는 기본 역할을 부여하지 말아야 하지만 개발 환경 또는 테스트 환경에서는 부여해도 됩니다.

개요

애플리케이션에 관리형 워크로드 아이덴티티를 사용하려면 다음 작업을 수행해야 합니다.

  1. 보안 관리자:

  2. Compute 관리자:

    Compute Engine에서 실행되는 워크로드에 관리형 워크로드 아이덴티티를 다음과 같이 사용 설정합니다.

관리형 워크로드 아이덴티티 만들기

관리형 워크로드 아이덴티티를 사용하면 Google Cloud에서 워크로드 아이덴티티 풀 ID의 사용자 인증 정보를 워크로드에 자동으로 프로비저닝할 수 있습니다. 워크로드 아이덴티티는 워크로드 아이덴티티 풀 내에서 정의되며 네임스페이스라는 관리 경계로 구성됩니다.

워크로드 아이덴티티 풀 만들기

관리형 워크로드 아이덴티티를 만들려면 TRUST_DOMAIN 모드에서 풀을 만들어야 합니다. 관리형 워크로드 아이덴티티에 대해 워크로드 아이덴티티 풀을 만들려면 workload-identity-pools create 명령어를 사용합니다.

gcloud iam workload-identity-pools create POOL_ID \
    --location="global" \
    --mode="TRUST_DOMAIN"

다음을 바꿉니다.

  • POOL_ID: 풀의 고유 ID ID는 4~32자여야 하며 소문자 영숫자 문자와 대시만 포함할 수 있으며 영숫자 문자로 시작하고 끝나야 합니다. 워크로드 아이덴티티 풀을 만든 후에는 해당 ID를 변경할 수 없습니다.

워크로드 아이덴티티 풀이 TRUST_DOMAIN 모드에서 생성되었는지 확인하려면 workload-identity-pools describe 명령어를 사용합니다.

gcloud iam workload-identity-pools describe POOL_ID \
    --location="global"

명령어 결과는 다음과 비슷합니다.

mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID
state: ACTIVE

명령어 결과에 mode: TRUST_DOMAIN가 없으면 프로젝트가 관리형 워크로드 아이덴티티 미리보기의 허용 목록에 추가되었는지 확인하고 gcloud CLI가 결제 및 할당량에 올바른 프로젝트를 사용하도록 올바르게 구성했는지 확인합니다. 최신 버전의 gcloud CLI로 업데이트해야 할 수도 있습니다.

네임스페이스 만들기

workload-identity-pools namespaces create 명령어를 사용하면 워크로드 아이덴티티 풀에 네임스페이스를 만들 수 있습니다.

gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
    --workload-identity-pool="POOL_ID" \
    --location="global"

다음을 바꿉니다.

  • NAMESPACE_ID: 네임스페이스의 고유 ID입니다. ID는 2~63자여야 하고 소문자 영숫자 문자와 대시만 포함해야 하며 영숫자 문자로 시작하고 끝나야 합니다. 네임스페이스를 만든 후에는 해당 ID를 변경할 수 없습니다.
  • POOL_ID: 앞에서 만든 워크로드 아이덴티티 풀 ID

관리형 워크로드 아이덴티티 만들기

workload-identity-pools managed-identities create 명령어를 사용하면 워크로드 아이덴티티 풀에 관리형 워크로드 아이덴티티를 만들 수 있습니다.

gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
    --namespace="NAMESPACE_ID" \
    --workload-identity-pool="POOL_ID" \
    --location="global"

다음을 바꿉니다.

  • MANAGED_IDENTITY_ID: 관리형 아이덴티티의 고유 ID ID는 2~63자여야 하고 소문자 영숫자 문자와 대시만 포함해야 하며 영숫자 문자로 시작하고 끝나야 합니다. 관리형 워크로드 아이덴티티를 만든 후에는 ID를 변경할 수 없습니다.
  • NAMESPACE_ID: 앞에서 만든 네임스페이스 ID
  • POOL_ID: 앞에서 만든 워크로드 아이덴티티 풀 ID

관리형 워크로드 아이덴티티의 SPIFFE ID는 다음과 동일합니다.

spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID

워크로드 증명 정책 정의

워크로드 증명 정책은 신뢰할 수 있는 워크로드만 관리형 ID를 사용할 수 있도록 합니다. 사용자 인증 정보를 발급하려면 먼저 워크로드가 관리형 워크로드 아이덴티티를 사용하도록 허용해야 합니다.

이렇게 하려면 사용자 관리형 서비스 계정을 만들고 워크로드에 연결합니다. 워크로드는 상호 TLS(mTLS)를 사용하여 다른 워크로드에 인증을 수행할 때 관리형 워크로드 아이덴티티를 ID로 사용하며, 워크로드는 서비스 계정을 다른 Google Cloud 서비스 및 리소스에 액세스할 때 서비스 계정을 ID로 사용합니다.

service-accounts create 명령어를 사용하면 워크로드 아이덴티티 풀에 관리형 워크로드 아이덴티티를 만들 수 있습니다.

연결된 서비스 계정을 만들려면 다음 명령어를 실행합니다.

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

다음을 바꿉니다.

  • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름

서비스 계정이 연결된 워크로드에 관리형 워크로드 아이덴티티의 사용자 인증 정보를 발급할 수 있는 워크로드 증명 정책을 만들려면 workload-identity-pools managed-identities workload-sources create 명령어를 사용합니다.

gcloud iam workload-identity-pools managed-identities workload-sources create \
    project-WORKLOAD_PROJECT_NUMBER \
    --single-attribute-selectors "compute.googleapis.com/Instance.attached_service_account.email=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --managed-identity MANAGED_IDENTITY_ID \
    --namespace NAMESPACE_ID \
    --workload-identity-pool POOL_ID \
    --location "global"

다음을 바꿉니다.

  • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름.
  • WORKLOAD_PROJECT_NUMBER: 워크로드가 포함된 프로젝트의 프로젝트 번호. 이 정책을 통해 이 프로젝트 내의 워크로드가 관리형 워크로드 아이덴티티를 사용할 수 있습니다.
  • PROJECT_ID: 서비스 계정이 포함된 프로젝트의 ID
  • MANAGED_IDENTITY_ID: 관리형 아이덴티티의 고유 ID
  • NAMESPACE_ID: 앞에서 만든 네임스페이스 ID
  • POOL_ID: 앞에서 만든 워크로드 아이덴티티 풀 ID

특정 워크로드 아이덴티티 풀의 경우 워크로드 프로젝트에 단일 속성 선택기를 최대 50개까지 정의할 수 있습니다.

증명 정책을 업데이트하거나 삭제하는 방법을 알아보려면 다음 명령어를 실행합니다.

gcloud iam workload-identity-pools managed-identities workload-sources --help

관리형 워크로드 아이덴티티에 대해 인증서를 발급하도록 Certificate Authority Service 구성

Certificate Authority Service 풀을 사용하여 루트 및 하위 인증 기관(CA)의 권장 설정을 만듭니다. 하위 CA 풀은 VM에 X.509 워크로드 아이덴티티 인증서를 발급합니다.

CA 풀을 구성한 후 관리형 워크로드 아이덴티티가 CA 풀에서 서명된 인증서를 요청하고 수신하도록 승인합니다.

루트 CA 풀 구성

Certificate Authority Service에 대한 Google Cloud CLI 인터페이스를 사용하여 루트 CA 풀을 구성합니다.

gcloud

루트 CA 풀을 만듭니다.

  1. gcloud privateca pools create 명령어를 사용하여 소규모의 장기 인증서 발급을 위한 엔터프라이즈 등급에서 루트 CA 풀을 만듭니다.

    gcloud privateca pools create ROOT_CA_POOL_ID \
       --location=REGION \
       --tier=enterprise
    

    다음을 바꿉니다.

    • ROOT_CA_POOL_ID: 루트 CA 풀의 고유 ID. ID는 최대 64자이며 소문자 및 대문자 영숫자 문자, 밑줄, 하이픈만 포함해야 합니다. 풀 ID는 리전 내에서 고유해야 합니다.
    • REGION: 루트 CA 풀이 있는 리전.

    자세한 내용은 CA 풀 만들기를 참조합니다.

  2. gcloud privateca roots create 명령어를 사용하여 루트 CA 풀에 루트 CA를 만듭니다. 루트 CA 풀에서 유일한 CA인 경우 루트 CA를 사용 설정하라는 메시지가 표시될 수 있습니다.

    예를 들어 다음과 비슷한 명령어를 사용하여 루트 CA를 만들 수 있습니다.

    gcloud privateca roots create ROOT_CA_ID \
       --pool=ROOT_CA_POOL_ID \
       --subject "CN=ROOT_CA_CN, O=ROOT_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --max-chain-length=1 \
       --location=REGION
    

    다음을 바꿉니다.

    • ROOT_CA_ID: 루트 CA의 고유한 이름. CA 이름은 최대 64자이며 소문자 및 대문자 영숫자 문자, 밑줄, 하이픈만 포함해야 합니다. CA 이름은 리전 내에서 고유해야 합니다.
    • ROOT_CA_POOL_ID: 루트 CA 풀의 ID.
    • ROOT_CA_CN: 루트 CA의 일반 이름.
    • ROOT_CA_ORGANIZATION: 루트 CA의 조직.
    • REGION: 루트 CA 풀이 있는 리전.

    자세한 내용은 루트 인증 기관 만들기를 참조합니다. CA의 subject 필드에 대한 자세한 내용은 제목을 참조합니다.

  3. 선택사항: 루트 CA 풀에 추가 루트 CA를 만들려면 이전 단계를 반복합니다. 이는 루트 CA 순환에 유용할 수 있습니다.

하위 CA 구성

Certificate Authority Service에 대한 Google Cloud CLI 인터페이스를 사용하여 하위 CA 풀과 하위 CA를 만듭니다.

인증서 발급 시나리오가 여러 개 있는 경우 시나리오마다 하위 CA를 만들 수 있습니다. 또한 CA 풀에 여러 하위 CA를 추가하면 인증서 요청의 부하를 더 효과적으로 분산할 수 있습니다.

gcloud

gcloud privateca pools create 명령어를 사용하여 하위 CA 풀을 만듭니다.

  1. 대규모의 단기 인증서 발급을 위한 DevOps 등급에서 하위 CA 풀을 만듭니다 .

    gcloud privateca pools create SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --tier=devops
    

    다음을 바꿉니다.

    • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 고유 ID. ID는 최대 64자이며 소문자 및 대문자 영숫자 문자, 밑줄, 하이픈만 포함해야 합니다. 풀 ID는 리전 내에서 고유해야 합니다.
    • REGION: 하위 CA 풀을 만들 리전.

    자세한 내용은 CA 풀 만들기를 참조합니다.

  2. gcloud privateca subordinates create 명령어를 사용하여 하위 CA 풀에 하위 CA를 만듭니다. 기본 구성 기반 발급 모드를 변경하지 마십시오.

    예를 들어 다음과 비슷한 명령어를 사용하여 하위 CA를 만들 수 있습니다.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
       --pool=SUBORDINATE_CA_POOL_ID \
       --location=REGION \
       --issuer-pool=ROOT_CA_POOL_ID \
       --issuer-location=REGION \
       --subject="CN=SUBORDINATE_CA_CN, O=SUBORDINATE_CA_ORGANIZATION" \
       --key-algorithm="ec-p256-sha256" \
       --use-preset-profile=subordinate_mtls_pathlen_0
    

    다음을 바꿉니다.

    • SUBORDINATE_CA_ID: 하위 CA의 고유한 이름. 이름은 최대 64자이며 소문자 및 대문자 영숫자 문자, 밑줄, 하이픈만 포함해야 합니다. 풀 이름은 리전 내에서 고유해야 합니다.
    • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 이름.
    • REGION: 하위 CA 풀이 있는 리전.
    • ROOT_CA_POOL_ID: 루트 CA 풀의 ID.
    • REGION: 루트 CA 풀의 리전.
    • SUBORDINATE_CA_CN: 하위 CA의 일반 이름.
    • SUBORDINATE_CA_ORGANIZATION: 하위 CA 발급 조직의 이름.

    자세한 내용은 CA 풀 만들기를 참조합니다. CA의 subject 필드에 대한 자세한 내용은 제목을 참조합니다.

CA 풀에서 인증서를 요청하도록 관리형 워크로드 아이덴티티를 승인

관리형 워크로드 아이덴티티에는 CA 서비스에서 인증서를 요청하고 공개 인증서를 가져올 수 있는 권한이 필요합니다.

gcloud

  1. 각 하위 CA 풀에서 CA Service 워크로드 인증서 요청자(roles/privateca.workloadCertificateRequester) IAM 역할을 관리형 워크로드 아이덴티티에 부여합니다. 다음 gcloud privateca pools add-iam-policy-binding 명령어는 관리형 워크로드 아이덴티티가 CA 서비스 인증서 체인에서 인증서를 요청하도록 승인합니다.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.workloadCertificateRequester \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    다음을 바꿉니다.

    • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 ID.
    • REGION: 하위 CA 풀의 리전
    • PROJECT_NUMBER: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호
    • POOL_ID: 워크로드 아이덴티티 풀의 ID.
  2. 관리형 워크로드 아이덴티티에 종속 CA 풀에 대한 CA 서비스 풀 리더(roles/privateca.poolReader) IAM 역할을 부여합니다. 이렇게 하면 관리형 워크로드 아이덴티티가 CA 인증서 체인에서 서명된 X.509 인증서를 가져올 수 있습니다.

    gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
     --location=REGION \
     --role=roles/privateca.poolReader \
     --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*"
    

    다음을 바꿉니다.

    • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 ID.
    • REGION: 하위 CA 풀의 리전
    • PROJECT_NUMBER: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호
    • POOL_ID: 워크로드 아이덴티티 풀의 ID.

트러스트 및 인증서 발급 구성 정의

이 정보를 사용하여 VM을 만들 때 파트너 데이터로 업로드되는 JSON 파일을 만듭니다.

인증서 발급 구성 정의

Compute Engine에 대해 관리형 워크로드 아이덴티티를 사용 설정하려면 다음 인증서 발급 구성이 필요합니다.

{
  "primary_certificate_authority_config": {
    "certificate_authority_config": {
      "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
    }
  },
  "key_algorithm": "ALGORITHM",
  "workload_certificate_lifetime_seconds": "DURATION",
  "rotation_window_percentage": "ROTATION_WINDOW_PERCENTAGE"
}

다음을 바꿉니다.

  • PROJECT_NAME: CA 풀이 포함된 프로젝트 이름
  • REGION: 하위 CA 풀이 있는 리전
  • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 이름
  • ALGORITHM: 비공개 키를 생성하는 데 사용되는 암호화 알고리즘. 유효한 값은 rsa-2048(기본값), rsa-3072, rsa-4096, ecdsa-p256, ecdsa-p384입니다.
  • DURATION: 선택사항: 리프 인증서 유효 기간(초). 값은 3600~315360000 사이여야 합니다. 지정하지 않으면 기본값 86400이 사용됩니다. 발급된 인증서의 실제 유효성 검사는 발급된 인증서의 수명을 제한할 수 있으므로 발급하는 CA에 따라 달라집니다.
  • ROTATION_WINDOW_PERCENTAGE: 선택사항: 갱신이 트리거되는 인증서 수명의 백분율. 값은 1~100 사이여야 합니다. 기본값은 66%입니다. 인증서 발급 후 최소 7일이 지나고 만료되기 최소 7일 전에 인증서가 갱신되도록 인증서 수명과 관련하여 순환 기간 비율을 설정해야 합니다.

트러스트 구성 정의

트러스트 구성에는 피어 인증서의 유효성을 검사하기 위한 신뢰 앵커 집합이 포함되어 있습니다. 여기에는 다음이 포함됩니다.

  • 신뢰할 수 있는 CA 풀 리소스 URI: VM이 속한 것과 동일한 트러스트 도메인에서 인증서를 발급할 수 있는 신뢰할 수 있는 CA 풀 리소스 URI 집합입니다.
  • PEM 형식의 CA 인증서: VM이 속한 것과 동일한 트러스트 도메인에서 인증서를 발급할 수 있는 PEM 형식의 CA 인증서 집합입니다.
{
  "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
    "trust_anchors": [
      {
        "ca_pool": "projects/PROJECT_NAME/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
      },
      {
        "pem_certificate": "PEM-encoded certificate"
      }
    ]
  }
}

다음을 바꿉니다.

  • POOL_ID: 워크로드 아이덴티티 풀의 ID
  • PROJECT_NUMBER: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호
  • PROJECT_NAME: CA 풀이 포함된 프로젝트 이름
  • REGION: 하위 CA 풀이 있는 리전
  • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 ID
  • PEM-encoded certificate: 선택사항: VM이 속한 동일한 트러스트 도메인에서 인증서를 발급하도록 신뢰할 수 있는 PEM 형식의 CA 인증서 집합

VM의 파트너 메타데이터를 업로드할 구성 파일 만들기

다음을 포함하는 JSON 파일을 만듭니다.

이 파일을 CONFIGS.json로 저장합니다. 이 파일은 관리형 워크로드 아이덴티티를 사용하는 애플리케이션을 실행하기 위해 VM을 만들 때 사용됩니다.

CONFIGS.json 파일은 다음과 비슷해야 합니다.

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "ALGORITHM"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

다음 단계

직접 사용해 보기

Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.

무료로 시작하기