如要瞭解如何存取 Compute Engine 的受管理工作負載身分,請參閱存取權要求頁面。
本頁說明如何使用 gcloud CLI,為 Compute Engine 設定受管理的工作負載身分。
本頁面也說明如何為 Compute Engine 設定受管理的工作負載身分自動佈建和生命週期管理。您可以使用憑證授權單位服務,設定憑證授權單位 (CA) 集區來核發憑證。憑證授權單位服務是一項可用性高且可擴充的 Google Cloud 服務,可簡化及自動化憑證授權單位服務的部署、管理和安全防護作業。您可以建立虛擬機器執行個體 (VM),並從已設定的 CA 集區佈建 X.509 憑證。之後可使用這些憑證在工作負載之間建立 mTLS 連線。
事前準備
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.
瞭解如何使用憑證授權單位服務核發憑證。
Enable the IAM and Certificate Authority Service 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 將 Google Cloud CLI 設為使用已加入帳單和配額許可清單的專案。
gcloud config set billing/quota_project PROJECT_ID
將 PROJECT_ID 替換為已加入受管理工作負載身分預先發布版許可清單的專案 ID。
必要的角色
如要取得建立受管理的工作負載身分,以及佈建受管理的工作負載身分憑證所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
-
如要建立及設定受管理的工作負載身分,請按照下列步驟操作:
-
身分與存取權管理 Workload Identity 集區管理員 (
roles/iam.workloadIdentityPoolAdmin) -
服務帳戶管理員 (
roles/iam.serviceAccountAdmin)
-
身分與存取權管理 Workload Identity 集區管理員 (
-
如要建立及設定 CA 集區:
CA 服務管理員 (
roles/privateca.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
或者,IAM 擁有者 (roles/owner) 基本角色也包含設定代管 Workload Identity 的權限。您不應在正式環境中授予基本角色,但可以在開發或測試環境中授予。
總覽
如要為應用程式使用受管理的工作負載身分,請執行下列工作:
安全管理員:
- 在 workload identity pool 中建立受管理的工作負載身分。
- 定義工作負載認證政策,並建立服務帳戶。
- 設定憑證授權單位服務,為受管理的工作負載身分核發憑證。
- 授權受管理的工作負載身分,從 CA 集區要求憑證。
- 定義信任和憑證核發設定。
- 建立設定檔,上傳 VM 的合作夥伴中繼資料。
運算管理員:
為在 Compute Engine 中執行的工作負載啟用受管理的工作負載身分:
- 適用於個別 VM。
- 適用於代管執行個體群組 (MIG)。
建立受管理的工作負載身分
啟用代管型 Workload Identity 後, Google Cloud 會自動將 Workload Identity 集區身分的憑證佈建至工作負載。工作負載身分是在 workload identity pool 中定義,並整理成稱為「命名空間」的管理界線。
建立 workload identity pool
您必須在 TRUST_DOMAIN 模式下建立集區,才能建立受管理的工作負載身分。如要為受管理的工作負載身分建立 workload identity pool,請使用 workload-identity-pools create 指令。
gcloud iam workload-identity-pools create POOL_ID \
--location="global" \
--mode="TRUST_DOMAIN"
更改下列內容:
POOL_ID:集區的專屬 ID。ID 長度必須介於 4 到 32 個字元之間,只能包含小寫英數字元和連字號,且開頭和結尾須為英數字元。建立 Workload Identity 集區後,就無法變更其 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 指令在 workload identity pool 中建立命名空間。
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:您先前建立的 Workload Identity Pool ID。
建立受管理的工作負載身分
您可以使用 workload-identity-pools managed-identities create 指令,在 workload identity pool 命名空間中建立受管理的工作負載身分。
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 個字元之間,只能使用小寫英數字元和連字號,而且開頭和結尾須為英數字元。代管 Workload Identity 建立後,就無法變更其 ID。NAMESPACE_ID:您先前建立的命名空間 ID。POOL_ID:您先前建立的 Workload Identity Pool ID。
受管理的工作負載身分 ID 是 SPIFFE ID,格式如下:
spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
定義工作負載認證政策
本節說明如何設定認證政策。 這項政策會決定 Google Cloud IAM 要使用哪些屬性來驗證工作負載的身分。驗證完成後,呼叫工作負載即可取得憑證。驗證依據是工作負載的下列其中一項屬性:
- VM 執行個體 ID
- 附加服務帳戶電子郵件地址
- 附加的服務帳戶 UID
使用驗證規則定義工作負載驗證政策
如要建立驗證政策,允許工作負載使用受管理的身分,請按照下列步驟操作:
決定是否要建立認證政策,允許工作負載使用附加的服務帳戶或執行個體 ID,認證代管身分。
建立 JSON 格式的認證政策檔案。
(選用) 如要在 Compute Engine 執行個體上接收 X.509 憑證,必須啟用附加的服務帳戶。建議您先使用下列指令建立新的服務帳戶,然後將該帳戶附加至工作負載:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
將
SERVICE_ACCOUNT_NAME替換為服務帳戶名稱建立 JSON 格式的認證政策檔案,根據服務帳戶電子郵件地址、服務帳戶 UID 或執行個體 ID 進行認證。
服務帳戶電子郵件地址
如要建立根據服務帳戶電子郵件地址進行認證的認證政策檔案,請建立含有下列內容的檔案:
{ "attestationRules": [ { "googleCloudResource": "//compute.googleapis.com/projects/WORKLOAD_PROJECT_NUMBER/type/Instance/attached_service_account.email/SERVICE_ACCOUNT_EMAIL" } ], }更改下列內容:
WORKLOAD_PROJECT_NUMBER:包含 VM 執行個體或服務帳戶的專案編號
如要取得包含受管理身分或您剛建立的服務帳戶的專案編號,請執行下列指令:
gcloud projects describe $(gcloud config get-value project) \ --format="value(projectNumber)"SERVICE_ACCOUNT_EMAIL:附加至 VM 的服務帳戶電子郵件地址
服務帳戶 UID
如要建立根據服務帳戶 UID 認證的認證政策檔案,請建立含有下列內容的檔案:
{ "attestationRules": [ { "googleCloudResource": "//compute.googleapis.com/projects/WORKLOAD_PROJECT_NUMBER/type/Instance/attached_service_account.uid/SERVICE_ACCOUNT_UID" } ], }更改下列內容:
WORKLOAD_PROJECT_NUMBER:包含 VM 執行個體或服務帳戶的專案編號
如要取得包含受管理身分或您剛建立服務帳戶的專案編號,請執行下列指令:
gcloud projects describe $(gcloud config get-value project) \ --format="value(projectNumber)"SERVICE_ACCOUNT_UID:附加至 VM 的服務帳戶 UID
執行個體 ID
如要建立認證政策檔案,根據執行個體 ID 進行認證,請建立含有下列內容的檔案:
{ "attestationRules": [ { "googleCloudResource": "//compute.googleapis.com/projects/WORKLOAD_PROJECT_NUMBER/uid/zones/ZONE/instances/INSTANCE_ID" } ], }更改下列內容:
WORKLOAD_PROJECT_NUMBER:包含 VM 執行個體或服務帳戶的專案編號
如要取得包含受管理身分或您剛建立的服務帳戶的專案編號,請執行下列指令:
gcloud projects describe $(gcloud config get-value project) \ --format="value(projectNumber)"INSTANCE_ID:Compute Engine VM 執行個體 ID
執行個體 ID 的值必須來自現有的 Compute Engine 執行個體。如要取得執行個體 ID,請執行下列指令:
gcloud compute instances describe INSTANCE_NAME --zone=ZONE --format="get(id)"
INSTANCE_NAME:Compute Engine VM 執行個體名稱ZONE:Compute Engine VM 區域
使用您在本文件稍早建立的政策 JSON 檔案,建立認證政策:
gcloud iam workload-identity-pools managed-identities set-attestation-rules MANAGED_IDENTITY_ID \ --namespace=NAMESPACE_ID \ --workload-identity-pool=POOL_ID \ --policy-file=PATH_TO_POLICY_JSON_FILE \ --location=global
更改下列內容:
MANAGED_IDENTITY_ID:受管理身分識別的專屬 ID。ID 長度必須介於 2 至 63 個字元之間,只能使用小寫英數字元和連字號,而且開頭和結尾須為英數字元。代管 Workload Identity 建立後,就無法變更其 ID。NAMESPACE_ID:您先前建立的命名空間 ID。POOL_ID:您先前建立的 Workload Identity Pool ID。PATH_TO_POLICY_JSON_FILE:代表您先前建立的認證政策的 JSON 檔案路徑。
您也可以個別新增或移除認證規則,藉此更新政策。如要將認證新增至認證政策,請執行下列指令:
gcloud iam workload-identity-pools managed-identities add-attestation-rule MANAGED_IDENTITY_ID \ --namespace=NAMESPACE_ID \ --workload-identity-pool=POOL_ID \ --google-cloud-resource='//compute.googleapis.com/projects/WORKLOAD_PROJECT_NUMBER/type/Instance/attached_service_account.uid/SERVICE_ACCOUNT_UID' \ --location=global
如要瞭解如何列出或移除認證規則,請執行下列指令:
gcloud iam workload-identity-pools managed-identities list-attestation-rules --help gcloud iam workload-identity-pools managed-identities remove-attestation-rule --help
設定憑證授權單位服務,為受管理的工作負載身分核發憑證
使用憑證授權單位服務集區,為根憑證授權單位和從屬憑證授權單位 (CA) 建立建議設定。從屬 CA 集區會將 X.509 工作負載身分憑證核發給 VM。
設定 CA 集區後,您就可以授權受管理的工作負載身分,向 CA 集區要求及接收已簽署的憑證。
設定根 CA 集區
使用 Google Cloud CLI 介面,透過憑證授權單位服務設定根 CA 集區。
gcloud
建立根 CA 集區。
在 Enterprise 層級建立根 CA 集區,這個層級適用於使用
gcloud privateca pools create指令長期核發少量憑證。gcloud privateca pools create ROOT_CA_POOL_ID \ --location=REGION \ --tier=enterprise
更改下列內容:
- ROOT_CA_POOL_ID:根 CA 集區的專屬 ID。ID 長度最多 64 個字元,且只能包含大小寫英數字元、底線或連字號。集區 ID 在區域內不得重複。
- REGION:根 CA 集區所在的區域。
詳情請參閱建立憑證授權單位集區。
使用
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 集區中建立其他根 CA。這對根 CA 輪替很有幫助。
設定下層 CA
使用 Google Cloud CLI 介面,透過憑證授權單位服務建立下層 CA 集區和下層 CA。
如果您有多個憑證核發情境,可以為每個情境建立從屬 CA。此外,在 CA 集區中新增多個從屬 CA,有助於更妥善地平衡分配憑證要求負載。
gcloud
使用 gcloud privateca pools create 指令建立下層 CA 集區。
在 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 集區的區域。
詳情請參閱建立憑證授權單位集區。
使用
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 的
subject欄位,請參閱「主體」。
授權受管理的工作負載身分向 CA 集區要求憑證
受管理的工作負載身分必須具備權限,才能向 CA 服務要求憑證並取得公開憑證。
gcloud
在每個下層 CA 集區中,將 CA 服務工作負載憑證要求者 (
roles/privateca.workloadCertificateRequester) 身分與存取權管理角色授予受管理的工作負載身分。下列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:包含 Workload Identity Pool 的專案編號。
- POOL_ID:Workload Identity Pool 的 ID。
將下層 CA 集區的「CA 服務集區讀取者 (
roles/privateca.poolReader)」身分與存取權管理角色授予受管理的工作負載身分。這項作業會授權代管工作負載身分,從 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:包含 Workload Identity Pool 的專案編號。
- POOL_ID:Workload Identity Pool 的 ID。
定義信任和憑證核發設定
您可以使用這項資訊建立 JSON 檔案,並在建立 VM 時上傳為合作夥伴資料。
定義憑證核發設定
如要為 Compute Engine 啟用受管理的工作負載身分,必須設定下列憑證核發設定。
{
"primary_certificate_authority_config": {
"certificate_authority_config": {
"ca_pool": "projects/SUBORDINATE_CA_POOL_PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
}
},
"key_algorithm": "ALGORITHM",
"workload_certificate_lifetime_seconds": DURATION,
"rotation_window_percentage": ROTATION_WINDOW_PERCENTAGE
}
更改下列內容:
- SUBORDINATE_CA_POOL_PROJECT_ID:包含下層 CA 集區的專案 ID。
- REGION:從屬 CA 集區所在的區域。
- SUBORDINATE_CA_POOL_ID:從屬 CA 集區的名稱
- ALGORITHM:用於產生私密金鑰的加密演算法。有效值為
rsa-2048(預設值)、rsa-3072、rsa-4096、ecdsa-p256和ecdsa-p384。 - DURATION:選用:葉子憑證的有效期限 (以秒為單位)。這個值必須介於 3600 至 315360000 之間。如未指定,系統會使用預設值 86400。核發憑證的實際效期也取決於核發 CA,因為核發 CA 可能會限制核發憑證的生命週期。
- ROTATION_WINDOW_PERCENTAGE:(選填) 憑證效期達到這個百分比時,就會觸發更新。值必須介於 50 至 80 之間。預設值為 50%。您必須根據憑證效期設定輪替期百分比,確保憑證核發後至少 7 天,且憑證到期前至少 7 天,會進行憑證續約。
定義信任設定
信任設定包含一組信任錨點,用於驗證對等互連憑證。包含下列項目:
- 信任的 CA 集區資源 URI:一組 CA 集區資源 URI,這些 URI 信任在與 VM 所屬信任網域相同的網域中核發憑證。
- PEM 格式的 CA 憑證:一組 PEM 格式的 CA 憑證,信任這些憑證可核發與 VM 所屬信任網域相同的憑證。
{
"POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
"trust_anchors": [
{
"ca_pool": "projects/SUBORDINATE_CA_POOL_PROJECT_ID/locations/REGION/caPools/SUBORDINATE_CA_POOL_ID"
},
{
"pem_certificate": "PEM_ENCODED_CERTIFICATE"
}
]
}
}
更改下列內容:
- POOL_ID:Workload Identity Pool 的 ID
- PROJECT_NUMBER:包含 Workload Identity Pool 的專案專案編號
- SUBORDINATE_CA_POOL_PROJECT_ID:包含下層 CA 集區的專案 ID。
- REGION:從屬 CA 集區所在的區域
- SUBORDINATE_CA_POOL_ID:從屬 CA 集區的 ID
PEM_ENCODED_CERTIFICATE:選用:一組額外的 PEM 格式 CA 憑證,這些憑證受信任,可核發與 VM 所屬信任網域相同的憑證。這些憑證會新增至下層 CA 集區的信任錨點清單。下列指令可用於將 PEM 格式的
trust-anchor.pem檔案編碼為單行字串:cat trust-anchor.pem | sed 's/^[ ]*//g' | sed -z '$ s/\n$//' | tr '\n' $ | sed 's/\$/\\n/g'
建立設定檔,上傳 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" } } }
後續步驟
- 排解 Compute Engine 受管理工作負載身分驗證問題
- 使用 mTLS 設定工作負載對工作負載的驗證。
- 使用代管的工作負載身分識別,設定具有後端 mTLS 的負載平衡。
- 進一步瞭解如何建立 CA 集區。