이 문서에서는 부하 분산기의 백엔드 서비스에서 관리형 워크로드 아이덴티티를 구성하는 방법을 설명합니다. 관리 ID를 할당하면 부하 분산기와 백엔드가 백엔드 mTLS를 사용하여 서로 인증할 수 있습니다.
관리형 워크로드 아이덴티티를 사용하여 백엔드 mTLS를 구성하려면 다음을 수행해야 합니다.
- 관리형 워크로드 아이덴티티에 대해 X.509 인증서를 발급하도록 Certificate Authority Service 인증 기관 (CA) 풀을 구성합니다.
- 네임스페이스, 관리형 ID, 증명 정책, 인라인 인증서 발급 구성 리소스, 인라인 트러스트 구성 리소스를 사용하여 워크로드 아이덴티티 풀을 만들어 트러스트 도메인을 구성합니다.1
- 인라인 인증서 발급 구성을 사용하여 CA를 워크로드 아이덴티티 풀에 바인딩합니다.
- CA 풀에서 인증서를 요청하도록 관리형 워크로드 아이덴티티를 승인합니다.
- 부하 분산기를 만들고 관리 ID를 백엔드 서비스에 연결합니다.
1 부하 분산기와 백엔드가 서로 다른 트러스트 도메인에 있는 경우에만 인라인 트러스트 구성을 만들어야 합니다. 이 예시에서는 부하 분산기와 백엔드가 모두 동일한 신뢰 도메인에 속하므로 인라인 트러스트 구성 리소스의 구성은 선택사항입니다.
백엔드용 관리형 아이덴티티를 만들려면 관리형 워크로드 아이덴티티 개요를 참고하세요.
시작하기 전에
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
관리형 워크로드 아이덴티티를 사용하는 백엔드 mTLS 개요 문서를 검토합니다.
Certificate Authority Service를 사용한 인증서 발급에 대해 알아봅니다.
Enable the IAM, Certificate Authority Service, Compute Engine, Certificate Manager, and Network Security APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable iam.googleapis.com
privateca.googleapis.com compute.googleapis.com certificatemanager.googleapis.com networksecurity.googleapis.com 결제 및 할당량의 허용 목록에 추가된 프로젝트를 사용하도록 Google Cloud CLI를 구성합니다.
gcloud config set billing/quota_project PROJECT_ID
PROJECT_ID를 관리형 워크로드 아이덴티티 미리보기의 허용 목록에 추가된 프로젝트의 ID로 바꿉니다.백엔드의 관리형 ID를 만듭니다. 자세한 내용은 관리형 워크로드 아이덴티티 개요를 참고하세요.
필요한 역할
관리형 워크로드 아이덴티티를 만들고 관리형 워크로드 아이덴티티 인증서를 프로비저닝하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
관리형 워크로드 아이덴티티를 만들고 구성하려면 다음 안내를 따릅니다.
-
IAM 워크로드 아이덴티티 풀 관리자 (
roles/iam.workloadIdentityPoolAdmin) -
서비스 계정 관리자(
roles/iam.serviceAccountAdmin)
-
IAM 워크로드 아이덴티티 풀 관리자 (
-
CA 풀을 만들고 구성하려는 경우: CA 서비스 관리자(
roles/privateca.admin) -
TargetHTTPSProxy와 같은 부하 분산기 리소스 만들기: Compute 부하 분산기 관리자(roles/compute.loadBalancerAdmin) -
인증서 관리자 리소스 사용: 인증서 관리자 소유자(
roles/certificatemanager.owner) -
보안 및 네트워킹 구성요소 만들기:
-
Compute 네트워크 관리자 (
roles/compute.networkAdmin) -
Compute 보안 관리자(
roles/compute.securityAdmin)
-
Compute 네트워크 관리자 (
-
프로젝트 만들기(선택사항): 프로젝트 생성자(
roles/resourcemanager.projectCreator)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
관리형 워크로드 아이덴티티에 대해 인증서를 발급하도록 CA 서비스 구성
CA 풀을 사용하여 루트 CA를 설정할 수 있습니다. CA 풀은 관리형 워크로드 아이덴티티에 X.509 인증서를 발급합니다.
루트 CA 풀 만들기
gcloud privateca pools create 명령어를 사용하여 엔터프라이즈 등급에서 루트 CA 풀을 만듭니다.
이 등급은 소규모의 장기 인증서 발급을 위한 것입니다.
gcloud privateca pools create ROOT_CA_POOL_ID \
--location=REGION \
--project=PROJECT_ID \
--tier=enterprise
다음을 바꿉니다.
ROOT_CA_POOL_ID: 루트 CA 풀의 고유 IDREGION: 루트 CA 풀이 있는 리전PROJECT_ID: 프로젝트 ID입니다.
CA 풀에 대해 자세히 알아보려면 CA 풀 만들기를 참고하세요.
루트 CA 만들기
gcloud privateca roots create 명령어를 사용하여 루트 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="KEY_ALGORITHM"] \
--max-chain-length=1 \
--location=REGION \
--project=PROJECT_ID \
--auto-enable
다음을 바꿉니다.
ROOT_CA_ID: 루트 CA의 고유한 이름입니다. CA 이름은 최대 64자이며 소문자 및 대문자 영숫자 문자, 밑줄, 하이픈만 포함해야 합니다. CA 이름은 리전 내에서 고유해야 합니다.ROOT_CA_POOL_ID: 루트 CA 풀의 ID입니다.ROOT_CA_CN: 루트 CA의 일반 이름입니다.ROOT_CA_ORGANIZATION: 루트 CA의 조직입니다.KEY_ALGORITHM: Cloud KMS 키를 만드는 데 사용할 알고리즘입니다. 이 플래그는 선택사항입니다. 이 플래그를 포함하지 않으면 키 알고리즘이 기본적으로rsa-pkcs1-4096-sha256으로 설정됩니다.REGION: 루트 CA 풀이 있는 리전입니다.PROJECT_ID: 프로젝트 ID입니다.
루트 CA에 대해 자세히 알아보려면 루트 CA 만들기를 참고하세요.
관리형 워크로드 아이덴티티 만들기
관리형 워크로드 아이덴티티를 사용하면 Google Cloud 에서 Certificate Authority Service의 X.509 인증서를 자동으로 프로비저닝하고 관리할 수 있습니다. 워크로드 아이덴티티는 워크로드 아이덴티티 풀 내에서 정의되며 네임스페이스라는 관리 경계로 구성됩니다.
워크로드 아이덴티티 풀 만들기
관리형 워크로드 아이덴티티를 만들려면 TRUST_DOMAIN 모드에서 풀을 만들어야 합니다. 관리형 워크로드 아이덴티티에 대해 워크로드 아이덴티티 풀을 만들려면 gcloud iam workload-identity-pools create 명령어를 사용합니다.
gcloud iam workload-identity-pools create WORKLOAD_IDENTITY_POOL_ID \
--location="global" \
--mode="TRUST_DOMAIN"
WORKLOAD_IDENTITY_POOL_ID를 풀의 고유 ID로 바꿉니다. ID는 4~32자여야 하고 소문자 영숫자 문자와 대시만 포함해야 하며 영숫자 문자로 시작하고 끝나야 합니다. 워크로드 아이덴티티 풀을 만든 후에는 해당 ID를 변경할 수 없습니다.
워크로드 아이덴티티 풀이 TRUST_DOMAIN 모드에서 생성되었는지 확인하려면 gcloud iam workload-identity-pools describe 명령어를 사용합니다.
gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
--location="global"
출력은 다음과 비슷합니다.
mode: TRUST_DOMAIN name: projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID state: ACTIVE
이 출력에는 다음 값이 포함됩니다.
PROJECT_NUMBER:Google Cloud 프로젝트의 프로젝트 번호WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 ID
네임스페이스 만들기
gcloud iam workload-identity-pools namespaces create 명령어를 사용하면 워크로드 아이덴티티 풀에 네임스페이스를 만들 수 있습니다.
gcloud iam workload-identity-pools namespaces create NAMESPACE_ID \
--workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
--location="global"
다음을 바꿉니다.
NAMESPACE_ID: 네임스페이스의 고유 ID입니다. ID는 2~63자여야 하고 소문자 영숫자 문자와 대시만 포함해야 하며 영숫자 문자로 시작하고 끝나야 합니다. 네임스페이스를 만든 후에는 해당 ID를 변경할 수 없습니다.WORKLOAD_IDENTITY_POOL_ID: 앞에서 만든 워크로드 아이덴티티 풀 ID입니다.
관리형 워크로드 아이덴티티 만들기
gloud iam workload-identity-pools managed-identities create 명령어를 사용하면 워크로드 아이덴티티 풀 네임스페이스에 관리형 워크로드 아이덴티티를 만들 수 있습니다.
gcloud iam workload-identity-pools managed-identities create MANAGED_IDENTITY_ID \
--namespace="NAMESPACE_ID" \
--workload-identity-pool="WORKLOAD_IDENTITY_POOL_ID" \
--location="global"
다음을 바꿉니다.
MANAGED_IDENTITY_ID: 관리형 아이덴티티의 고유 ID ID는 2~63자여야 하고 소문자 영숫자 문자와 대시만 포함해야 하며 영숫자 문자로 시작하고 끝나야 합니다. 관리형 워크로드 아이덴티티를 만든 후에는 ID를 변경할 수 없습니다.NAMESPACE_ID: 앞에서 만든 네임스페이스 ID입니다.WORKLOAD_IDENTITY_POOL_ID: 앞에서 만든 워크로드 아이덴티티 풀 ID입니다.
관리형 워크로드 아이덴티티 ID는 SPIFFE 식별자이며 형식은 다음과 같습니다.
spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
증명 정책 만들기
이 예시에서 증명 정책에는 백엔드 서비스가 특정 프로젝트에 속하는지 확인하는 증명 규칙이 포함되어 있습니다. 증명 정책 확인이 통과되면 IAM은 인증 기관 서비스에서 관리 ID의 X.509 인증서를 요청합니다.
증명 정책을 만들려면 다음 명령어를 실행하여 증명 규칙을 추가합니다.
gcloud iam workload-identity-pools managed-identities add-attestation-rule MANAGED_IDENTITY_ID \
--namespace=NAMESPACE_ID \
--workload-identity-pool=WORKLOAD_IDENTITY_POOL_ID \
--google-cloud-resource='//compute.googleapis.com/projects/PROJECT_NUMBER/type/BackendService/*' \
--location=global
다음을 바꿉니다.
MANAGED_IDENTITY_ID: 관리형 아이덴티티의 고유 ID입니다. ID는 2~63자여야 하고 소문자 영숫자 문자와 대시만 포함해야 하며 영숫자 문자로 시작하고 끝나야 합니다. 관리형 워크로드 아이덴티티를 만든 후에는 ID를 변경할 수 없습니다.NAMESPACE_ID: 앞에서 만든 네임스페이스 ID입니다.WORKLOAD_IDENTITY_POOL_ID: 앞에서 만든 워크로드 아이덴티티 풀 ID입니다.PROJECT_NUMBER: Google Cloud 프로젝트의 프로젝트 번호입니다.
인라인 인증서 발급 구성 만들기
CA를 워크로드 아이덴티티 풀에 바인딩하려면 워크로드 아이덴티티 풀에 인라인 인증서 발급 구성이 있어야 합니다.
인라인 인증서 발급 구성을 구성하려면 JSON 형식의 구성 파일 (cic.json)을 만듭니다. 파일 형식은 다음과 유사합니다.
{
"inlineCertificateIssuanceConfig": {
"caPools": {
"REGION": "projects/PROJECT_NUMBER/locations/REGION/caPools/ROOT_CA_POOL_ID",
},
["lifetime": "CERTIFICATE_LIFETIME"],
["rotationWindowPercentage": ROTATION_WINDOW_PERCENTAGE],
["keyAlgorithm": "ALGORITHM"]
}
}
다음을 바꿉니다.
REGION: CA가 있는 리전입니다.PROJECT_NUMBER: 프로젝트 번호.PROJECT_ID변수로 지정된 프로젝트에서 프로젝트 번호를 가져오려면 다음 명령어를 실행합니다.gcloud projects describe PROJECT_ID --format="value(projectNumber)"
ROOT_CA_POOL_ID: 루트 CA 풀의 ID입니다.CERTIFICATE_LIFETIME: CA 풀에서 발급한 워크로드 인증서의 수명(초)입니다(예: 86400초(24시간)).CERTIFICATE_LIFETIME은(는) 24시간에서 30일 사이의 값이어야 합니다.CERTIFICATE_LIFETIME을 지정하지 않으면 인증서 수명은 기본적으로 24시간입니다.CERTIFICATE_LIFETIME은 선택사항입니다.ROTATION_WINDOW_PERCENTAGE: 갱신이 트리거되는 인증서 수명 비율입니다.ROTATION_WINDOW_PERCENTAGE값은 50~80 사이여야 합니다. 기본값은 50입니다.ROTATION_WINDOW_PERCENTAGE는 선택사항입니다.ALGORITHM: 비공개 키를 생성하는 데 사용되는 암호화 알고리즘입니다.ALGORITHM의 유효한 값은ECDSA_P256(기본값),ECDSA_P384,RSA_2048,RSA_3072,RSA_4096입니다.ALGORITHM는 선택사항입니다.
인라인 트러스트 구성 만들기
이 예시 구성에서 부하 분산기와 백엔드는 동일한 신뢰 도메인에 속하며 동일한 루트 인증서를 공유합니다. 따라서 인라인 트러스트 구성은 선택사항입니다. 공통 신뢰 루트는 신뢰 체인을 빌드하고 신뢰 도메인 내 워크로드의 ID를 확인하는 데 사용됩니다.
기본적으로 동일한 트러스트 도메인 내의 워크로드는 관리형 워크로드 아이덴티티를 사용하여 상호 인증할 수 있습니다. 서로 다른 트러스트 도메인에 있는 워크로드가 상호 인증하도록 하려면 워크로드 아이덴티티 풀에서 트러스트 관계를 명시적으로 선언해야 합니다. 다른 트러스트 도메인의 인증서를 인식하고 허용하는 인라인 트러스트 구성을 만들어 이를 수행합니다.
인라인 트러스트 구성을 만들려면 다음을 실행하세요.
인증서를 다운로드합니다.
gcloud privateca pools get-ca-certs ROOT_CA_POOL_ID \ --output-file=CERTIFICATE_PATH \ --location=REGION다음을 바꿉니다.
ROOT_CA_POOL_ID: 루트 CA 풀의 IDCERTIFICATE_PATH: PEM으로 인코딩된 인증서를 출력할 경로REGION: 루트 CA 풀의 리전
PEM 형식 인증서가 포함된 인라인 트러스트 구성이 포함된 JSON 형식 구성 파일 (
tc.json)을 만듭니다.파일은 다음과 유사합니다.
{ "inlineTrustConfig": { "additionalTrustBundles": { "TRUST_DOMAIN_NAME1": { "trustAnchors": [ { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----" }, { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----" } ] }, "TRUST_DOMAIN_NAME2": { "trustAnchors": [ { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL3\n-----END CERTIFICATE-----" }, { "pemCertificate": "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL4\n-----END CERTIFICATE-----" } ] } } } }다음을 바꿉니다.
TRUST_DOMAIN_NAME: 트러스트 도메인은 다른 (또는 동일한) 워크로드 아이덴티티 풀 트러스트 도메인을 포함하여 모든 트러스트 도메인('example.com' 등)일 수 있습니다.워크로드 아이덴티티 풀 트러스트 도메인의 경우 트러스트 도메인 이름은 다음과 같이 형식이 지정됩니다.
WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog
형식에서 다음을 바꿉니다.
WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀의 IDPROJECT_NUMBER: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호
CERTIFICATE_MATERIAL: 트러스트 도메인에서 인증서를 발급할 수 있는 신뢰할 수 있는 PEM 형식의 CA 인증서입니다. 다음 명령어를 사용하여 PEM 형식의 인증서 파일을 한 줄 문자열로 인코딩할 수 있습니다.cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
CA를 워크로드 아이덴티티 풀에 바인딩
CA 계층 구조를 만들고 CA의 인증서 발급 구성을 만든 후 CA를 워크로드 아이덴티티 풀에 바인딩할 수 있습니다. CA를 워크로드 아이덴티티 풀에 바인딩하려면 CA의 인증서 발급 구성으로 워크로드 아이덴티티 풀을 업데이트해야 합니다. 그런 다음 풀이 업데이트되었는지 확인할 수 있습니다.
워크로드 아이덴티티 풀 업데이트
CA를 워크로드 아이덴티티 풀에 바인딩하려면 CA의 인증서 발급 구성으로 워크로드 아이덴티티 풀을 업데이트합니다. 그런 다음 풀이 업데이트되었는지 확인할 수 있습니다.
풀을 업데이트하려면 다음 명령어를 실행합니다.
gcloud iam workload-identity-pools update WORKLOAD_IDENTITY_POOL_ID \
--location="global" \
--inline-certificate-issuance-config-file=CIC_JSON_FILE_PATH \
[--inline-trust-config-file=TC_JSON_FILE_PATH] \
--project=PROJECT_ID
다음을 바꿉니다.
WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 ID입니다.CIC_JSON_FILE_PATH: 이전에 만든 인라인 인증서 발급 구성의 JSON 형식 구성 파일 (cic.json)의 경로입니다.TC_JSON_FILE_PATH: 이전에 만든 인라인 트러스트 구성의 JSON 형식 구성 파일 (tc.json)의 경로입니다. 워크로드가 서로 다른 트러스트 도메인에서 인증하는 경우 이 파일을 지정해야 합니다. 그렇지 않으면--inline-trust-config를 생략해도 됩니다.
워크로드 아이덴티티 풀이 업데이트되었는지 확인
워크로드 아이덴티티 풀이 인증서 발급 구성 및 트러스트 구성과 함께 업데이트되었는지 확인하려면 다음 명령어를 실행합니다.
gcloud iam workload-identity-pools describe WORKLOAD_IDENTITY_POOL_ID \
--location="global" \
--project=PROJECT_ID
다음을 바꿉니다.
WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 ID입니다.PROJECT_ID: 프로젝트 ID입니다.
출력은 다음과 비슷합니다.
inlineCertificateIssuanceConfig:
caPools:
REGION: projects/PROJECT_NUMBER/locations/REGION1/caPools/ROOT_CA_POOL_ID
keyAlgorithm: ALGORITHM
lifetime: CERTIFICATE_LIFETIME
rotationWindowPercentage: ROTATION_WINDOW_PERCENTAGE
inlineTrustConfig:
additionalTrustBundles:
TRUST_DOMAIN_NAME1:
trustAnchors:
- pemCertificate: |-
-----BEGIN CERTIFICATE-----
CERTIFICATE_MATERIAL1
-----END CERTIFICATE-----
- pemCertificate: |-
-----BEGIN CERTIFICATE-----
CERTIFICATE_MATERIAL2
-----END CERTIFICATE-----
TRUST_DOMAIN_NAME2:
trustAnchors:
- pemCertificate: |-
-----BEGIN CERTIFICATE-----
CERTIFICATE_MATERIAL3
-----END CERTIFICATE-----
- pemCertificate: |-
-----BEGIN CERTIFICATE-----
CERTIFICATE_MATERIAL4
-----END CERTIFICATE-----
mode: TRUST_DOMAIN
name: projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID
state: ACTIVE
이 출력에는 다음 값이 포함됩니다.
PROJECT_NUMBER: 프로젝트 번호REGION: 루트 CA 풀이 있는 리전ROOT_CA_POOL_ID: 루트 CA 풀의 IDALGORITHM: 비공개 키를 생성하는 데 사용되는 암호화 알고리즘CERTIFICATE_LIFETIME: CA 풀에서 발급한 워크로드 인증서의 수명(초)ROTATION_WINDOW_PERCENTAGE: 갱신이 트리거되는 인증서 수명 비율입니다.TRUST_DOMAIN_NAME: 트러스트 도메인은 다른 (또는 동일한) 워크로드 아이덴티티 풀 트러스트 도메인을 포함하여 모든 트러스트 도메인('example.com' 등)일 수 있습니다.CERTIFICATE_MATERIAL: 트러스트 도메인에서 인증서를 발급하도록 신뢰할 수 있는 PEM 형식의 CA 인증서WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 ID
출력에 inlineCertificateIssuanceConfig 또는 inlineTrustConfig가 없으면 gcloud CLI가 결제 및 할당량에 올바른 프로젝트를 사용하도록 올바르게 구성했는지 확인합니다.
최신 버전의 gcloud CLI로 업데이트해야 할 수도 있습니다.
CA 풀에서 인증서를 요청하도록 관리형 워크로드 아이덴티티를 승인
CA를 워크로드 아이덴티티 풀에 바인딩한 후 관리형 워크로드 아이덴티티가 CA 풀에서 인증서를 요청하도록 승인해야 합니다.
트러스트 도메인에 CA 서비스 워크로드 인증서 요청자 역할(
roles/privateca.workloadCertificateRequester)을 부여합니다. 이 역할은 트러스트 도메인이 CA 서비스 인증서 체인에서 인증서를 요청하도록 승인합니다.gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \ --location=REGION \ --role=roles/privateca.workloadCertificateRequester \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \ --project=PROJECT_ID다음을 바꿉니다.
ROOT_CA_POOL_ID: 루트 CA 풀의 IDREGION: 루트 CA 풀의 리전PROJECT_NUMBER: 프로젝트 번호PROJECT_ID에서PROJECT_NUMBER를 가져오려면 다음 명령어를 실행합니다.gcloud projects describe PROJECT_ID --format="value(projectNumber)"
WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 IDPROJECT_ID: 프로젝트 ID입니다.
트러스트 도메인에 CA 서비스 풀 리더 역할 (
roles/privateca.poolReader)을 부여합니다. 이 역할은 트러스트 도메인이 CA 인증서 체인에서 서명된 X.509 인증서를 가져올 수 있도록 승인합니다.gcloud privateca pools add-iam-policy-binding ROOT_CA_POOL_ID \ --location=REGION \ --role=roles/privateca.poolReader \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/WORKLOAD_IDENTITY_POOL_ID" \ --project=PROJECT_ID다음을 바꿉니다.
ROOT_CA_POOL_ID: 루트 CA 풀의 IDREGION: 루트 CA 풀의 리전PROJECT_NUMBER: 프로젝트 번호WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 IDPROJECT_ID: 프로젝트 ID입니다.
부하 분산기를 만들고 관리 ID를 백엔드 서비스에 할당
관리형 아이덴티티는 백엔드 서비스를 만들 때만 할당할 수 있습니다.
이 섹션의 단계는 부하 분산기의 백엔드 서비스에 관리 ID를 할당하는 데만 적용됩니다. 이는 부하 분산기의 백엔드 구성의 일부입니다.
전역 외부 애플리케이션 부하 분산기를 설정하려면 VM 인스턴스 그룹 백엔드로 전역 외부 애플리케이션 부하 분산기 설정의 단계를 따르세요. 부하 분산기의 백엔드 서비스를 설정하는 단계에서 다음을 추가로 수행해야 합니다.
콘솔
Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
백엔드 구성 섹션에서 백엔드 서비스를 만드는 데 필요한 세부정보를 추가합니다.
고급 구성 섹션을 펼칩니다.
백엔드 인증 섹션에서 관리형 아이덴티티 옵션을 선택합니다.
백엔드 서비스에 관리형 아이덴티티를 할당하려면 관리형 아이덴티티 필드에 앞서 만든 관리형 워크로드 아이덴티티를 입력합니다.
만들기를 클릭합니다.
부하 분산기 설정에 설명된 단계에 따라 부하 분산기 구성을 완료합니다.
gcloud
관리 ID를 백엔드 서비스에 할당하려면
gcloud beta compute backend-services create명령어를 사용하는 동안--identity플래그를 추가합니다.gcloud beta compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --health-checks=HEALTH_CHECK_NAME \ --identity='//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID' \ --global다음을 바꿉니다.
BACKEND_SERVICE_NAME: 백엔드 서비스 이름입니다.HEALTH_CHECK_NAME: 상태 점검의 이름WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 IDPROJECT_NUMBER: 프로젝트 번호NAMESPACE_ID: 네임스페이스 IDMANAGED_IDENTITY_ID: 관리형 ID ID
자동으로 생성된 리소스
부하 분산기의 백엔드 서비스에 관리 ID가 구성되면 관리 워크로드 아이덴티티에 의해 다음 리소스가 자동으로 생성됩니다.
- 백엔드 인증 구성: 부하 분산기의 백엔드 서비스에 연결됨
- 인증서 관리자 관리형 아이덴티티 인증서: 백엔드 인증 구성에 연결됨
- 인증서 관리자 트러스트 구성: 백엔드 인증 구성에 연결됨
다음 섹션은 자동으로 생성된 리소스가 구성되었는지 확인하기 위해 구성을 확인하는 것과 관련이 있습니다.
구성 확인
구성을 확인하여 자동으로 생성된 리소스가 구성되었는지 확인합니다.
자동으로 생성된 리소스에는 mi 접두사가 있습니다. 이는 리소스가 관리형 워크로드 아이덴티티에 의해 생성되었음을 나타냅니다.
백엔드 인증 구성 및 관리 ID 생성 확인
백엔드 인증 구성 및 관리 ID 생성을 확인하려면 gcloud beta compute backend-services describe 명령어를 사용하여 백엔드 서비스를 설명합니다.
gcloud beta compute backend-services describe BACKEND_SERVICE_NAME --global
출력은 다음과 비슷합니다.
affinityCookieTtlSec: 0 connectionDraining: drainingTimeoutSec: 0 creationTimestamp: '2025-11-06T02:15:43.680-08:00' description: '' enableCDN: false fingerprint: lTZwas8aylg= healthChecks: - https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME id: '719352032' kind: compute#backendService loadBalancingScheme: EXTERNAL_MANAGED name: BACKEND_SERVICE_NAME port: 80 portName: PORT_NAME protocol: HTTPS selfLink: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME sessionAffinity: NONE timeoutSec: 30 tlsSettings: authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/mi-bac-423b651f-d549-4a9f-a4f2-g2bcaa7108bd identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
이 출력에는 다음 값이 포함됩니다.
PROJECT_ID: 프로젝트 ID입니다.HEALTH_CHECK_NAME: 상태 점검의 이름BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.PORT_NAME: 포트 이름REGION: 루트 CA 풀이 있는 리전WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 IDPROJECT_NUMBER: 프로젝트 번호NAMESPACE_ID: 네임스페이스 IDMANAGED_IDENTITY_ID: 관리형 ID ID
백엔드 인증 구성이 자동으로 생성되고 backendService.tlsSettings.authenticationConfig 필드에 연결됩니다.
mi 접두사로 시작하는 백엔드 인증 구성은 다음 섹션에서 MI_BACKEND_AUTHENTICATION_CONFIG_ID로 지칭됩니다.
관리형 워크로드 아이덴티티도 backendService.tlsSettings.identity 필드에 연결됩니다. 형식은 다음과 같습니다.
//WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
인증서 관리자 관리 ID 인증서 및 인증서 관리자 트러스트 구성 생성 확인
인증서 관리자 관리 ID 인증서와 인증서 관리자 트러스트 구성이 백엔드 인증 구성 리소스에 연결되어 있는지 확인하려면 gcloud network-security backend-authentication-configs describe 명령어를 사용합니다.
gcloud network-security backend-authentication-configs describe MI_BACKEND_AUTHENTICATION_CONFIG_ID \
--location=global
출력은 다음과 비슷합니다.
clientCertificate: projects/PROJECT_NUMBER/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d createTime: '2025-11-06T10:15:56.237734973Z' etag: xwyxl1VYVoh4QIwf3nhKhAVXgcuOqoN7xdqAiS8Esvs name: projects//locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd trustConfig: projects/PROJECT_NUMBER/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742 updateTime: '2025-11-06T10:16:01.964275141Z'
clientCertificate 및 trustConfig는 관리형 워크로드 아이덴티티에 의해 자동으로 생성되고 백엔드 인증 구성 리소스에 연결됩니다.
mi 접두사로 시작하는 clientCertificate은 다음 섹션에서 MI_CLIENT_CERTIFICATE_ID로 지칭됩니다.
mi 접두사로 시작하는 trustConfig은 다음 섹션에서 MI_TRUST_CONFIG_ID로 지칭됩니다.
인증서 관리자 인증서가 관리 ID 인증서인지 확인
인증서 관리자 관리 ID 인증서의 세부정보를 보려면 gcloud certificate-manager certificates describe 명령어를 사용합니다.
gcloud certificate-manager certificates describe MI_CLIENT_CERTIFICATE_ID
출력은 다음과 비슷합니다.
createTime: '2025-11-06T10:15:46.187892797Z' expireTime: '2025-11-07T22:55:47Z' extendedKeyUsage: clientAuth: true managedIdentity: identity: //WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID state: ACTIVE name: projects/PROJECT_ID/locations/global/certificates/mi-crt-181fa461-3b53-40fa-8515-507d47337c5d pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE----- scope: CLIENT_AUTH updateTime: '2025-11-06T10:15:49.427339950Z' usedBy: - name: //networksecurity.googleapis.com/projects/PROJECT_NUMBER/locations/global/backendAuthenticationConfigs/mi-bac-477b381f-d349-4a8f-a6f2-f2bbaa7109bd
이 출력에는 다음 값이 포함됩니다.
WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 IDPROJECT_NUMBER: 프로젝트 번호NAMESPACE_ID: 네임스페이스 IDMANAGED_IDENTITY_ID: 관리형 ID IDCERTIFICATE_MATERIAL: PEM 인코딩 형식의 X.509-SVID
인증서 관리자 관리형 ID 인증서에는 관리형 ID 인증서로 식별하는 managedIdentity 속성이 있습니다. Certificate Manager 관리 ID 인증서 리소스는 PEM 인코딩 형식으로 X.509-SVID를 저장합니다.
인증서 관리자 관리 ID 인증서의 범위는 CLIENT_AUTH이며, 이 인증서가 백엔드 mTLS에서 클라이언트 인증서로 사용됨을 나타냅니다.
SPIFFE ID가 X.509-SVID의 SAN에 포함되어 있는지 확인합니다.
X.509-SVID에는 SAN 필드에 URI로 인코딩된 SPIFFE ID가 포함됩니다. 이 SPIFFE ID는 워크로드 아이덴티티 풀의 관리형 아이덴티티에 해당합니다.
인증서의 사람이 읽을 수 있는 형식을 출력하려면 다음 명령어를 실행합니다.
openssl x509 -text -noout \ <<< "-----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL\n-----END CERTIFICATE-----"
출력은 다음과 비슷합니다 (축약됨).
Certificate:
Data:
Version: 3 (0x2)
Signature Algorithm: ecdsa-with-SHA256
Issuer: O = example.com, CN = Example CA
Validity
Not Before: Nov 6 10:15:48 2025 GMT
Not After : Nov 7 10:15:47 2025 GMT
Subject:
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
X509v3 extensions:
X509v3 Subject Alternative Name: critical
URI:spiffe://WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
이 출력에는 다음 값이 포함됩니다.
WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 IDPROJECT_NUMBER: 프로젝트 번호NAMESPACE_ID: 네임스페이스 IDMANAGED_IDENTITY_ID: 관리형 ID ID
인증서 관리자 신뢰 구성에 spiffeTrustStore 필드가 포함되어 있는지 확인
인증서 관리자 트러스트 구성에는 spiffeTrustStores라는 필드가 포함되어 있습니다. spiffeTrustStores 필드에는 워크로드 아이덴티티 풀의 트러스트 도메인 (출력에서 로 표시됨)과 연결된 트러스트 번들과 워크로드 아이덴티티 풀의 인라인 트러스트 구성에서 WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.googadditionalTrustBundles 필드로 지정된 추가 트러스트 번들이 포함됩니다.
인증서 관리자 신뢰 구성의 세부정보를 보려면 gcloud certificate-manager trust-configs describe 명령어를 사용합니다.
gcloud certificate-manager certificates describe MI_TRUST_CONFIG_ID
MI_TRUST_CONFIG_ID를 관리 ID에 의해 자동으로 생성된 트러스트 구성으로 바꿉니다.
다음 예시 출력에서 호스트 example.com은 트러스트가 확장되는 추가 트러스트 도메인입니다.
createTime: '2025-11-06T10:15:50.048030758Z'
etag: kDoKfm5W6Il2HPvduKZWpuYpyrKrNVq4jqMEICE-6rQ
name: projects/PROJECT_ID/locations/global/trustConfigs/mi-tc-e4f05160-f20f-4109-aae3-4c1a68891742
spiffeTrustStores:
example.com:
trustAnchors:
- pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL1\n-----END CERTIFICATE-----
WORKLOAD_IDENTITY_POOL_ID.global.PROJECT_NUMBER.workload.id.goog:
trustAnchors:
- pemCertificate: -----BEGIN CERTIFICATE-----\nCERTIFICATE_MATERIAL2\n-----END CERTIFICATE-----
updateTime: '2025-11-07T08:25:15.760754841Z'
이 출력에는 다음 값이 포함됩니다.
PROJECT_ID: 프로젝트 ID입니다.CERTIFICATE_MATERIAL: 트러스트 도메인에서 인증서를 발급하도록 신뢰할 수 있는 PEM 형식의 CA 인증서WORKLOAD_IDENTITY_POOL_ID: 워크로드 아이덴티티 풀 IDPROJECT_NUMBER: 프로젝트 번호MANAGED_IDENTITY_ID: 관리형 ID ID
Certificate Manager 트러스트 구성에 대해 자세히 알아보려면 Certificate Manager 트러스트 구성을 참고하세요.