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

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

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

您可以允许 IAM 用户或角色在不同的Amazon账户以使用您的账户中的客户主密钥 (CMK)。跨账户访问需要 CMK 的密钥策略和外部用户账户的 IAM 策略中的权限。

跨账户权限仅对以下操作有效:

如果您向不同账户中的用户授予其他操作的权限,则这些权限无效。例如,如果您在其他账户中给予委托人KMS: 列表键在 IAM 策略中的权限,或者KMS: 调度键删除权限,则用户对资源调用这些操作的尝试仍会失败。

有关在不同帐户中使用 CMK 的详细信息Amazon KMS操作,请参阅跨账户使用 column in the Amazon KMS 权限在其他账户中使用 CMK。还有跨账户使用部分中的每个 API 描述Amazon Key Management ServiceAPI 参考

警告

请谨慎授予委托人使用您的 CMK 的权限。只要有可能,请按照最小特权原理。只允许用户访问其所需操作所需的 CMK。

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

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

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

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

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

关键策略决定谁CAN有权访问 CMK。IAM 策略确定谁确实有权访问 CMK。单独的密钥策略和 IAM 策略都不足够,您必须更改两者。

要编辑密钥策略,可以使用策略视图中的Amazon Web Services Management Console或使用CreateKey或者PutKeyPolicy运算。有关在创建 CMK 时设置密钥策略的帮助信息,请参阅创建其他账户可以使用的 CMK

有关编辑 IAM 策略时的帮助信息,请参阅将 IAM 策略与Amazon KMS

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

您可以查看结果的跨账户Amazon KMS在 CMK 上的操作Amazon CloudTrail日志。在其他帐户中使用 CMK 的操作将记录在呼叫者的帐户和 CMK 所有者的帐户中。

第 1 步:在本地账户中添加密钥策略语句

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

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

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

只有在承载 CMK 及其密钥策略的区域中启用了外部帐户时,授予给外部帐户及其委托人的权限才有效。有关默认情况下未启用的区域(“选择加入区域”)的信息,请参阅管理 Amazon Web Services 区域 中的Amazon一般参考

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

{ "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)。

例如,以下示例密钥策略语句允许账户 444455556666 中的 ExampleRole 和 ExampleUser 使用账户 111122223333 中的 CMK。此密钥策略语句授权外部账户 444455556666 在加密操作中使用对称 CMK 的 CMK。

{ "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": "*" }
注意

除非您使用条件限制密钥策略,否则不要将承担者设置为允许权限的任何键策略语句中的星号 (*)。星号给出每个 Amazon Web Services 账户 权限使用 CMK,除非另一个策略声明明确拒绝它。其他用户 Amazon Web Services 账户 只需要他们自己的账户中相应的 IAM 权限才能使用 CMK。

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

您可以向外部账户授予权限以便在加密操作中使用 CMK,并将 CMK 和与 Amazon KMS 集成的 Amazon 服务一起使用。要做到这一点,请使用主要用户的 部分Amazon Web Services Management Console。有关详细信息,请参阅创建其他账户可以使用的 CMK

要在密钥策略中指定其他权限,请编辑密钥策略文档。例如,您可能希望授予用户解密但不加密的权限,或者查看 CMK 但不使用 CMK 的权限。要编辑密钥策略文档,您可以使用策略视图中的Amazon Web Services Management Console或CreateKey或者PutKeyPolicy运算。

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

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

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

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

以下示例 IAM 策略语句允许委托人使用账户 111122223333 中的 CMK 执行加密操作。将此权限授予帐户中的用户和角色444455556666附加策略到帐户中的用户或角色444455556666

{ "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元素标识委托人可以使用的 CMK。要指定 CMK,请将其键 ARN 添加到 Resource 元素中。

  • 您可以在 Resource 元素中指定多个 CMK。但是,如果您没有在 Resource 元素中指定特定的 CMK,您可能会无意中比预期授予针对更多 CMK 的权限。

  • 要允许外部用户将 CMK 和Amazon与Amazon KMS、您可能需要向密钥策略或 IAM 策略添加权限。有关详细信息,请参阅允许将外部 CMK 与Amazon服务

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

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

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

当您在 Amazon Web Services Management Console中创建 CMK 时,还会创建其密钥策略。在密钥管理员密钥用户部分中选择身份时,Amazon KMS 会将这些身份的策略语句添加到 CMK 的密钥策略中。

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


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

当您输入外部账户的账户 ID 时,Amazon 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 上创建、查看和撤消授权,但仅限请求来自Amazon服务,与Amazon KMS。这些权限允许其他 Amazon 服务(例如加密用户数据的服务)使用 CMK。

这些权限是为 CMK 设计的,这些 CMK 在Amazon服务,例如Amazon WorkMail。这些服务通常使用授权来获取以用户名义使用 CMK 所需的权限。有关详细信息,请参阅允许将外部 CMK 与Amazon服务

{ "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" } } }

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

允许将外部 CMK 与Amazon服务

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

密钥策略必须向外部用户或外部用户的账户授予使用 CMK 的权限。此外,您需要将 IAM 策略附加到某个身份,此身份向用户授予使用Amazon服务。此服务还可能要求用户在密钥策略或 IAM 策略中具有其他权限。有关详细信息,请参阅服务的文档。

在其他账户中使用 CMK

如果您有权限在其他 Amazon Web Services 账户 ,您可以在Amazon Web Services Management Console、Amazon开发工具包Amazon CLI, 和Amazon Tools for PowerShell。

要在 shell 命令或 API 请求中识别其他账户中的 CMK,请使用以下密钥标识符

如果您只输入密钥 ID 或别名,Amazon假定 CMK 在您的账户中。

这些区域有:Amazon KMS控制台不会在其他帐户中显示 CMK,即使您有权使用它们。此外,在其他控制台中显示的 CMK 的列表Amazon服务不包括其他账户中的 CMK。在控制台中指定外部 CMKAmazon服务时,您必须输入 CMK 的密钥 ARN。有关详细信息,请参阅该服务的控制台文档。