워크로드 간 인증 문제 해결


이 문서에서는 mTLS를 통해 다른 워크로드에 워크로드 인증과 관련된 일반적인 오류를 해결하는 방법을 설명합니다.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.
    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. Set a default region and zone.

생성된 사용자 인증 정보 디렉터리가 없음

/var/run/secrets/workload-spiffe-credentials 디렉터리가 없다는 오류가 발생하면 다음을 수행합니다.

  1. VM 내에서 다음 명령어를 실행하여 VM이 워크로드 간 인증을 지원하는지 확인합니다.

    curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    
    1. 응답으로 다음 오류 메시지가 있는 HTTP 404 오류 코드가 반환되면 VM이 해당 기능을 지원하지 않는 것입니다.

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
      

      이 문제를 해결하려면 다음 방법 중 하나를 사용하여 워크로드 간 인증을 지원하는 새 VM을 만듭니다.

    2. 응답으로 workload certificate feature not enabled 오류 메시지가 있는 HTTP 404 오류 코드가 반환되면 VM이 관리형 워크로드 아이덴티티를 지원하지만 기능이 사용 설정되지 않은 것입니다. VM에서 이 기능을 사용 설정하려면 기존 VM에서 관리형 워크로드 아이덴티티 사용 설정을 참조하세요.

  2. VM이 Compute Engine 게스트 에이전트 버전 20231103.01 이상의 게스트 OS를 실행 중인지 확인합니다. gcloud CLI를 사용하여 직렬 포트 출력을 표시하여 현재 Compute Engine 게스트 에이전트 버전을 확인합니다.

    gcloud compute instances get-serial-port-output VM_NAME | grep "GCE Agent Started"
    

    VM_NAME을 VM의 이름으로 바꿉니다.

    Compute Engine 게스트 에이전트를 업데이트하려면 게스트 환경 업데이트를 참조하세요.

  3. 서비스 로그를 확인하여 gce-workload-cert-refresh.timer가 워크로드 사용자 인증 정보 및 트러스트 번들을 성공적으로 가져올 수 있었는지 확인합니다.

    # View timer logs to see when the gce-workload-cert-refresh.timer last ran
    journalctl -u gce-workload-cert-refresh.timer
    
    # View service logs from gce-workload-cert-refresh.service
    journalctl -u gce-workload-cert-refresh.service
    

생성된 사용자 인증 정보 디렉터리에 config_status 파일만 포함됨

다양한 이유로 생성된 사용자 인증 정보 디렉터리 /var/run/secrets/workload-spiffe-credentialsconfig_status만 포함될 수 있습니다. 이 문제를 해결하려면 다음 단계를 수행합니다.

  1. config_status 파일의 콘텐츠를 확인하여 관리형 워크로드 아이덴티티 기능이 사용 설정되어 있는지 확인합니다. 적절한 VM 메타데이터를 사용하여 이 기능이 사용 설정되지 않은 경우 로그 파일에 오류 메시지 workload certificate feature not enabled가 포함됩니다.

    이 문제를 해결하려면 다음 방법 중 하나를 사용하여 워크로드 간 인증을 지원하는 새 VM을 만듭니다.

  2. config_status 파일의 콘텐츠를 확인하여 속성 값 누락이나 인증서 발급 또는 트러스트 구성에 대한 잘못된 구성으로 인한 오류가 없는지 확인합니다. 이러한 오류가 있으면 인증서 발급 및 트러스트 구성 업데이트의 단계에 따라 구성 값을 업데이트합니다.

  3. 하위 CA 풀에 액세스할 수 있도록 워크로드 아이덴티티 풀의 관리형 워크로드 아이덴티티에 올바른 권한이 부여되었는지 확인합니다. 다음 명령어를 사용하세요.

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
       --location=SUBORDINATE_CA_POOL_REGION \
    

    다음을 바꿉니다.

    • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 ID입니다.
    • SUBORDINATE_CA_POOL_REGION: 하위 CA 풀의 리전입니다.

    이 명령어의 출력에는 다음이 포함됩니다.

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      role: roles/privateca.workloadCertificateRequester
    

    위 예시에 대한 설명은 다음과 같습니다.

    • PROJECT_NUMBER는 프로젝트의 프로젝트 번호입니다.
    • POOL_ID는 워크로드 아이덴티티 풀의 ID입니다.

    앞의 예시와 유사한 출력이 표시되지 않으면 CA 풀에서 인증서를 요청하도록 관리형 워크로드 아이덴티티를 승인에 설명된 대로 필요한 권한을 부여합니다.

  4. config_status 파일에 오류 메시지가 없으면 파일 내의 iam.googleapis.com/workload-identity 값을 확인합니다. 값이 다음과 일치해야 합니다.

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

    위 예시에 대한 설명은 다음과 같습니다.

    • PROJECT_NUMBER는 관리형 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호입니다.
    • POOL_ID는 워크로드 아이덴티티 풀의 ID입니다.
    • NAMESPACE_ID는 워크로드 아이덴티티 풀의 네임스페이스 ID입니다.
    • MANAGED_IDENTITY_ID는 관리형 워크로드 아이덴티티의 ID입니다.

    iam.googleapis.com/workload-identity 값이 잘못된 경우 관리형 ID 값은 VM 생성 중에만 업데이트할 수 있으므로 올바른 값으로 새 VM을 만들어야 합니다.

  5. config_status 파일에 오류 메시지가 없으면 트러스트 구성에 SPIFFE 트러스트 도메인 POOL_ID.global.PROJECT_NUMBER.workload.id.goog에 대한 유효한 항목이 포함되어 있는지 확인하세요. 이 항목은 VM에 할당된 관리형 ID의 SPIFFE 트러스트 도메인에 해당합니다. 자세한 내용은 트러스트 구성 정의를 참조하세요.

  6. config_status 파일에 오류 코드 INTERNAL_ERROR가 있는 오류 메시지가 포함되어 있으면 Cloud Customer Care 또는 Google Cloud 담당자에게 오류 메시지에 대해 문의하세요.

