使用 IAM 控管存取權

本頁面說明憑證授權單位服務的 IAM 角色。

CA 服務使用身分與存取權管理 (IAM) 角色控管存取權。您可以透過 IAM 定義使用者 (身分) 擁有的資源權限 (角色),藉此控管存取權。IAM 角色包含一組權限,可讓使用者對 Google Cloud資源執行特定操作。授予 IAM 角色時,請遵循最低權限原則,保護憑證授權單位服務資源的完整性,並管理 CA 集區和整體公用金鑰基礎架構 (PKI) 的安全性。

如要瞭解如何將 IAM 角色指派給使用者或服務帳戶,請參閱 IAM 說明文件中的「授予、變更及撤銷資源的存取權」一文。

預先定義的角色

下表列出預先定義的 IAM 角色,以及與各角色相關聯的權限:

角色 權限 說明
CA 服務稽核者
roles/privateca.auditor
privateca.caPools.get
privateca.caPools.getIamPolicy
privateca.caPools.list
privateca.certificateAuthorities.list
privateca.certificateAuthorities.get
privateca.certificateTemplates.get
privateca.certificateTemplates.getIamPolicy
privateca.certificateTemplates.list
privateca.certificates.list
privateca.certificates.get
privateca.locations.get
privateca.locations.list
privateca.operations.get
privateca.operations.list
privateca.certificateRevocationLists.list
privateca.certificateRevocationLists.get
privateca.certificateRevocationLists.getIamPolicy
resourcemanager.projects.get
resourcemanager.projects.list
CA 服務稽核員角色具備所有 CA 服務資源的唯讀存取權,可擷取及列出 CA 集區、CA、憑證、撤銷清單、IAM 政策和專案的屬性。建議您將這個角色指派給負責驗證 CA 集區安全性和作業的人員,且這些人員沒有管理服務的日常職責。
CA 服務憑證要求者
roles/privateca.certificateRequester
privateca.certificates.create CA 服務憑證要求者角色可向 CA 集區提交憑證要求。建議您將這個角色授予可信任且獲准要求憑證的人員。

具有這個角色的使用者可以要求任意憑證,但須遵守核發政策。

與 CA 服務憑證管理員角色不同,這個角色無法讓使用者取得或列出新核發的憑證,也無法取得 CA 集區的任何資訊。
CA 服務工作負載憑證要求者
roles/privateca.workloadCertificateRequester
privateca.certificates.createForSelf CA 服務工作負載憑證要求者可透過呼叫端身分要求 CA 服務提供憑證。
CA 服務憑證管理員
roles/privateca.certificateManager
roles/privateca.auditor 的所有權限,加上:
privateca.certificates.create
CA 服務憑證管理員可以向 CA 集區提交憑證核發要求,就像 CA 服務憑證要求者一樣。此外,這個角色也會繼承 CA 服務稽核員角色的權限。建議您將這個角色指派給負責在 CA 集區建立、追蹤及審查憑證要求的人員,例如經理或主要工程師。
CA 服務憑證範本使用者
roles/privateca.templateUser
privateca.certificateTemplates.get
privateca.certificateTemplates.list
privateca.certificateTemplates.use
CA 服務憑證範本使用者可以讀取、列出及使用憑證範本。
CA 服務作業管理員
roles/privateca.caManager
roles/privateca.auditor 的所有權限,加上:
privateca.certificates.update
privateca.caPools.create
privateca.caPools.delete
privateca.caPools.update
privateca.certificateAuthorities.create
privateca.certificateAuthorities.delete
privateca.certificateAuthorities.update
privateca.certificateRevocationLists.update
privateca.certificateTemplates.create
privateca.certificateTemplates.delete
privateca.certificateTemplates.update
privateca.certificates.update
privateca.operations.cancel
privateca.operations.delete
resourcemanager.projects.get
resourcemanager.projects.list
storage.buckets.create
CA 服務作業管理員可以建立、更新及刪除 CA 集區和 CA。這個角色也可以撤銷憑證及建立 Cloud Storage bucket。這個角色也具備 CA 服務稽核員的權限,這個角色的使用者負責在機構中設定及部署 CA 集區,並設定 CA 集區的核發政策。

這個角色無法建立憑證。如要執行這項操作,請使用「CA 服務憑證要求者」、「CA 服務憑證管理員」或「CA 服務管理員」角色。
CA 服務集區讀取者
roles/privateca.poolReader
privateca.caPools.get 具有 CA 服務集區讀取者角色的使用者,可以讀取 CA 服務中的 CA 集區。
CA 服務管理員
roles/privateca.admin
roles/privateca.certificateManagerroles/privateca.caManager 的所有權限,加上:

privateca.*.setIamPolicy
privateca.caPools.use
privateca.operations.cancel
privateca.operations.delete
resourcemanager.projects.get
resourcemanager.projects.list
storage.buckets.create
CA 服務管理員角色會繼承 CA 服務作業管理員和 CA 服務憑證管理員角色的權限。這個角色可以在 CA 服務中執行所有動作。CA 服務管理員可以為 CA 集區設定 IAM 政策,並建立 Cloud Storage bucket。服務建立完成後,建議您盡量不要指派這個角色。擔任這個角色的使用者可執行所有管理作業,包括指派權限給其他使用者,以及在 CA 服務中管理憑證要求。建議您為這個角色帳戶實施特殊控管和存取權,防止未經授權的存取或使用。

CA 服務服務代理角色

