使用 IAM 进行访问权限控制

本页介绍了 Certificate Authority Service 的 IAM 角色。

CA Service 使用 Identity and Access Management (IAM) 角色 以实现访问权限控制借助 IAM,您可以通过定义谁(身份)对哪些资源具有哪种访问权限(角色)来控制访问权限。IAM 角色 包含一组权限,可让用户在 Google Cloud 上执行特定操作。 资源。在授予 IAM 时遵循最小权限原则 您可以保护 Certificate Authority Service 资源的完整性,并管理 CA 池的安全性以及整个公钥基础架构 (PKI) 的安全性 本身。

如需了解如何向用户或服务账号分配 IAM 角色,请阅读 IAM 文档中的授予、更改和撤消对资源的访问权限

预定义角色

下表列出了预定义的 IAM 角色以及与每个角色关联的权限:

角色 权限 说明
CA Service Auditor
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 Service Auditor 角色拥有对所有 CA 服务资源的只读权限,可以检索和列出 CA 池、CA、证书、吊销列表、IAM 政策和项目的属性。我们建议您将此角色分配给负责验证 CA 池的安全性和操作,并且无需负责管理服务的任何日常职责的人员。
CA 服务证书请求者
roles/privateca.certificateRequester
privateca.certificates.create CA Service Certificate Requester 角色可以向 CA 池提交证书请求。我们建议您将此角色授予获准请求证书的可信人员。

拥有此角色的用户可以请求符合颁发政策的任意证书。

与 CA Service Certificate Manager 角色不同的是,此角色不允许用户获取或列出新颁发的证书,也不允许用户获取任何有关 CA 池的信息。
CA 服务工作负载证书请求者
roles/privateca.workloadCertificateRequester
privateca.certificates.createForSelf CA Service 工作负载证书请求者可以使用调用者的身份向 CA Service 请求证书。
CA Service Certificate Manager
roles/privateca.certificateManager
roles/privateca.auditor的所有权限,外加:
privateca.certificates.create
CA 服务证书管理器可以将证书颁发请求提交到 CA 池,就像 CA 服务证书请求者一样。此外,此角色还会继承 CA Service Auditor 角色的权限。我们建议您将此角色分配给负责创建、跟踪和审核 CA 池中的证书请求的个人,例如管理员或首席工程师。
CA 服务证书模板用户
roles/privateca.templateUser
privateca.certificateTemplates.get
privateca.certificateTemplates.list
privateca.certificateTemplates.use
CA 服务证书模板用户可以读取、列出和使用证书模板。
CA Service Operation Manager
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 Service Operation Manager 可以创建、更新和删除 CA 池和 CA。此角色还可以撤消证书和创建 Cloud Storage 存储桶。它还提供与 CA Service Auditor 相同的功能。在此角色中,个人负责在组织中配置和部署 CA 池,以及配置 CA 池的颁发政策。

此角色不允许创建证书。为此,请使用 CA Service Certificate Requester、CA Service Certificate Manager 或 CA Service Admin 角色。
CA 服务管理员
roles/privateca.admin
roles/privateca.certificateManager的所有权限, 和roles/privateca.caManager,以及:
privateca.*.setIamPolicy
privateca.caPools.use
privateca.operations.cancel
privateca.operations.delete
privateca.resourcemanager.projects.get
privateca.resourcemanager.projects.list
storage.buckets.create
CA Service Admin 角色会继承 CA Service Operation Manager 和 CA Service Certificate Manager 角色的权限。此角色可以在 CA Service 中执行所有操作。CA Service Admin 可以为 CA 池设置 IAM 政策并创建 Cloud Storage 存储分区。我们建议您在服务建立后,尽量不要再分配此角色。在此角色中,个人可以执行管理的所有方面,包括向其他人分配权限和管理 CA Service 中的证书请求。我们建议您对此角色账号实施特殊控制和访问权限,以防止未经授权的访问或使用。

CA Service Service Agent 角色

在创建 CA 期间提供现有 Cloud KMS 签名密钥或 Cloud Storage 存储桶时,必须向 CA 服务代理服务账号 (service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com) 授予对相应资源的访问权限。

对于 Cloud KMS,roles/cloudkms.signerVerifier 必须使用签名密钥并读取公钥。需要roles/viewer才能进行监控 Cloud Monitoring 集成的键。

对于 Cloud Storage,需要 roles/storage.objectAdmin 来写入 存储桶的 CA 证书和 CRL。“roles/storage.legacyBucketReader”现为 监控存储桶以进行 Cloud Monitoring 集成所需的资源。有关 相关信息,请参阅适用于 Cloud Storage 的 IAM 角色

通过 API 访问服务时,执行以下命令。

  1. 创建具有 Service Agent 角色的服务账号。

    gcloud

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

    其中:

    • PROJECT_ID 是在其中创建 CA 池的项目的唯一标识符。
  2. 使用以下 gcloud 命令向您的服务账号授予 roles/cloudkms.signerVerifierroles/viewer 角色。

    如果提供了现有的 Cloud KMS 签名密钥:

    gcloud

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

    其中:

    • CRYPTOKEY_NAME”是您的密钥名称。
    • KEYRING_NAME”是您的密钥环的名称。
    • LOCATION”是您创建密钥环的 Cloud KMS 位置。
    • PROJECT_NUMBER”是您的服务账号的名称。
    gcloud kms keys add-iam-policy-binding 'CRYPTOKEY_NAME' \
      --keyring='KEYRING_NAME' \
      --location='LOCATION' \
      --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-privateca.iam.gserviceaccount.com' \
      --role='roles/viewer'
    
  3. 向您的服务账号授予 roles/storage.objectAdmin 和 使用以下gcloud指定 roles/storage.legacyBucketReader 个角色 命令。

    如果提供了现有的 Cloud Storage 存储分区:

    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 是您的服务账号的唯一标识符。
    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 权限

下表列出了调用方在调用每项服务时必须具备的权限 方法:

权限 说明
privateca.caPools.create 创建证书授权机构 (CA) 池。
privateca.caPools.update 更新 CA 池。
privateca.caPools.list 可以列出项目中的 CA 池。
privateca.caPools.get 检索 CA 池。
privateca.caPools.delete 删除 CA 池。
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 Service 请求证书。
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 获取证书模板的 IAM 政策。
privateca.certificateTemplates.setIamPolicy 为证书模板设置 IAM 政策。
privateca.certificateTemplates.use 使用证书模板。
privateca.operations.cancel 取消长时间运行的操作。
privateca.operations.delete 删除长时间运行的操作。
privateca.operations.get 获取长时间运行的操作。
privateca.operations.list 列出项目中长时间运行的操作。

后续步骤

  • 了解 IAM 如何集中管理 Google Cloud 资源的权限和访问权限范围。
  • 了解如何配置 IAM 政策