管理政策控制項

本教學課程說明如何在 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 集區

如要建立 CA 集區,請按照下列操作說明進行:

  1. 如要建立使用 issuance-policy.yaml 檔案的 CA 集區,請使用下列 gcloud 指令:

    gcloud

    gcloud privateca pools create POOL_NAME --location=LOCATION --tier=ENTERPRISE
    

    其中:

    • LOCATION 是您要建立 CA 集區的位置。如需完整清單,請參閱「地點」。
    • --tier 標記用於指定 CA 集區的層級。如要進一步瞭解層級,請參閱「選取作業層級」。
  2. 如要在新建立的 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
    

    其中:

    • POOL_NAME 是 CA 集區的專屬 ID。
    • LOCATION 是您要建立 CA 集區的位置。如需完整清單,請參閱「地點」。
    • --subject 標記可用來傳遞憑證主體的名稱。
    • --validity 標記會決定 CA 的效期。預設有效期限為 10 年。
    • --max-chain-length 旗標會決定 CA 底下允許的下層 CA 最大深度。
    • --auto-enable 旗標會在 ENABLED 狀態中建立 CA,而不是在 STAGED 狀態中。如要進一步瞭解 CA 狀態,請參閱「CA 狀態」。

設定測試憑證的政策控管

發行政策異動即刻生效。建議您先設定測試政策控制項,再將其用於正式環境。本節說明如何設定測試政策控制項。

測試和正式版 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) 運算式實作。憑證範本也會捨棄憑證要求中指定的主體。

  1. 使用下列 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 控管存取權」。

  1. 建立政策 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 運算式中提供專案編號,也必須在憑證要求中提供專案編號。

  2. 使用下列 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 條件的檔案名稱。
  3. 使用下列 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 控管存取權」。

  1. 建立政策 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"
    
  2. 使用下列 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

  3. 如要新增政策控制項,允許 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'

其中:

更改下列內容:

  • 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@'

其中:

移除特定 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

其中: