使用调查发现检索敏感数据样本的配置选项和要求 - Amazon Macie

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

使用调查发现检索敏感数据样本的配置选项和要求

您可以配置并使用 Amazon Macie 来检索和显示 Macie 在单独的调查发现中报告的敏感数据样本。检索和显示某项调查发现的敏感数据样本时,Macie 会使用相应敏感数据调查发现结果中的数据来从受影响的 Amazon Simple Storage Service(Amazon S3)对象中查找敏感数据。然后,Macie 从受影响的对象中提取这些事件样本。Macie 使用您指定的 AWS Key Management Service (AWS KMS) 密钥对提取数据进行加密,将加密的数据临时存储至缓存,然后返回调查发现中的数据以进行查找。解压缩和加密后不久,Macie 会从缓存中永久删除数据,除非临时需要额外保留以解决操作问题。

Macie 不会使用您账户的 Macie 服务相关角色来查找、检索、加密或显示受影响 S3 对象中的敏感数据样本,而是使用您为账户配置的设置和资源。在 Macie 中配置这些设置时,需要指定访问受影响的 S3 对象的方式。您还可以指定用来加密样本的 AWS KMS key。您可在当前开放 Macie 服务的所有 AWS 区域配置这些设置,亚太地区(大阪)和以色列(特拉维夫)区域除外。

您可以通过两种方法来访问受影响的 S3 对象并从中检索敏感数据样本。您可以将 Macie 配置为使用 AWS Identity and Access Management(IAM)用户凭证或代入 IAM 角色:

  • 使用 IAM 用户凭证 – 选择此选项后,您账户中的每个用户都将使用自己的 IAM 身份来查找、检索、加密和显示样本。这意味着,如果允许用户访问必要的资源和数据以及执行必要的操作,用户将可以检索和显示调查发现的敏感数据样本。

  • 代入 IAM 角色 – 选择此选项后,您可以创建一个 IAM 角色来将访问权限委派给 Macie。您还需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。然后在您账户中的用户选择查找、检索、加密和显示某个调查发现的敏感数据样本时,Macie 将代入该角色。

这两种配置可以用于任何类型的 Macie 账户,例如组织的委派 Macie 管理员帐户、组织中的 Macie 成员账户或独立的 Macie 账户。

以下主题说明了有助于确定如何为账户配置设置和资源的相关选项、要求和注意事项。这包括要附加到 IAM 角色的信任和权限策略。有关可用于检索和显示敏感数据样本的更多建议和策略示例,请参阅《AWS 安全博客》中的 How to use Amazon Macie to preview sensitive data in S3 buckets

确定要使用的访问方法

在确定哪种配置最适合您的 AWS 环境时,一个关键的考量因素是您的环境是否包含作为组织进行集中管理的多个 Amazon Macie 账户。如果您是组织的委派 Macie 管理员,则建议将 Macie 配置为代入 IAM 角色,这样可以简化组织中账户从受影响的 S3 对象中检索敏感数据样本的流程。使用这种方法时,您需要在自己的管理员账户中创建一个 IAM 角色。您还需要在每个相关成员账户中创建一个 IAM 角色。管理员账户中的角色将访问权限委派给 Macie。成员账户中的角色会将跨账户存取权限委派给管理员账户中的角色。如果实施了角色链,则可以使用角色链来访问成员账户的受影响的 S3 对象。

此外还要考虑默认情况下谁可以直接访问具体的调查发现。要检索和显示调查发现的敏感数据样本,用户首先要有该调查发现的访问权限:

  • 敏感数据发现作业 – 仅创建作业的账户才能访问该作业生成的调查发现。如果您拥有 Macie 管理员账户,则可以配置一个作业来分析组织中任何账户的 S3 存储桶中对象。因此,您的任务可能会生成成员账户所拥有存储桶中的对象的调查发现。如果您有成员账户或独立的 Macie 账户,则可以配置作业以仅分析您的账户所拥有存储桶中的对象。

  • 自动敏感数据发现 – 只有 Macie 管理员账户才能访问自动发现功能为组织中的账户生成的调查发现。成员账户无法访问这些调查发现。如果您拥有独立的 Macie 账户,则只能访问自动发现功能为自己的账户生成的调查发现。

