在 Cloud KMS 中,资源以层次结构的形式组织。此层次结构可帮助您以不同的粒度级别管理和授予对资源的访问权限。密钥包含在密钥环中,而密钥环位于项目中。项目中也存在 EKM 连接。项目可以进一步组织到文件夹或组织中。
本主题详细介绍 Cloud KMS 中的资源层次结构。如需从整体上详细了解 Google Cloud 资源,请参阅资源层次结构。
资源层次结构
IAM 角色的范围因授予该角色的资源层次结构级层而异。下表显示了在层次结构中的不同级层中,由 Cloud KMS CryptoKey Encrypter 角色 (roles/cloudkms.cryptoKeyEncrypter
) 授予的有效功能。
您可以管理对密钥或密钥环的访问权限,但不能管理对各个密钥版本的访问权限。
资源层次结构 | 功能 |
---|---|
组织 | 使用组织内所有项目中的所有密钥进行加密 |
文件夹 | 使用文件夹内所有项目中的所有密钥进行加密 |
项目 | 使用项目中的所有密钥进行加密 |
密钥环 | 使用密钥环中的所有密钥进行加密 |
密钥 | 仅使用该密钥进行加密 |
安全原则
IAM 有助于强制执行职责分离和最小权限的相互关联的安全原则:
强制执行职责分离原则时,任何单个成员都没有完成关键业务功能所需的所有访问权限。例如,银行账号只有在账号持有人亲身在场并发起交易时,才能从账户中提取资金。
当您强制执行最小权限原则时,成员仅具有完成该成员的特定业务职能所需的最小访问权限级别。例如,银行出纳员不会自动获得批准客户贷款的权限。
预定义角色
IAM 提供的预定义角色可以授予每种 Google Cloud 资源的访问权限。如果没有能满足您需求的预定义角色,您可以创建自定义角色。
IAM 为 Cloud KMS 提供以下预定义角色:
Role | Permissions |
---|---|
Cloud KMS Admin( Provides access to Cloud KMS resources, except for access to restricted resource types and cryptographic operations. Lowest-level resources where you can grant this role:
|
|
Cloud KMS Autokey Admin( Enables management of AutokeyConfig. |
|
Cloud KMS Autokey User( Grants ability to use KeyHandle resources. |
|
Cloud KMS CryptoKey Decrypter( Provides ability to use Cloud KMS resources for decrypt operations only. Lowest-level resources where you can grant this role:
|
|
Cloud KMS CryptoKey Decrypter Via Delegation( Enables Decrypt operations via other Google Cloud services |
|
Cloud KMS CryptoKey Encrypter( Provides ability to use Cloud KMS resources for encrypt operations only. Lowest-level resources where you can grant this role:
|
|
Cloud KMS CryptoKey Encrypter/Decrypter( Provides ability to use Cloud KMS resources for encrypt and decrypt operations only. Lowest-level resources where you can grant this role:
|
|
Cloud KMS CryptoKey Encrypter/Decrypter Via Delegation( Enables Encrypt and Decrypt operations via other Google Cloud services |
|
Cloud KMS CryptoKey Encrypter Via Delegation( Enables Encrypt operations via other Google Cloud services |
|
Cloud KMS Crypto Operator( Enables all Crypto Operations. |
|
Cloud KMS EkmConnections Admin( Enables management of EkmConnections. |
|
Cloud KMS Expert Raw AES-CBC Key Manager( Enables raw AES-CBC keys management. |
|
Cloud KMS Expert Raw AES-CTR Key Manager( Enables raw AES-CTR keys management. |
|
Cloud KMS Expert Raw PKCS#1 Key Manager( Enables raw PKCS#1 keys management. |
|
Cloud KMS Importer( Enables ImportCryptoKeyVersion, CreateImportJob, ListImportJobs, and GetImportJob operations |
|
Cloud KMS Protected Resources Viewer( Enables viewing protected resources. |
|
Cloud KMS CryptoKey Public Key Viewer( Enables GetPublicKey operations |
|
Cloud KMS CryptoKey Signer( Enables Sign operations |
|
Cloud KMS CryptoKey Signer/Verifier( Enables Sign, Verify, and GetPublicKey operations |
|
Cloud KMS CryptoKey Verifier( Enables Verify and GetPublicKey operations |
|
Cloud KMS Viewer( Enables Get and List operations. |
|
自定义角色
除了预定义角色之外,您还可以创建自定义角色。通过自定义角色,您可以授予角色执行给定任务所需的最低权限,以强制执行最小权限原则。
自定义角色包含 IAM 参考文档中列出的一项或多项权限。与 Cloud Key Management Service API 相关的权限以字符串 cloudkms
开头。如需了解详情,请参阅自定义角色中的权限支持级别。
如需了解调用特定 Cloud Key Management Service API 方法所需的权限,请参阅该方法的 API 参考文档。
在 Cloud KMS 中管理访问权限的一般准则
我们建议您避免使用项目级基本角色,例如 owner
、editor
和 viewer
。这些角色并未将管理密钥的能力与使用密钥进行加密操作的能力分开,因此不建议在生产环境中使用。请改为使用预定义角色或创建符合业务需求的自定义角色。
以下示例有助于说明一些良好的安全准则:
对于大型或复杂的组织,您可能会决定使用如下方法:
- 向 IT 安全团队成员授予所有项目的 Cloud KMS Admin 角色 (
roles/cloudkms.admin
)。如果不同的团队成员处理密钥生命周期的不同方面,您可为这些团队成员授予更精细的角色,例如 Cloud KMS Importer 角色 (roles/cloudkms.importer
)。 - 将 Cloud KMS Encrypter / Decrypter 角色 (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) 授予读取或写入加密数据的用户或应用。 - 将 Cloud KMS Public Key Viewer 角色 (
roles/cloudkms.publicKeyViewer
) 授予需要查看用于非对称加密的密钥公开部分的用户或应用。 - 创建符合您业务需求的预定义角色。例如,同一用户可能需要监控项目的配额以及查看日志数据。
- 向 IT 安全团队成员授予所有项目的 Cloud KMS Admin 角色 (
对于具有简单安全要求的小型组织,您可能会选择较简单的方法:授予广泛的角色,例如 Organization Admin (
roles/resourcemanager.organizationAdmin
)。但是,此方法可能无法随着您不断提高的要求而调整。请考虑将密钥托管在独立的 Google Cloud 项目中,使其不受受这些受密钥保护的数据影响。在一个项目中具有基本或高特权的角色(例如
editor
)的用户不能使用此角色授予另一个项目中的密钥的未经授权访问权限。避免向任何成员授予
owner
角色。如果没有owner
角色,则项目中的任何成员都不能既创建密钥又使用它来解密数据或进行签名,除非将这些权限中的每一项都授予该成员。如需在授予广泛的管理访问权限的同时不授予加密或解密的能力,请改为授予 Cloud KMS Admin 角色 (roles/cloudkms.admin
)。如需限制对加密数据(例如客户数据)的访问权限,您可以限制哪些人可以访问密钥,以及哪些人可以使用密钥进行解密。如有必要,您可以创建精细的自定义角色来满足您的业务需求。
检查权限
对于可设置精细 IAM 权限的每个 Cloud KMS 对象类型,该对象具有 testIamPermissions
方法。testIamPermissions
方法会返回调用方已经为该对象授予的一组权限。
- 对于密钥环,您可以调用
cloudkms.keyRings.testIamPermissions
方法。 - 对于密钥,您可以调用
cloudkms.cryptoKeys.testIamPermissions
方法。 - 对于密钥导入作业,您可以调用
cloudkms.keyRings.importJobs.testIamPermissions
方法。 - 对于 EKM 连接,您可以调用
cloudkms.ekmConnections.testIamPermissions
方法。
您无法对密钥版本设置 IAM 权限,因此 CryptoKeyVersion
对象类型没有此方法。
对象的 testIamPermissions
方法会返回 TestIamPermissionsResponse
。
如需查看调用 testIamPermissions
方法的示例,请参阅 IAM 文档中有关测试权限的文档。
后续步骤
- 了解 IAM 如何集中管理 Google Cloud 资源的权限和访问权限范围。
- 了解不同类型的 Cloud KMS 对象。