允许其他账户中的用户使用CMK - AWS Key Management Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

允许其他账户中的用户使用CMK

您可以允许一个 IAM 账户中的 AWS 用户或角色使用另一个 客户主密钥 账户中的 CMK (AWS)。您可以在创建 CMK 时添加这些权限或更改现有 CMK 的权限。

警告

请谨慎地向委托人授予使用您的 CMKs的权限。如果可能,请尽量遵循最低权限原则。仅向用户授予他们所需的 CMKs 访问权限以执行他们所需的操作。

此外,请谨慎使用任何不熟悉的 CMK,尤其是其他账户中的 CMK。恶意用户可能会向您授予使用其 CMK 获取有关您或您的账户的信息的权限。

有关使用策略来保护您的账户中的资源的信息,请参阅策略的最佳实践IAM

要为其他账户中的用户和角色授予使用CMK的权限,您必须使用两种不同类型的策略:

  • 密钥策略必须为外部账户(或外部账户中的用户和角色)授予使用 CMK 的权限。CMK密钥策略位于拥有CMK的账户中。

  • 外部账户中的 IAM 策略必须将密钥策略权限委派给其用户和角色。这些策略在外部账户中设置,并向该账户中的用户和角色授予权限。

密钥策略确定谁可以访问 CMK。策略确定谁IAM确实有权访问 。CMK密钥策略和 IAM 策略本身都不足够 — 您必须更改两者。

要编辑密钥策略,您可以使用 中的 Policy View (策略视图)AWS 管理控制台 或使用 CreateKeyPutKeyPolicy 操作。有关在创建 CMK 时设置密钥策略的帮助信息,请参阅创建其他账户可以使用的CMKs

有关编辑 IAM 策略时的帮助信息,请参阅 在 IAM 中使用 AWS KMS 策略

有关说明密钥策略和 IAM 策略如何协同工作以允许在其他账户中使用 CMK 的示例,请参阅示例 2:用户代入的角色具有使用其他 CMK 账户中的AWS的权限

您可以在 AWS KMSCMK 日志中查看在 AWS CloudTrail上生成的跨账户 操作。在其他账户中使用 CMKs 的操作将记录在调用方的 账户和 CMK 拥有者账户中。

步骤 1:在本地账户中添加密钥策略声明

的密钥策略是谁可以访问 CMK 以及他们可以执行哪些操作的主要决定因素。CMK密钥策略始终在拥有 CMK 的账户中。与 IAM 策略不同,密钥策略不指定资源。资源是与密钥策略关联的CMK。

要向外部账户授予使用 CMK 的权限,请向密钥策略添加一条指定外部账户的语句。在密钥策略的 Principal 元素中,输入外部账户的 Amazon 资源名称 (ARN)。

当您在密钥策略中指定外部账户时,外部账户中的 IAM 管理员可以使用 IAM 策略来将这些权限委派给外部账户中的任何用户和角色。他们还可以决定用户和角色可以执行在密钥策略中指定的哪些操作。

例如,假设您希望允许账户 444455556666 使用账户 CMK111122223333。为此,请将与以下示例中的策略语句类似的策略语句添加到账户 CMK111122223333 的密钥策略中。此策略语句向外部账户 444455556666 授予在加密操作中使用对称 CMK 的权限。CMKs