如果您计划使用 IAM 角色来访问受影响的 S3 对象,则还要考虑以下几点:

  • 要查找对象中的敏感数据出现频次,必须将调查发现的相应敏感数据发现结果存储在 Macie 使用 HMAC 散列消息认证码 AWS KMS key 签名的 S3 对象中。Macie 必须要能够验证敏感数据发现结果的完整性和真实性。否则,Macie 不会代入该 IAM 角色来检索敏感数据样本。这是一项额外的防护机制,可限制对账户的 S3 对象中数据的访问权限。

  • 要检索使用客户自主管理型 AWS KMS key 加密的对象中的敏感数据样本,必须要允许该 IAM 角色使用该密钥解密数据。更具体地说,该密钥的策略必须允许该角色执行 kms:Decrypt 操作。对于其他类型的服务器端加密,无需额外的权限或资源即可解密受影响的对象。有关更多信息,请参阅解密受影响的 S3 对象

  • 要检索其他账户的对象中的敏感数据样本,您当前必须是该账户在相应 AWS 区域中的委派 Macie 管理员。此外:

    • 当前必须在相应的区域为该成员账户启用 Macie。

    • 成员账户必须有一个 IAM 角色,用来向您的 Macie 管理员账户中的 IAM 角色委派跨账户存取权限。您的 Macie 管理员账户和该成员账户中的角色名称必须相同。

    • 在成员账户中,该 IAM 角色的信任策略必须包含一个正确指定您配置的外部 ID 的条件。此 ID 是一个唯一的字母数字字符串,由 Macie 在您为 Macie 管理员账户配置设置后自动生成。有关信任策略中的外部 ID 的信息,请参阅《AWS Identity and Access Management IAM 用户》指南中的 如何在向第三方授予对 AWS 资源的访问权时使用外部 ID

    • 如果成员账户中的 IAM 角色满足 Macie 的所有要求,则该成员账户无需配置和启用 Macie 设置,即可让您从其账户的对象中检索敏感数据样本。Macie 仅使用您的 Macie 管理员账户中的设置和 IAM 角色以及成员账户中的 IAM 角色。

      提示

      如果您的账户属于某个大型组织,则建议使用 AWS CloudFormation 模板和堆栈集来为组织中的成员账户预置和管理 IAM 角色。有关创建和使用模板及堆栈集的信息,请参阅 AWS CloudFormation 用户指南

      要查看并选择下载可以作为起点使用的 CloudFormation 模板,您可以使用 Amazon Macie 控制台。在控制台的导航窗格中,在设置下,选择显示样本。选择编辑,然后选择查看成员角色权限和 CloudFormation 模板

本节的后续主题介绍了每种配置类型的更多详细信息和注意事项。对于 IAM 角色,这包括要附加到角色的信任和权限策略。如果您不确定哪种配置最适合您的环境,请向您的 AWS 管理员寻求帮助。

使用 IAM 用户凭证访问受影响的 S3 对象

如果您将 Amazon Macie 配置为使用 IAM 用户凭证来检索敏感数据样本,则您的 Macie 账户中的每个用户都将使用自己的 IAM 身份来查找、检索、加密和显示具体调查发现的样本。这意味着,如果允许用户的 IAM 身份访问必要的资源和数据以及执行必要的操作,用户将可以检索和显示调查发现的敏感数据样本。所有必需的操作都 已登录AWS CloudTrail

要检索和显示特定调查发现的敏感数据样本,必须要允许用户访问下列数据和资源:发现结果、相应的敏感数据发现结果、受影响的 S3 存储桶以及受影响的 S3 对象。如果适用,还必须允许用户使用用于加密受影响对象的 AWS KMS key,以及您为 Macie 配置的用于加密敏感数据样本的 AWS KMS key。如果任何 IAM policy、资源策略或其他权限设置拒绝提供必要的访问权限,则该用户将无法检索和显示该调查发现的样本。

要设置此类配置,请完成以下常规任务:

  1. 确认您已配置了用于存储敏感数据发现结果的存储库。

  2. 配置用来加密敏感数据样本的 AWS KMS key。

  3. 确认您拥有在 Macie 中配置这些设置的权限。

  4. 在 Macie 中配置并启用这些设置。

有关执行这些任务的信息,请参阅 配置 Amazon Macie 来使用调查发现检索和显示敏感数据样本

代入 IAM 角色来访问受影响的 S3 对象

