管理政策控制項
本教學課程說明如何在 Certificate Authority Service 資源上實作政策控管。
目標
本教學課程提供相關資訊,說明如何設定共用的憑證授權單位 (CA) 集區,以便透過下列政策控管核發 DNS 憑證:
- 使用者
prod-dns-requester
可以為*.prod.example.com
網域要求終端實體伺服器的傳輸層安全標準 (TLS) 憑證。 - 使用者
test-dns-requester
可以為*.test.example.com
網域要求終端實體伺服器的傳輸層安全標準 (TLS) 憑證。 - 使用者
blank-check-requester
可以向 CA 集區要求任何類型的憑證。
本教學課程會使用 CA 集區的憑證核發政策、憑證範本和條件式 IAM 繫結,達成這個情境。
事前準備
- 瞭解 CA 服務提供的各種政策控管。
- 請參閱這篇文章,瞭解如何建立認證範本。
- 請參閱憑證設定檔,瞭解如何用於各種憑證核發情境。
- 瞭解如何使用一般運算語言 (CEL),強制執行各種憑證核發政策控管。
- 瞭解如何使用憑證核發政策。
- 瞭解如何設定、修改及移除 IAM 政策,以建立及管理 CA 服務資源。
建立 CA 集區
如要建立 CA 集區,請按照下列操作說明進行:
如要建立使用
issuance-policy.yaml
檔案的 CA 集區,請使用下列gcloud
指令:如要在新建立的 CA 集區中,使用 Google 管理的資源建立 CA,請使用下列
gcloud
指令:gcloud
gcloud privateca roots create CA_NAME \ --pool=POOL_NAME \ --location=LOCATION \ --subject="CN=Example DNS Root, O=Example LLC, C=US" \ --validity="10Y" \ --max-chain-length=1 \ --auto-enable
其中:
設定測試憑證的政策控管
發行政策異動即刻生效。建議您先設定測試政策控制項,再將其用於正式環境。本節說明如何設定測試政策控制項。
測試和正式版 DNS 範本的伺服器 TLS 憑證都必須使用相同的預先定義值。建立 YAML 檔案 leaf_server_tls_predefined_values.yaml
,並將下列端點實體伺服器 TLS 設定複製到該檔案。
keyUsage:
baseKeyUsage:
digitalSignature: true
keyEncipherment: true
extendedKeyUsage:
serverAuth: true
caOptions:
isCa: false
設定測試 DNS 憑證的政策控管
本節說明如何設定政策控管,允許使用者test-dns-requester
為 *.test.example.com
網域中的 DNS 要求實體伺服器 TLS 憑證。
為測試憑證建立 DNS 憑證範本
本節說明如何建立包含實體伺服器 TLS 設定的憑證範本。這個憑證範本會限制憑證只能在 *.test.example.com
網域上使用 DNS SAN。這些限制是使用一般運算語言 (CEL) 運算式實作。憑證範本也會捨棄憑證要求中指定的主體。
使用下列
gcloud
指令建立憑證範本,其中包含實體伺服器 TLS 擴充功能、捨棄憑證要求中指定的任何subject
,並限制允許的 SAN。gcloud
gcloud privateca templates create test-server-tls-template \ --predefined-values-file ./leaf_server_tls_predefined_values.yaml \ --no-copy-subject \ --copy-sans \ --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"
其中:
--predefined-values-file
旗標用於傳遞 YAML 檔案,該檔案會說明憑證範本設定的任何預先定義 X.509 值。--no-copy-subject
旗標會從憑證要求中捨棄所有呼叫端指定的主體。--copy sans
標記可確保憑證要求中的 SAN 擴充欄位會複製到簽署的憑證。--identity-cel-expression
標記用於傳遞 CEL 運算式,系統會在核發憑證前,根據該運算式評估憑證中的身分。如要進一步瞭解如何使用 CEL 運算式導入各種政策控制項,請參閱「使用 CEL」。
如要進一步瞭解如何建立憑證範本,請參閱「建立憑證範本」。
為 DNS 測試憑證建立 IAM 繫結
如要允許 DNS CA 集區中的使用者 test-dns-requester@
要求測試伺服器 TLS 憑證,請在 CA 集區中建立有條件的 IAM 繫結。只有在憑證要求包含 test-server-tls-template
範本的參照時,才將 privateca.certificateRequester
角色授予使用者 test-dns-requester@
。如要進一步瞭解 CA 服務的 IAM 角色和權限,請參閱「使用 IAM 控管存取權」。
建立政策 YAML 檔案
test_dns_condition.yaml
,並將下列 TLS 設定複製到該檔案。title: test DNS binding description: allows user to only create DNS test certificates expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/test-server-tls-template"
IAM 條件中提供的範本名稱,必須與憑證要求中的範本名稱相符。因此,如果您在 CEL 運算式的
privateca.googleapis.com/template
屬性中提供專案 ID,要求憑證時也必須提供專案 ID。如果您在 CEL 運算式中提供專案編號,也必須在憑證要求中提供專案編號。使用下列
gcloud
指令新增政策控制項,只允許test-dns-requester@
從 CA 集區要求正式版測試 TLS 憑證。test-dns-requester@
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \ --location=LOCATION \ --role='roles/privateca.certificateRequester' \ --member='user:test-dns-requester@' \ --condition-from-file=./test_dns_condition.yaml
其中:
--role
旗標用於傳遞要指派給成員的角色名稱。如要進一步瞭解 CA 服務的身分與存取權管理角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。--member
旗標用於傳遞要新增繫結的成員。condition-from-file
旗標用於傳遞具有 CEL 條件的檔案名稱。
使用下列
gcloud
新增政策控制項,允許test-dns-requester@
使用「test-server-tls-template」憑證範本。gcloud
gcloud privateca templates add-iam-policy-binding test-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:test-dns-requester@'
其中:
--role
旗標用於傳遞要指派給成員的角色名稱。如要進一步瞭解 CA 服務的身分與存取權管理角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。--member
旗標用於傳遞要新增繫結的成員。
如要進一步瞭解如何設定 IAM 政策,請參閱「設定 IAM 政策」。
設定正式版憑證的政策控管
測試政策控制項後,您就可以在正式版環境中使用這些控制項。
設定正式版 DNS 憑證的政策控管
本節說明如何設定政策控管,允許使用者prod-dns-requester
為 DNS .prod.example.com
網域要求終端實體 TLS 憑證。
為正式版 DNS 憑證建立憑證範本
請按照下列操作說明建立憑證範本,其中包含實體伺服器 TLS 設定。這個憑證範本會限制憑證只能使用 *.prod.example.com
網域的 DNS SAN。這些限制是透過一般運算語言 (CEL) 運算式實作。憑證範本也會捨棄憑證要求中指定的所有主體。
使用下列 gcloud
指令建立憑證範本 prod-server-tls-template
。
gcloud
gcloud privateca templates create prod-server-tls-template \
--predefined-values-file ./leaf_server_tls_predefined_values.yaml \
--no-copy-subject \
--copy-sans \
--identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.prod.example.com'))"
其中:
--predefined-values-file
旗標用於傳遞 YAML 檔案,該檔案會說明憑證範本設定的任何預先定義 X.509 值。--no-copy-subject
旗標會從憑證要求中捨棄所有呼叫端指定的主體。--copy sans
標記可確保憑證要求中的 SAN 擴充欄位會複製到已簽署的憑證。--identity-cel-expression
標記用於傳遞 CEL 運算式,系統會在核發憑證前,根據憑證中的身分評估該運算式。如要進一步瞭解 CEL 運算式,請參閱使用 CEL 運算式。
如要進一步瞭解如何建立憑證範本,請參閱「建立憑證範本」。
如要進一步瞭解 gcloud privateca templates create
指令,請參閱 gcloud privateca templates create。
建立正式版 DNS IAM 繫結
如要允許 DNS CA 集區中的使用者 prod-dns-requester@
要求生產伺服器 TLS 憑證,請在 CA 集區中建立有條件的 IAM 繫結。只有在憑證要求參照 prod-server-tls-template
範本時,才將 prod-dns-requester@
的 privateca.certificateRequester
角色授予使用者。如要進一步瞭解 IAM 角色和權限,請參閱「使用 IAM 控管存取權」。
建立政策 YAML 檔案
prod_dns_condition.yaml
,並將下列 TLS 設定複製到該檔案。title: Production DNS binding description: allows user to only create DNS production certificates expression: api.getAttribute("privateca.googleapis.com/template", "") == "PROJECT_ID/-/prod-server-tls-template"
使用下列
gcloud
指令新增政策控管,只允許prod-dns-requester@
從 CA 集區要求正式伺服器 TLS 憑證。gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \ --location=LOCATION \ --role='roles/privateca.certificateRequester' \ --member='user:prod-dns-requester@' \ --condition-from-file=./prod_dns_condition.yaml
其中:
--role
旗標用於傳遞要指派給成員的角色名稱。如要進一步瞭解 CA 服務的身分與存取權管理角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。--member
旗標用於傳遞要新增繫結的成員。condition-from-file
旗標用於傳遞具有 CEL 條件的檔案名稱。
如要進一步瞭解
gcloud privateca pools add-iam-policy-binding
指令,請參閱 gcloud privateca pools add-iam-policy-binding。如要新增政策控制項,允許
prod-dns-requester@
使用「prod-server-tls-template」憑證範本,請使用下列gcloud
指令:gcloud
gcloud privateca templates add-iam-policy-binding prod-server-tls-template \ --role='roles/privateca.templateUser' \ --member='user:prod-dns-requester@'
其中:
--role
旗標用於傳遞要指派給成員的角色名稱。如要進一步瞭解 CA 服務的身分與存取權管理角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。--member
旗標用於傳遞要新增繫結的成員。
不受限制的使用者政策控制項
如要允許使用者 blank-check-requester@
要求任何憑證,且不受任何限制,請建立不含任何條件的 IAM 繫結,並授予使用者 privateca.certificateRequester
角色。
gcloud
gcloud privateca pools add-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@example.com'
其中:
--role
旗標的值會決定指派給使用者的角色。如要進一步瞭解 CA 服務的 IAM 角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。--member
旗標的值會決定獲派角色的使用者。
更改下列內容:
- POOL_NAME:CA 集區的專屬 ID。
- LOCATION:CA 集區的位置。如需完整的位置清單,請參閱「位置」。
測試政策控制項
實作憑證核發和 IAM 政策後,請務必檢查並測試這些政策,確保政策運作正常。
擷取所有政策繫結
擷取在 CA 集區中實作的所有 IAM 政策。
如要擷取 CA 集區的所有 IAM 政策,請使用 gcloud
privateca pools get-iam-policy
指令:
gcloud
gcloud privateca pools get-iam-policy POOL_NAME --location=LOCATION
更改下列內容:
- POOL_NAME:CA 集區的專屬 ID。
- LOCATION:CA 集區的位置。如需完整的位置清單,請參閱「位置」。
如要進一步瞭解 gcloud privateca pools get-iam-policy
指令,請參閱 gcloud privateca pools get-iam-policy。
產生憑證
本節說明如何產生一般用途憑證,以及測試和正式版 DNS 憑證。
產生測試用 DNS 憑證
如要允許使用者 test-dns-requester@
從 CA 集區要求測試 DNS 憑證,請使用下列 gcloud
指令:
gcloud
gcloud privateca certificates create test-dns-1 \
--project=PROJECT_ID \
--issuer-location=LOCATION \
--issuer-pool=POOL_NAME \
--dns-san=foo.bar.test.example.com \
--generate-key \
--key-output-file=KEY_FILE_NAME \
--cert-output-file=test_dns_cert.pem \
--template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/test-server-tls-template
其中:
--dns-san
旗標用於設定一或多個以半形逗號分隔的 DNS SAN。--generate-key
標記,即可在本機上產生新的 RSA-2048 私密金鑰。--key-output-file
標記用於設定所產生私密金鑰的寫入路徑 (PEM 格式)。--cert-output-file
標記用於設定路徑,系統會將產生的 PEM 編碼憑證鏈結檔案寫入該路徑 (從實體到根目錄排序)。--template
旗標用於設定要用於核發此憑證的憑證範本名稱。指定的範本必須與核發 CA 集區位於相同位置。如要進一步瞭解憑證範本,請參閱「憑證範本和核發政策總覽」。
更改下列內容:
- PROJECT_ID:專案的專屬 ID。
- LOCATION:要求憑證的 CA 集區位置。如需完整地點清單,請參閱「地點」。
- POOL_NAME:CA 集區的專屬 ID。
產生正式版憑證
使用者 prod-dns-requester
現在可以向 CA 集區要求正式版 DNS 憑證。--dns-san=foo.bar.prod.example.com
會將 DNS 類型的 SAN 連同指定值新增至憑證要求。
gcloud
gcloud privateca certificates create prod-dns-1 \
--project=PROJECT_ID \
--issuer-location=LOCATION \
--issuer-pool=POOL_NAME \
--dns-san=foo.bar.prod.example.com \
--generate-key \
--key-output-file=KEY_FILE_NAME \
--cert-output-file=prod_dns_cert.pem \
--template=projects/PROJECT_ID/locations/LOCATION/certificateTemplates/prod-server-tls-template
其中:
--issuer-location
標記可用來設定憑證位置。如需完整清單,請參閱「地點」。--issuer-pool
旗標會設定要求憑證的 CA 集區。--dns-san
旗標用於設定一或多個以半形逗號分隔的 DNS SAN。--generate-key
標記,即可在本機上產生新的 RSA-2048 私密金鑰。--key-output-file
標記用於設定所產生私密金鑰的寫入路徑 (PEM 格式)。--cert-output-file
標記用於設定路徑,系統會將產生的 PEM 編碼憑證鏈結檔案寫入該路徑 (從實體到根目錄排序)。--template
標記用於設定憑證範本名稱,以核發這個憑證。指定的範本必須與核發 CA 集區位於相同位置。如要進一步瞭解憑證範本,請參閱「憑證範本和核發政策總覽」。
產生一般用途的憑證
使用者 blank-check-requester@
可以使用 gcloud privateca certificates create
指令,向 CA 集區要求任何憑證。
如要向 CA 集區要求憑證,可以使用 CA 服務建立的公開/私密金鑰。如要進一步瞭解如何要求憑證,請參閱「要求憑證及查看已核發的憑證」。
清除所用資源
本節說明如何移除 CA 集區的 IAM 政策。
移除特定 IAM 繫結
如要移除 blank-check-requester
使用者的 CA 集區 IAM 條件式繫結,請使用下列 gcloud
指令:
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:blank-check-requester@'
其中:
--role
旗標的值會決定指派給使用者的角色。如要進一步瞭解 CA 服務的 IAM 角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。--member
旗標的值會決定指派角色的使用者。
移除特定 IAM 繫結時,您必須在 gcloud privateca
pools remove-iam-policy-binding
指令中提供與 IAM 繫結相關的所有資訊。角色和成員可能有多個 IAM 繫結,且條件不同。請務必提供與 IAM 繫結相關的所有詳細資料,以免誤刪其他繫結。
如要進一步瞭解 gcloud privateca pools
remove-iam-policy-binding
指令,請參閱 gcloud privateca pools remove-iam-policy-binding。
移除所有 IAM 條件繫結
如要移除 IAM 繫結,可以使用 gcloud privateca pools
remove-iam-policy-binding
指令。移除 IAM 條件式繫結時,您必須提供繫結的所有資訊。使用者和角色可以有多個條件式繫結。如要移除所有條件式繫結,請在 gcloud
指令中使用 --all
旗標。
使用下列 gcloud
指令移除 prod-code-signing-requester
使用者的所有繫結。
gcloud
gcloud privateca pools remove-iam-policy-binding POOL_NAME \
--location=LOCATION \
--role='roles/privateca.certificateRequester' \
--member='user:prod-code-signing-requester@' \
--all
其中:
--role
旗標的值會決定指派給使用者的角色。如要進一步瞭解 CA 服務的 IAM 角色和權限,請參閱「使用身分與存取權管理功能控管存取權」一文。--member
旗標的值會決定獲派角色的使用者。