{ "Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

您可以在密钥策略中指定特定的外部用户和角色,而不是向外部账户授予权限。但是,这些用户和角色无法使用 CMK,直到外部账户中的 IAM 管理员将适当的 IAM 策略附加到其身份。IAM 策略可以向在密钥策略中指定的所有或部分外部用户和角色授予权限。并且,它们可以允许执行在密钥策略中指定的所有或部分操作。

在密钥策略中指定身份会限制外部账户中的 IAM 管理员可以提供的权限。但是,它使两个账户的策略管理变得更加复杂。例如,假定您需要添加用户或角色。您必须将该身份添加到拥有 CMK 的账户中的密钥策略,并在该身份的账户中创建 IAM 策略。

要在密钥策略中指定特定外部用户或角色,请在 Principal 元素中输入外部账户中的用户或角色的 Amazon 资源名称 (ARN)。

例如,以下示例密钥策略语句允许账户 ExampleRoleExampleUser 中的 444455556666 使用账户 CMK111122223333。此密钥策略语句向外部账户 444455556666 授予在加密操作中使用对称 CMK 的 CMKs 的权限。

{ "Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/ExampleRole", "arn:aws:iam::444455556666:user/ExampleUser" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }
注意

除非您使用条件来限制密钥策略,否则请不要在任何允许权限的关键策略语句中将委托人设置为星号 (*)。星号向每个 AWS 账户中的每个身份授予 CMK 的使用权限,除非另一个策略语句明确拒绝此权限。其他 AWS 账户中的用户只需要他们自己账户中的相应 IAM 权限便能使用 CMK。

您还需要确定您想要向外部账户授予哪些权限。有关 CMKs 的权限列表,请参阅AWS KMS权限

您可以向外部账户授予在CMK加密操作中使用 的权限,并将 CMK 与与 AWS 集成的 AWS KMS 服务结合使用。为此,请使用 密钥用户AWS 管理控制台部分。有关详细信息,请参阅 创建其他账户可以使用的CMKs

要在密钥策略中指定其他权限,请编辑密钥策略文档。例如,您可能希望授予用户解密但不加密的权限,或者查看 CMK 但不使用它的权限。要编辑密钥策略文档,您可以使用 中的 Policy View (策略视图)AWS 管理控制台,或者使用 CreateKeyPutKeyPolicy 操作。

步骤 2:在外部账户中添加 IAM 策略

拥有 CMK 的账户中的密钥策略设置权限的有效范围。但是,外部账户中的用户和角色无法使用 CMK,除非您附加委派这些权限的 IAM 策略,或使用授权来管理对 CMK的访问。IAM 策略在外部账户中设置。

如果密钥策略向外部账户授予权限,则可以将 IAM 策略附加到账户中的任何用户或角色。但是,如果密钥策略向指定的用户或角色授予权限,则 IAM 策略只能将这些权限授予全部或部分指定用户和角色。如果 IAM 策略向其他外部用户或角色授予 CMK 访问权限,则它不起作用。

密钥策略还限制 IAM 策略中的操作。IAM 策略可以委派在密钥策略中指定的所有或部分操作。如果 IAM 策略列出未在密钥策略中指定的操作,则这些权限无效。

以下示例 IAM 策略允许委托人将账户 CMK 中的 111122223333 用于加密操作。要向账户 444455556666 中的用户和角色授予此权限,请向账户 中的用户或角色附加策略444455556666

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUseOfCMKInAccount111122223333", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

请注意有关该策略的以下详细信息:

  • 与密钥策略不同,IAM 策略语句不包含 Principal 元素。在 IAM 策略中,委托人是附加了策略的身份。

  • 策略中的 Resource 元素标识委托人可以使用的 IAM。CMK要指定 CMK,请将其密钥 ARN 添加到 Resource 元素中。

  • 您可以在 CMK 元素中指定多个 Resource。但是,如果您未在 CMKs 元素中指定特定的 Resource,可能会无意中向 授予对超出预期 CMKs 的访问权限。

  • 要允许外部用户将 CMK 与与 集成的 AWS AWS KMS 服务结合使用,您可能需要向密钥策略或 IAM 策略添加权限。有关详细信息,请参阅 将外部 CMKs 与 AWS 服务结合使用

有关使用 IAM 策略的更多信息,请参阅使用 IAM 策略

创建其他账户可以使用的CMKs

当您使用 CreateKey 操作创建 CMK 时,可以使用其 Policy 参数指定一个密钥策略,该策略向外部账户或外部用户和角色授予使用 CMK 的权限。您还必须在外部账户中添加 IAM 策略,以将这些权限委派给此账户的用户和角色,即使在密钥策略中指定了用户和角色也是如此。您可以随时使用 PutKeyPolicy 操作更改密钥策略。

在 CMK中创建AWS 管理控制台时,您还将创建其密钥策略。在 Key Administrators (密钥管理员)Key Users (密钥用户) 部分中选择身份时,AWS KMS 会将这些身份的策略语句添加到 CMK 的密钥策略中。

密钥用户部分还允许您将外部账户添加为密钥用户。


                将外部账户添加到 CMK 的密钥策略的控制台元素。

当您输入外部账户的账户 ID 时,AWS KMS 向密钥策略添加两个语句。此操作仅影响密钥策略。在附加 CMK 策略IAM以向外部账户中的用户和角色授予部分或所有这些权限之前,这些角色无法使用

第一个策略语句向外部账户授予在加密操作中使用 CMK 的权限。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

第二个策略语句允许外部账户在 CMK上创建、查看和撤销授权,但仅限请求来自与 AWS 集成的 AWS KMS 服务时。这些权限允许其他 AWS 服务(如加密用户数据的服务)使用 CMK。

这些权限是为 CMKs 设计的,用于加密 AWS 服务(如 Amazon WorkMail)中的用户数据。这些服务通常使用授权来获取它们代表用户使用 CMK 所需的权限。有关详细信息,请参阅 将外部 CMKs 与 AWS 服务结合使用

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }

如果这些权限不满足您的需求,您可以在控制台策略视图中或使用 PutKeyPolicy 操作编辑这些权限。您可以指定特定的外部用户和角色,而不是向外部账户授予权限。您可以更改策略指定的操作。您可以使用全局和 AWS KMS 策略条件来细化权限。

将外部 CMKs 与 AWS 服务结合使用

您可以向其他账户中的用户授予将您的 CMK 与 AWS KMS 集成的服务一起使用的权限。例如,外部账户中的用户可以使用您的 CMK来加密 Amazon S3 存储桶中的对象加密存储在 AWS Secrets Manager 中的密钥

该密钥策略必须向外部用户或外部用户的账户授予使用 CMK 的权限。此外,您需要将 IAM 策略附加到某个身份,此身份向用户授予使用 AWS 服务的权限。

此外,该服务可能要求用户在密钥策略中具有其他权限。例如,它可能需要在 CMK 上创建、列出和撤销授权的权限。或者,它可能需要特定的 IAM 策略。有关详细信息,请参阅服务的文档。

最后,针对集成服务的 CMKs 中显示的 AWS 管理控制台 列表不会在外部账户中包含 CMKs。即使用户或角色有权使用它们,也是如此。要使用外部账户的 CMK,用户必须输入CMK的 ID 或 ARN。有关详细信息,请参阅该服务的控制台文档。