使用 IAM 进行访问权限控制
本页面介绍了 Certificate Authority Service 的 IAM 角色。
CA 服务使用 Identity and Access Management (IAM) 角色进行访问权限控制。借助 IAM,您可以通过定义谁(身份)对哪些资源具有哪种访问权限(角色)来控制访问权限。IAM 角色包含一组权限,可让用户对 Google Cloud资源执行特定操作。在授予 IAM 角色时遵循最小权限原则,有助于保护 Certificate Authority Service 资源的完整性,并管理 CA 池和整个公钥基础设施 (PKI) 本身的安全性。
如需了解如何向用户或服务账号分配 IAM 角色,请阅读 IAM 文档中的授予、更改和撤消对资源的访问权限。
预定义角色
下表列出了预定义的 IAM 角色以及与每个角色关联的权限:
| 角色 | 权限 | 说明 |
|---|---|---|
CA Service Auditorroles/privateca.auditor |
privateca.caPools.getprivateca.caPools.getIamPolicyprivateca.caPools.listprivateca.certificateAuthorities.listprivateca.certificateAuthorities.getprivateca.certificateTemplates.getprivateca.certificateTemplates.getIamPolicyprivateca.certificateTemplates.listprivateca.certificates.listprivateca.certificates.getprivateca.locations.getprivateca.locations.listprivateca.operations.getprivateca.operations.listprivateca.certificateRevocationLists.listprivateca.certificateRevocationLists.getprivateca.certificateRevocationLists.getIamPolicyresourcemanager.projects.getresourcemanager.projects.list
|
CA Service Auditor 角色具有对所有 CA 服务资源的只读权限,并且可以检索和列出 CA 池、CA、证书、撤消列表、IAM 政策和项目的属性。我们建议您将此角色分配给负责验证 CA 池的安全性和运营情况,但未被分配任何日常职责来管理服务的个人。 |
CA Service Certificate Requesterroles/privateca.certificateRequester |
privateca.certificates.create
|
CA Service Certificate Requester 角色可以向 CA 池提交证书请求。我们建议您将此角色授予获准请求证书的可信个人。 拥有此角色的用户可以请求任意证书,但必须遵守颁发政策。 与 CA Service 证书管理器角色不同,此角色不允许用户获取或列出新颁发的证书,也不允许用户获取有关 CA 池的任何信息。 |
CA Service Workload Certificate Requesterroles/privateca.workloadCertificateRequester |
privateca.certificates.createForSelf
|
CA Service Workload Certificate Requester 可以以调用方的身份从 CA Service 请求证书。 |
CA Service Certificate Managerroles/privateca.certificateManager |
roles/privateca.auditor 中的所有权限,外加:privateca.certificates.create
|
CA Service 证书管理器可以像 CA Service 证书请求者一样,向 CA 池提交证书颁发请求。此外,此角色还继承了 CA 服务审核员角色的权限。我们建议您将此角色分配给负责在 CA 池中创建、跟踪和审核证书请求的个人,例如经理或首席工程师。 |
CA Service Certificate Template Userroles/privateca.templateUser |
privateca.certificateTemplates.getprivateca.certificateTemplates.listprivateca.certificateTemplates.use
|
CA Service Certificate Template User 可以读取、列出和使用证书模板。 |
CA Service Operation Managerroles/privateca.caManager |
roles/privateca.auditor 的所有权限,外加以下权限:privateca.certificates.updateprivateca.caPools.createprivateca.caPools.deleteprivateca.caPools.updateprivateca.certificateAuthorities.createprivateca.certificateAuthorities.deleteprivateca.certificateAuthorities.updateprivateca.certificateRevocationLists.updateprivateca.certificateTemplates.createprivateca.certificateTemplates.deleteprivateca.certificateTemplates.updateprivateca.certificates.updateprivateca.operations.cancelprivateca.operations.deleteresourcemanager.projects.getresourcemanager.projects.liststorage.buckets.create
|
CA Service Operation Manager 可以创建、更新和删除 CA 池和 CA。此角色还可以撤消证书和创建 Cloud Storage 存储分区。它还包括与 CA Service 审核员相同的能力。在此角色中,个人负责在组织中配置和部署 CA 池,以及配置 CA 池的颁发政策。 此角色不允许创建证书。为此,请使用 CA Service Certificate Requester、CA Service Certificate Manager 或 CA Service Admin 角色。 |
CA Service Pool Readerroles/privateca.poolReader |
privateca.caPools.get |
具有 CA Service Pool Reader 角色的用户可以读取 CA Service 中的 CA 池。 |
CA Service Adminroles/privateca.admin |
roles/privateca.certificateManager 和 roles/privateca.caManager 中的所有权限,外加:privateca.*.setIamPolicyprivateca.caPools.useprivateca.operations.cancelprivateca.operations.deleteresourcemanager.projects.getresourcemanager.projects.liststorage.buckets.create
|
CA Service Admin 角色继承了 CA Service Operation Manager 和 CA Service Certificate Manager 角色的权限。此角色可以执行 CA 服务中的所有操作。CA Service 管理员可以为 CA 池设置 IAM 政策并创建 Cloud Storage 存储分区。我们建议您在服务建立后尽量不要再分配此角色。在此角色中,个人可以执行所有方面的管理任务,包括向他人分配权限以及在 CA Service 中管理证书请求。我们建议您对此角色账号实施特殊控制和访问权限,以防止未经授权的访问或使用。 |
CA Service Service Agent 角色
在提供现有的 Cloud KMS 密钥或 Cloud Storage 存储分区时,必须向 CA 服务代理服务账号 (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 写入存储桶。roles/storage.legacyBucketReader 是必需的,用于监控存储桶以实现 Cloud Monitoring 集成。如需了解详情,请参阅适用于 Cloud Storage 的 IAM 角色。
通过 API 访问服务时,请执行以下命令。
创建具有服务代理角色的服务账号。
gcloud
gcloud beta services identity create --service=privateca.googleapis.com --project=PROJECT_ID其中:
- PROJECT_ID 是创建 CA 池的项目的唯一标识符。
使用以下
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 项目的编号。
使用以下
gcloud命令向您的服务账号授予roles/storage.objectAdmin和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 权限
下表列出了调用方在调用 CA Service 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 政策。
- 详细了解客户管理的加密密钥 (CMEK)。