메타데이터 서버 엔드포인트를 쿼리하면 404 오류가 반환됨

workload-identities 또는 trust-anchors 엔드포인트를 쿼리할 때 404 응답이 반환되면 VM 내에서 다음 명령어를 실행하여 VM이 관리형 워크로드 아이덴티티를 지원하는지 확인합니다.

curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
  • 응답으로 다음 오류 메시지가 포함된 HTTP 404 오류 코드가 반환되는 경우:

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
    

    VM이 관리형 워크로드 아이덴티티를 지원하지 않는 것입니다. 이 문제를 해결하려면 다음 중 한 가지를 따르세요.

  • 응답으로 workload certificate feature not enabled 오류 메시지가 있는 HTTP 404 오류 코드가 반환되면 VM이 관리형 워크로드 아이덴티티를 지원하지만 기능이 사용 설정되지 않은 것입니다. 이 기능이 사용 설정된 새 VM을 만들거나 새 인스턴스 템플릿 및 관리형 인스턴스 그룹을 만듭니다.

  • 다음 명령어를 실행하여 하위 CA 풀에 액세스할 수 있도록 워크로드 아이덴티티 풀에 올바른 권한이 부여되었는지 확인합니다.

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
      --location=SUBORDINATE_CA_POOL_REGION
    

    다음을 바꿉니다.

    • SUBORDINATE_CA_POOL_ID: 하위 CA 풀의 ID입니다.
    • SUBORDINATE_CA_POOL_REGION: 하위 CA 풀의 리전입니다.

    이 명령어의 출력에는 다음이 포함됩니다. 여기서 PROJECT_NUMBER는 프로젝트의 프로젝트 번호이고 POOL_ID는 워크로드 아이덴티티 풀의 ID입니다.

    bindings:
    - members:
    - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
    - role: roles/privateca.poolReader
    - members:
    - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
    - role: roles/privateca.workloadCertificateRequester
    

    출력에 이러한 값이 없으면 CA 풀에서 인증서를 요청하도록 관리형 워크로드 아이덴티티를 승인에 설명된 대로 올바른 권한을 부여합니다.

  • iam.googleapis.com/workload-identity 값이 올바르고 다음과 일치하는지 확인합니다.

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

    값이 일치하지 않을 경우 VM을 만든 후에는 관리형 ID 값을 업데이트할 수 없으므로 새 VM을 만들어야 합니다.

  • 트러스트 구성에 SPIFFE 트러스트 도메인 POOL_ID.global.PROJECT_NUMBER.workload.id.goog에 대한 유효한 항목이 포함되어 있는지 확인하세요. 이 항목은 VM에 할당된 관리형 ID의 SPIFFE 트러스트 도메인에 해당합니다.