要将 Amazon Macie 配置为通过代入 IAM 角色来检索敏感数据样本,首先需要创建一个向 Macie 委派访问权限的 IAM 角色。需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。当 Macie 账户中的用户随后选择检索和显示某项调查发现的敏感数据样本时,Macie 将代入该角色来检索受影响 S3 对象中的样本。仅当用户选择检索和显示某项调查发现的样本时,Macie 才会代入该角色。Macie 会使用 AssumeRole AWS Security Token Service(AWS STS)API操作来代入该角色。所有必需的操作都 已登录AWS CloudTrail

要检索和显示特定调查发现的敏感数据样本,必须允许用户访问该调查发现、相应的敏感数据发现结果以及您为 Macie 配置的用于加密敏感数据样本的 AWS KMS key。该 IAM 角色必须允许 Macie 访问受影响的 S3 存储桶和受影响的 S3 对象。如果适用,还必须允许该角色使用用于加密受影响对象的 AWS KMS key。如果任何 IAM policy、资源策略或其他权限设置拒绝提供必要的访问权限,则该用户将无法检索和显示该调查发现的样本。

要设置此类配置,请完成以下常规任务。如果您拥有组织中的成员帐户,请联系您的 Macie 管理员以确定是否能够以及如何配置账户的设置和资源。

  1. 定义以下内容:

    • 您希望 Macie 代入的 IAM 角色的名称。如果您的账户属于某个组织,则对于该组织的委派 Macie 管理员账户和每个相关成员账户,该名称必须相同。否则,Macie 管理员将无法访问相关成员账户的受影响的 S3 对象。

    • 要附加到该 IAM 角色的 IAM 权限策略的名称。如果您的账户属于某个组织,我们建议您为该组织中的每个相关成员账户使用相同的策略名称。这可以简化成员账户中的角色预置和管理过程。

  2. 确认您已配置了用于存储敏感数据发现结果的存储库。

  3. 配置用来加密敏感数据样本的 AWS KMS key。

  4. 确认您拥有在 Macie 中创建 IAM 角色和配置这些设置的权限。

  5. 如果您是组织的委派 Macie 管理员或拥有独立的 Macie 账户:

    1. 为您的账户创建并配置 IAM 角色。需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。有关这些要求的详细信息,请参阅 下一个主题

    2. 在 Macie 中配置并启用这些设置。然后,Macie 会为该配置生成一个外部 ID。如果您是某个组织的 Macie 管理员,请记下此 ID。您必须在每个相关成员账户中为该 IAM 角色的信任策略指定此 ID。

  6. 如果您拥有某个组织的成员账户:

    1. 向您的 Macie 管理员索要将在您的账户中为该 IAM 角色的信任策略指定的外部 ID。此外还需要确认该 IAM 角色的名称以及要创建的权限策略。

    2. 为您的账户创建并配置 IAM 角色。需要确保该角色的信任和权限策略满足 Macie 管理员代入该角色的所有要求。有关这些要求的详细信息,请参阅 下一个主题

    3. (可选)如果需要从自己账户中的受影响 S3 对象检索和显示敏感数据样本,请在 Macie 中配置并启用这些设置。如果您希望 Macie 通过代入某个 IAM 角色来检索样本,请首先在您的账户中额外创建和配置一个 IAM 角色。确保此额外角色的信任和权限策略满足 Macie 代入该角色的所有要求。然后在 Macie 中配置这些设置并指定此额外角色的名称。有关该角色的策略要求的详细信息,请参阅 下一个主题

有关执行这些任务的信息,请参阅 配置 Amazon Macie 来使用调查发现检索和显示敏感数据样本

配置 IAM 角色以访问受影响的 S3 对象

要使用 IAM 角色来访问受影响的 S3 对象,首先需要创建并配置一个向 Amazon Macie 委派访问权限的角色。需要确保该角色的信任和权限策略满足 Macie 代入该角色的所有要求。具体操作步骤取决于您拥有的 Macie 账户的类型。

以下部分详细介绍了对于每种类型的 Macie 账户,需要附加到 IAM 角色的信任和权限策略。选择与您所拥有账户的类型对应的部分。

注意

如果您拥有某个组织的成员账户,则可能需要为您的账户创建和配置两个 IAM 角色:

  • 要允许您的 Macie 管理员从您账户中的受影响 S3 对象检索和显示敏感数据样本,请创建并配置管理员账户可以代入的角色。要了解这些详细信息,请选择 Macie 成员账户部分。

  • 要从您自己账户中的受影响 S3 对象检索和显示敏感数据样本,请创建并配置 Macie 可以代入的角色。要了解这些详细信息,请选择独立 Macie 账户部分。