提供現有的 Cloud KMS 金鑰或 Cloud Storage bucket 時,必須授予 CA Service Service Agent 服務帳戶 (service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com) 存取相應資源的權限。

如要使用簽署金鑰及讀取公開金鑰,Cloud KMS 必須具備 roles/cloudkms.signerVerifier 權限。roles/viewer,才能監控 Cloud Monitoring 整合的鍵。

如要使用客戶自行管理的加密金鑰 (CMEK) 加密靜態資料,您必須具備 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。服務代理程式即可加密及解密靜態資料。

如果是 Cloud Storage,則需要 roles/storage.objectAdmin 才能將 CA 憑證和 CRL 寫入 bucket。roles/storage.legacyBucketReader 是監控值區的必要條件,才能與 Cloud Monitoring 整合。詳情請參閱「Cloud Storage 的 IAM 角色」。

透過 API 存取服務時,請執行下列指令。

  1. 建立服務帳戶並授予服務代理角色。

    gcloud

    gcloud beta services identity create --service=privateca.googleapis.com --project=PROJECT_ID
    

    其中:

    • PROJECT_ID 是建立 CA 集區的專案專屬 ID。
  2. 使用下列 gcloud 指令,將必要角色授予服務帳戶。

    如果提供現有的 Cloud KMS 金鑰:

    gcloud

    Cloud KMS 簽署金鑰:

      gcloud kms keys add-iam-policy-binding 'KEY_NAME' \
        --keyring='KEYRING_NAME' \
        --location='LOCATION' \
        --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com' \
        --role='roles/cloudkms.signerVerifier'
    
      gcloud kms keys add-iam-policy-binding 'KEY_NAME' \
        --keyring='KEYRING_NAME' \
        --location='LOCATION' \
        --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com' \
        --role='roles/viewer'
    

    Cloud KMS 加密金鑰:

      gcloud kms keys add-iam-policy-binding 'KEY_NAME' \
        --keyring='KEYRING_NAME' \
        --location='LOCATION' \
        --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com' \
        --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'
    

    其中:

    • KEY_NAME」是金鑰的名稱。
    • KEYRING_NAME」是金鑰環的名稱。
    • LOCATION」是您建立金鑰環的 Cloud KMS 位置。
    • PROJECT_NUMBER」是 Google Cloud 專案的專案編號,可包含金鑰。
  3. 使用下列 gcloud 指令,將 roles/storage.objectAdminroles/storage.legacyBucketReader 角色授予服務帳戶。

    如果提供現有的 Cloud Storage bucket:

    gcloud

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin
    

    其中:

    • BUCKET_NAME 是您 Cloud Storage 值區的名稱。
    • PROJECT_NUMBER 是服務帳戶的專屬 ID。
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com \
      --role=roles/storage.legacyBucketReader
    

API 權限

下表列出呼叫者呼叫 CA Service API 中每個方法時必須具備的權限:

權限 說明
privateca.caPools.create 建立憑證授權單位 (CA) 集區。
privateca.caPools.update 更新 CA 集區。
privateca.caPools.list 列出專案中的 CA 集區。
privateca.caPools.get 擷取 CA 集區。
privateca.caPools.delete 刪除憑證授權單位集區。
privateca.caPools.use 使用 CA 集區。
privateca.caPools.getIamPolicy 擷取 CA 集區的 IAM 政策。
privateca.caPools.setIamPolicy 為 CA 集區設定 IAM 政策。
privateca.certificateAuthorities.create 建立 CA。
privateca.certificateAuthorities.delete 排定刪除 CA。
privateca.certificateAuthorities.get 取得 CA 或 CA 憑證簽署要求。
privateca.certificateAuthorities.list 列出專案中的 CA。
privateca.certificateAuthorities.update 更新 CA,包括啟用、啟用、停用及還原 CA。
privateca.certificates.create 可向 CA 服務要求憑證。
privateca.certificates.createForSelf 可透過呼叫端身分要求 CA 服務提供憑證。
privateca.certificates.get 取得憑證及其相關中繼資料。
privateca.certificates.list 列出 CA 中的所有憑證。
privateca.certificates.update 更新憑證的中繼資料,包括撤銷憑證。
privateca.certificateRevocationLists.get 在憑證授權單位 (CA) 中取得憑證撤銷清單 (CRL)。
privateca.certificateRevocationLists.getIamPolicy 取得 CRL 的 IAM 政策。
privateca.certificateRevocationLists.list 列出 CA 中的所有 CRL。
privateca.certificateRevocationLists.setIamPolicy 設定 CRL 的 IAM 政策。
privateca.certificateRevocationLists.update 更新 CRL。
privateca.certificateTemplates.create 建立憑證範本。
privateca.certificateTemplates.get 擷取憑證範本。
privateca.certificateTemplates.list 列出所有憑證範本。
privateca.certificateTemplates.update 更新憑證範本。
privateca.certificateTemplates.delete 刪除憑證範本。
privateca.certificateTemplates.getIamPolicy 取得憑證範本的身分與存取權管理政策。
privateca.certificateTemplates.setIamPolicy 設定憑證範本的身分與存取權管理政策。
privateca.certificateTemplates.use 使用憑證範本。
privateca.operations.cancel 取消長時間執行的作業。
privateca.operations.delete 刪除一個長時間執行的作業。
privateca.operations.get 取得長時間執行的作業。
privateca.operations.list 列出專案中長時間執行的作業。

後續步驟