在创建和配置任何一个 IAM 角色之前,请首先联系您的 Macie 管理员,以确定您账户的适当配置。

有关使用 IAM 创建角色的详细信息,请参阅《AWS Identity and Access Management 用户指南》中的 使用自定义信任策略创建角色

如果您是某个组织的委派 Macie 管理员,请首先使用 IAM policy 编辑器为该 IAM 角色创建权限策略。该策略应如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RetrieveS3Objects", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "*" ] }, { "Sid": "AssumeMacieRevealRoleForCrossAccountAccess", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::*:role/IAMRoleName" } ] }

其中 IAMRoleName 是 Macie 从组织的账户中受影响的 S3 对象检索敏感数据样本时要代入的 IAM 角色的名称。将该值替换为您正在为您的账户创建,并且计划为组织中相关成员账户创建的角色的名称。对于 Macie 管理员账户与每个相关成员账户,该名称必须相同。

注意

在前面的权限策略中,第一条语句中的 Resource 元素使用了通配符(*)。这将允许附加的 IAM 实体从组织拥有的所有 S3 存储桶中检索对象。要仅允许访问特定的存储桶,请将通配符替换为每个存储桶的 Amazon 资源名称(ARN)。例如,要仅允许访问名为 DOC-EXAMPLE-BUCKET 的存储桶中的对象,请将该元素更改为:

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"

您还可以将访问范围限定为个别账户的特定 S3 存储桶中的对象。要实现此目的,请在每个相关账户中在该 IAM 角色的权限策略的 Resource 元素中指定存储桶 ARN。有关更多信息和示例,请参阅《IAM 用户指南》AWS Identity and Access Management中的 IAM JSON 策略元素:Resource

为该 IAM 角色创建权限策略后,创建并配置该角色。如果使用 IAM 控制台执行此操作,则对于该角色的可信实体类型,请选择自定义信任策略。对于为该角色定义可信实体的信任策略,请指定以下内容。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMacieReveal", "Effect": "Allow", "Principal": { "Service": "reveal-samples.macie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "accountID" } } } ] }

其中,accountID 是您的 AWS 账户的账户 ID。请将该值替换为您的 12 位账户 ID。

在前面的信任策略中:

  • Principal 元素指定了 Macie 在从受影响的 S3 对象 reveal-samples.macie.amazonaws.com 检索敏感数据样本时将使用的服务主体。

  • Action 元素指定了允许该服务主体执行的操作,即 AssumeRole AWS Security Token Service(AWS STS)API 操作。

  • Condition 元素定义了一个使用 aws:SourceAccount 全局条件上下文键的条件。该条件决定了可以执行指定操作的账户。在此例中,该条件只允许 Macie 为指定账户(accountID)代入该角色。该条件有助于防止 Macie 在与 AWS STS 进行事务处理时被用作 混淆代理

为 IAM 角色定义信任策略后,请将权限策略附加到该角色。这应是您在开始创建角色之前就已经创建的权限策略。然后在 IAM 中完成剩余的步骤以完成角色的创建和配置。完成后,在 Macie 中配置并启用设置

如果您拥有 Macie 成员账户,并且希望允许您的 Macie 管理员从账户中的受影响 S3 对象检索和显示敏感数据样本,请首先要求您的 Macie 管理员提供以下信息:

  • 要创建的 IAM 角色的名称。对于您的账户和组织的 Macie 管理员账户,该名称必须相同。

  • 要附加到该角色的 IAM 权限策略的名称。

  • 要在信任策略中为该角色指定的外部 ID。该 ID 必须是 Macie 为您的 Macie 管理员配置生成的外部 ID。

收到这些信息后,使用 IAM policy 编辑器为该角色创建权限策略。该策略应如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RetrieveS3Objects", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "*" ] } ] }

前述权限策略将允许附加的 IAM 实体从您账户的所有 S3 存储桶中检索对象。这是因为,策略中的 Resource 元素使用了通配符(*)。要仅允许访问特定的存储桶,请将通配符替换为每个存储桶的 Amazon 资源名称(ARN)。例如,要仅允许访问名为 DOC-EXAMPLE-BUCKET2 的存储桶中的对象,请将该元素更改为:

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*"

有关更多信息和示例,请参阅《IAM 用户指南》AWS Identity and Access Management中的 IAM JSON 策略元素:Resource

为该 IAM 角色创建权限策略后,请创建该角色。如果使用 IAM 控制台创建该角色,则对于该角色的可信实体类型,请选择自定义信任策略。对于为该角色定义可信实体的信任策略,请指定以下内容。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMacieAdminRevealRoleForCrossAccountAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::administratorAccountID:role/IAMRoleName" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "externalID", "aws:PrincipalOrgID": "${aws:ResourceOrgID}" } } } ] }

在前面的策略中,请将占位符值替换为适合您的 AWS 环境的值,其中:

  • administratorAccountID 是 Macie 管理员账户的 12 位账户 ID。

  • IAMRoleName 是该 IAM 角色在 Macie 管理员账户中的名称。这应是 Macie 管理员提供的名称。

  • externalID 是 Macie 管理员提供的外部 ID。

通常,信任策略将允许您的 Macie 管理员代入该角色,从而从您账户的受影响 S3 对象中检索和显示敏感数据样本。Principal 元素指定了 Macie 管理员账户中的 IAM 角色的 ARN。这是 Macie 管理员用来检索和显示组织账户中的敏感数据样本的角色。Condition 块定义了两个条件,这些条件进一步确定了谁可以代入该角色:

  • 第一个条件指定了组织的配置所独有的外部 ID。要了解有关外部 ID 的更多信息,请参阅《AWS Identity and Access Management 用户指南》中的 如何在向第三方授予对 AWS 资源的访问权时使用外部 ID

  • 第二个条件使用 aws:PrincipalOrgID 全局条件上下文键。该键的值是一个动态变量,表示组织在 AWS Organizations(${aws:ResourceOrgID})中的唯一标识符。该条件将访问范围限定仅允许属于 AWS Organizations 中同一组织的账户访问。如果通过在 Macie 中接受邀请加入您的组织,则请从策略中移除此条件。

为 IAM 角色定义信任策略后,请将权限策略附加到该角色。这应是您在开始创建角色之前就已经创建的权限策略。然后在 IAM 中完成剩余的步骤以完成角色的创建和配置。请勿在 Macie 中配置和输入该角色的设置。

如果您拥有独立的 Macie 账户或 Macie 成员账户,并且想要从自己账户中的受影响 S3 对象中检索和显示的敏感数据样本,请首先使用 IAM policy 编辑器为该 IAM 角色创建权限策略。该策略应如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RetrieveS3Objects", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "*" ] } ] }

在前面的权限策略中,Resource 元素使用了通配符(*)。这将允许附加的 IAM 实体您账户的所有 S3 存储桶中检索对象。要仅允许访问特定的存储桶,请将通配符替换为每个存储桶的 Amazon 资源名称(ARN)。例如,要仅允许访问名为 DOC-EXAMPLE-BUCKET3 的存储桶中的对象,请将该元素更改为:

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET3/*"

有关更多信息和示例,请参阅《IAM 用户指南》AWS Identity and Access Management中的 IAM JSON 策略元素:Resource

为该 IAM 角色创建权限策略后,请创建该角色。如果使用 IAM 控制台创建该角色,则对于该角色的可信实体类型,请选择自定义信任策略。对于为该角色定义可信实体的信任策略,请指定以下内容。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowMacieReveal", "Effect": "Allow", "Principal": { "Service": "reveal-samples.macie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "accountID" } } } ] }

其中,accountID 是您的 AWS 账户的账户 ID。请将该值替换为您的 12 位账户 ID。

在前面的信任策略中:

  • Principal 元素指定了 Macie 在从受影响的 S3 对象 reveal-samples.macie.amazonaws.com 检索和显示敏感数据样本时将使用的服务主体。

  • Action 元素指定了允许该服务主体执行的操作,即 AssumeRole AWS Security Token Service(AWS STS)API 操作。

  • Condition 元素定义了一个使用 aws:SourceAccount 全局条件上下文键的条件。该条件决定了可以执行指定操作的账户。该条件只允许 Macie 为指定账户(accountID)代入该角色。该条件有助于防止 Macie 在与 AWS STS 进行事务处理时被用作 混淆代理

为 IAM 角色定义信任策略后,请将权限策略附加到该角色。这应是您在开始创建角色之前就已经创建的权限策略。然后在 IAM 中完成剩余的步骤以完成角色的创建和配置。完成后,在 Macie 中配置并启用设置

解密受影响的 S3 对象

Amazon S3 支持多种 S3 对象的加密选项。对于大多数选项,IAM 用户或角色无需额外的资源或权限即可解密和检索受影响对象中的敏感数据样本。使用 Amazon S3 托管式密钥或 AWS 托管式 AWS KMS key进行服务器端加密的对象就属于这种情况。

但是,如果 S3 对象是使用客户自主管理型的 AWS KMS key进行加密的,则需要额外的权限才能解密和检索该对象中的敏感数据样本。更具体地说,该 KMS 密钥的密钥政策必须允许该 IAM 用户或角色执行 kms:Decrypt 操作。否则会出现错误,并且 Macie 不会从对象中检索任何样本。要了解如何为 IAM 用户提供此访问权限,请参阅《AWS Key Management Service 开发人员指南》中的 Authentication and access control for AWS KMS

为 IAM 角色提供此访问权限的方法取决于拥有 AWS KMS key的账户是否同时也拥有该角色:

  • 如果该 KMS 密钥和该角色由同一账户拥有,则该账户的用户必须更新该密钥的策略。

  • 如果该 KMS 密钥由一个账户拥有,而该角色由另一个账户拥有,则拥有密钥的账户的用户必须允许对该密钥进行跨账户存取。

本主题介绍了如何为您创建的 IAM 角色执行这些任务,以检索 S3 对象中的敏感数据样本。此外还提供了这两种场景的示例。有关在其他场景中允许访问客户自主管理型 AWS KMS keys的信息,请参阅《AWS Key Management Service 开发人员指南》AWS KMS中的 Authentication and access control for

允许同一个账户访问客户托管密钥

如果该 AWS KMS key和该 IAM 角色由同一账户拥有,则该账户的用户必须在该密钥的策略中添加一条语句。该附加语句必须允许该 IAM 角色使用该密钥来解密数据。有关更新密钥政策的详细信息,请参阅 AWS Key Management Service 开发者指南 中的更改密钥政策

在以下语句中:

  • Principal 元素必须指定该 IAM 角色的 Amazon 资源名称(ARN)。

  • Action 数组必须指定 kms:Decrypt 操作。这是解密使用该密钥进行加密的对象时必须允许该 IAM 角色执行的唯一 AWS KMS 操作。

以下是添加至 KMS 密钥策略的语句示例。

{ "Sid": "Allow the Macie reveal role to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/IAMRoleName" }, "Action": [ "kms:Decrypt" ], "Resource": "*" }

在上述示例中:

  • Principal 元素中的 AWS 字段指定了账户的 IAM 角色的 ARN。这将允许该角色执行策略语句中指定的操作。123456789012 是示例账户 ID。请将该值替换拥有该角色和 KMS 密钥的账户的 ID。IAMRoleName 是一个示例名称。请将该值替换为账户中的 IAM 角色的名称。

  • Action 数组指定了允许该 IAM 角色使用该 KMS 密钥执行的操作,即解密使用该密钥加密的加密文字。

将此语句添加到密钥政策的位置,取决于该策略当前包含的结构和元素。当添加语句时,请确保语法有效。JSON 格式的密钥策略。这意味着您还必须在语句前后添加逗号,具体取决于您在策略中添加语句的位置。

允许跨账户存取客户托管密钥

如果 AWS KMS key由一个账户拥有(密钥所有者),而 IAM 角色由另一个账户拥有(角色所有者),则密钥所有者必须向角色所有者提供对该密钥的跨账户存取权限。执行此操作的一种方法是使用授权。授权是一种策略分析工具,如果由授权指定的条件得到满足,则允许 AWS 主体将 KMS 密钥用于加密操作中。要了解有关授权的信息,请参阅AWS Key Management Service 开发者指南中的AWS KMS授权

使用这种方法时,密钥所有者首先要确保该密钥的策略允许角色所有者为该密钥创建授权。然后,角色所有者需要为该密钥创建授权。该授权会将相关权限委派给其账户中的 IAM 角色。这将允许该角色解密使用该密钥加密的 S3 对象。

第 1 步:更新密钥政策

在密钥政策中,密钥所有者应确保策略中包含一条语句,从而允许角色所有者在角色所有者的账户中为 IAM 角色创建授权。在此语句中,Principal 元素必须指定角色所有者账户的 ARN。数 Action 数组必须指定 kms:CreateGrant 操作。Condition 块可以筛选对指定操作的访问权限。以下为 KMS 密钥策略语句示例。

{ "Sid": "Allow a role in an account to create a grant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringEquals": { "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/IAMRoleName" }, "ForAllValues:StringEquals": { "kms:GrantOperations": "Decrypt" } } }

在上述示例中:

  • Principal 元素中的 AWS 字段指定了角色所有者账户的 ARN。这将允许该账户执行策略语句中指定的操作。111122223333 是示例账户 ID。请将该值替换为角色所有者账户的账户 ID。

  • Action 数组指定了允许角色所有者对该 KMS 密钥执行的操作,即为该密钥创建授权。

  • Condition 块使用了 条件运算符 和以下条件键,用来筛选角色所有者有权对 KMS 密钥执行的操作的访问权限:

    • kms:GranteePrincipal – 此条件允许角色所有者仅为指定的被授权主体(即其账户中 IAM 角色的 ARN)创建授权。在 ARN 中,111122223333 是示例账户 ID。请将该值替换为角色所有者账户的账户 ID。IAMRoleName 是一个示例名称。请将该值替换为角色所有者账户中的 IAM 角色的名称。

    • kms:GrantOperations – 此条件允许角色所有者创建仅委派执行 AWS KMS Decrypt 操作(解密使用该密钥加密的加密文字)的权限的授权。这可以防止角色所有者创建委派对 KMS 密钥执行其他操作的权限的授权。AWS KMS 操作是解密使用该密钥进行加密的对象时必须允许该 IAM 角色执行的唯一 Decrypt 操作。

密钥所有者将此语句添加到密钥政策的位置,取决于密钥政策当前包含的结构和元素。当密钥拥有者添加语句时,他们应确保语法有效。JSON 格式的密钥策略。这意味着密钥拥有者还必须在语句前后添加逗号,具体取决于他们在策略中添加语句的位置。有关更新密钥政策的详细信息,请参阅 AWS Key Management Service 开发者指南 中的更改密钥政策

第 2 步:创建授权

在密钥所有者根据需要更新密钥政策后,角色所有者需要为该密钥创建授权。该授权会将相关权限委派给角色所有者账户中的 IAM 角色。角色所有者应首先确认自己是否有权执行 kms:CreateGrant 操作,然后才能创建授权。此操作使其能够向现有的客户自主管理型 AWS KMS key添加授权。

要创建授权,角色所有者可以使用 CreateGrant AWS Key Management Service API 操作。角色所有者创建授权时,应为所需参数指定以下值:

  • KeyId – KMS 密钥的 ARN。对于跨账户存取 KMS 密钥,该值必须是 ARN。它不能是密钥 ID。

  • GranteePrincipal – 其账户中 IAM 角色的 ARN。该值应为 arn:aws:iam::111122223333:role/IAMRoleName,其中 111122223333 是角色所有者账户的账户 ID,IAMRoleName 是角色的名称。

  • Operations – AWS KMS 解密操作(Decrypt)。这是解密使用该 KMS 密钥进行加密的对象时必须允许该 IAM 角色执行的唯一 AWS KMS 操作。

如果角色所有者使用的是 AWS Command Line Interface(AWS CLI),则可以运行 create-grant 命令来创建授权。下面的示例演示如何操作。此示例针对 Microsoft Windows 进行格式化,并使用脱字号 (^) 行继续符来提高可读性。

C:\> aws kms create-grant ^ --key-id arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab ^ --grantee-principal arn:aws:iam::111122223333:role/IAMRoleName ^ --operations "Decrypt"

其中:

  • key-id 指定要应用授权的 KMS 密钥的 ARN。

  • grantee-principal 指定了允许执行该授权所指定操作的 IAM 角色的 ARN。该值应与密钥政策中 kms:GranteePrincipal 条件指定的 ARN 一致。

  • operations 指定了授权允许指定主体执行的操作,即解密使用该密钥加密的加密文字。

如果命令成功运行,则您将收到类似于以下内容的输出:

{ "GrantToken": "<grant token>", "GrantId": "1a2b3c4d2f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2" }

其中 GrantToken,代表已创建授权的唯一、非秘密的、长度可变的 base64 编码字符串,GrantId 也是唯一授权标识符。