使用 Amazon Macie 分析加密的 Amazon S3 对象 - Amazon Macie

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

使用 Amazon Macie 分析加密的 Amazon S3 对象

当你为你启用 Amazon Macie 时 AWS 账户,Macie 会创建一个服务相关角色,该角色授予 Macie 代表你调用亚马逊简单存储服务 (Amazon S3) 和其他服务所需的权限。 AWS 服务 服务相关角色简化了设置的过程, AWS 服务 因为您不必手动添加服务权限即可代表您完成操作。要了解有关此类角色的更多信息,请参阅 AWS Identity and Access Management 用户指南中的使用服务相关角色

Macie 服务相关角色的权限策略 (AWSServiceRoleForAmazonMacie) 允许 Macie 执行操作,包括检索有关 S3 存储桶和对象的信息,以及检索和分析 S3 存储桶内的对象。如果您的账户是组织的 Macie 管理员账户,则该策略还允许 Macie 代表您对组织中的成员账户执行此操作。

如果 S3 对象已加密,则 Macie 服务相关角色的权限策略通常会向 Macie 授权解密该对象。但是,这取决于其使用的加密类型。还可能取决于是否允许 Macie 使用适当的加密密钥。

Amazon S3 对象的加密选项

Amazon S3 支持多种 S3 对象的加密选项。对于其中的大多数选项,Amazon Macie 都可以使用账户的 Macie 服务关联角色解密对象。但是,这取决于用于对象的加密类型。

具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)

如果使用服务器端加密和 Amazon S3 托管密钥 (SSE-S3) 对对象进行加密,则 Macie 可以解密该对象。

若要了解此类加密,请参阅Amazon Simple Storage Service 用户指南中的使用具有 Amazon S3 托管密钥的服务器端加密

使用 AWS KMS keys (DSSE-KMS 和 SSE-KMS)进行服务器端加密

如果使用双层服务器端加密或使用 AWS 托管 AWS KMS key (DSSE-KMS 或 SSE-KMS)进行服务器端加密对对象进行加密,Macie 可以解密该对象。

如果使用双层服务器端加密或由客户管理的服务器端加密 AWS KMS key (DSSE-KMS 或 SSE-KMS)对对象进行加密,则只有在您允许 Macie 使用密钥的情况下,Macie 才能解密该对象。对于使用完全在内部管理的 KMS 密钥 AWS KMS 和在外部密钥存储中管理的 KMS 密钥加密的对象,情况就是这样。如果不允许 Macie 使用适当的 KMS 密钥,则 Macie 只能存储和报告此对象的元数据。

要了解这些类型的加密,请参阅《A mazon 简单存储服务用户指南》中的 “使用双层服务器端加密 AWS KMS keys” AWS KMS keys和 “使用服务器端加密”。

提示

您可以自动生成一份列表,列出 Macie 需要访问的所有客户托管 AWS KMS keys 的列表,以便为您的账户分析 S3 存储桶中的对象。为此,请运行 AWS KMS 权限分析器脚本,该脚本可从上的 Amazon Macie 脚本存储库中获得。 GitHub该脚本还可以生成 AWS Command Line Interface (AWS CLI) 命令的附加脚本。您可以选择运行这些命令来更新指定 KMS 密钥的必要配置设置和策略。

使用客户提供的密钥进行服务器端加密 (SSE-C)

如果使用服务器端加密和客户提供的密钥 (SSE-C) 对对象进行加密,则 Macie 无法解密该对象。Macie 只能存储和报告对象元数据。

要了解此类加密,请参阅Amazon Simple Storage Service 用户指南使用客户提供密钥的服务器端加密

客户端加密

如果对象的加密方式为客户端加密,则 Macie 无法解密此对象。Macie 只能存储和报告对象元数据。例如,Macie 可以报告对象的大小,以及与该对象关联的标签。

要在 Amazon S3 环境中了解此类加密,请参阅Amazon Simple Storage Service 用户指南中的使用客户端加密保护数据

您可以在 Macie 中 筛选存储桶清单,以确定哪些 S3 存储桶存储了使用特定加密类型的对象。您还可通过存储新对象时的默认设置,确定哪些存储桶使用特定类型的服务器端加密。下表提供了筛选条件示例,您可以将这些筛选条件应用于存储桶清单以查找此信息。

若要显示存储桶…… 应用此筛选条件……
存储了使用 SSE-C 加密的对象 加密后的对象计数由客户提供件人 = 1
存储使用 DSSE-KMS 或 SSE-KMS 加密的对象 通过加密AWS KMS 管理对象计数,并且 F ro m = 1
存储了使用 SSE-S3 加密的对象 加密后的对象计数由 A mazon S3 托管件人 = 1
存储了使用客户端加密(或未加密)的对象 加密对象计数未加密 = 1
默认情况下使用 DSSE-KMS 加密对新对象进行加密 默认加密 = aw s: kms: dsse
默认情况下使用 SSE-KMS 加密新对象 默认加密 = aws:kms
默认情况下使用 SSE-S3 加密新对象 默认加密 = AES256

如果将存储桶配置为默认使用 DSSE-KMS 或 SSE-KMS 加密对新对象进行加密,则您还可以确定使用哪个。 AWS KMS key 为此,请在 S3 存储桶页面上选择存储桶。在存储桶详细信息面板的 “服务器端加密” 下,请参阅AWS KMS key字段。此字段显示密钥的 Amazon 资源名称(ARN)或唯一标识符(密钥 ID)。

允许 Amazon Macie 使用客户托管的用户 AWS KMS key

如果 Amazon S3 对象使用双层服务器端加密或由客户托管 AWS KMS key (DSSE-KMS 或 SSE-KMS)进行服务器端加密,则只有在允许其使用密钥的情况下,Amazon Macie 才能解密该对象。此访问权限的提供方式,取决于拥有密钥的账户是否还拥有存储对象的 S3 存储桶:

  • 如果同一个账户拥有 AWS KMS key 和存储桶,则该账户的用户必须更新密钥的策略。

  • 如果一个账户拥有存储桶, AWS KMS key 而另一个账户拥有该存储桶,则拥有该密钥的账户的用户必须允许跨账户访问该密钥。

本主题介绍如何执行这些任务,并提供了两种场景示例。要详细了解如何允许访问客户托管 AWS KMS keys,请参阅《AWS Key Management Service 开发人员指南》 AWS KMS中的身份验证和访问控制

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

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

在以下语句中:

  • Principal元素必须为拥有 AWS KMS key 和 S3 存储桶的账户指定 Macie 服务相关角色的 Amazon 资源名称 (ARN)。

    如果账户处于选择加入状态 AWS 区域,则 ARN 还必须包含该地区的相应区域代码。例如,如果账户位于中东(巴林)地区,其区域代码为 me-south-1Principal 元素必须指定arn:aws:iam::123456789012:role/aws-service-role/macie.me-south-1.amazonaws.com/AWSServiceRoleForAmazonMacie,其中 123456789012 是该账户的账户 ID。有关当前已开放 Macie 服务的所有区域的列表,请参阅《AWS 一般参考》中的 Amazon Macie 端点和限额

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

以下为添加到 AWS KMS key策略的语句示例。

{ "Sid": "Allow the Macie service-linked role to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie" }, "Action": [ "kms:Decrypt" ], "Resource": "*" }

在上述示例中:

  • Principal 元素的 AWS 字段指定账户的 Macie 服务相关角色 (AWSServiceRoleForAmazonMacie) 的 ARN。它允许 Macie 服务相关角色执行策略语句中指定的操作。 123456789012 是示例账户 ID。请将该值替换拥有该 KMS 密钥和 S3 存储桶的账户的 ID。

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

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

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

如果一个账户拥有 AWS KMS key (密钥所有者),而另一个账户拥有 S3 存储桶(存储桶所有者),则密钥所有者必须向存储桶拥有者提供对 KMS 密钥的跨账户访问权限。为此,密钥拥有者首先要确保密钥策略允许存储桶拥有者使用密钥,并为密钥创建授权。然后,存储桶拥有者为此密钥创建授权。授权是一种策略分析工具,如果由授权指定的条件得到满足,则允许 AWS 主体将 KMS 密钥用于加密操作中。在此例中,该授权将相关权限委派给存储桶所有者账户的 Macie 服务相关角色。

有关更新密钥政策的详细信息,请参阅 AWS Key Management Service 开发者指南 中的更改密钥政策。要了解有关授权的信息,请参阅AWS Key Management Service 开发者指南中的AWS KMS授权

第 1 步:更新密钥政策

在密钥政策中,密钥所有者应确保该策略包含两个语句:

  • 第一条语句允许存储桶拥有者使用密钥解密数据。

  • 第二条语句允许存储桶所有者为其账户的 Macie 服务相关角色创建授权。

在第一条语句中,Principal 元素必须指定存储桶拥有者账户的 ARN。数 Action 数组必须指定 kms:Decrypt 操作。这是解密使用密钥加密的对象时必须允许 Macie 执行的唯一 AWS KMS 操作。以下为在 AWS KMS key策略中使用此语句的示例。

{ "Sid": "Allow account 111122223333 to use the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:Decrypt" ], "Resource": "*" }

在上述示例中:

  • Principal 元素中的 AWS 字段指定存储桶拥有者账户 (111122223333) 的 ARN。它允许存储桶拥有者执行策略语句中指定的操作。111122223333 是示例账户 ID。请将该值替换存储桶所有者账户的账户 ID。

  • Action 数组指定了允许该存储桶所有者使用该 KMS 密钥执行的操作,即解密使用该密钥加密的加密文字。

密钥政策中的第二条语句,允许存储桶拥有者为其账户的 Macie 服务相关角色创建授权。在此语句中,Principal 元素必须指定存储桶拥有者账户的 ARN。数 Action 数组必须指定 kms:CreateGrant 操作。Condition 元素可以筛选对语句中指定 kms:CreateGrant 操作的访问权限。以下为在 AWS KMS key策略中使用此语句的示例。

{ "Sid": "Allow account 111122223333 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/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie" } } }

在上述示例中:

  • Principal 元素中的 AWS 字段指定存储桶拥有者账户 (111122223333) 的 ARN。它允许存储桶拥有者执行策略语句中指定的操作。111122223333 是示例账户 ID。请将该值替换存储桶所有者账户的账户 ID。

  • Action 数组指定存储桶拥有者可对 KMS 密钥执行的操作 — 创建密钥授权。

  • Condition 元素使用 StringEquals 条件运算符kms:GranteePrincipal 条件密钥来筛选策略语句所指定操作的访问权限。在此例中,存储桶所有者只能为指定 GranteePrincipal(即其账户的 Macie 服务相关角色的 ARN)创建授权。在 ARN 中,111122223333 是示例账户 ID。请将该值替换存储桶所有者账户的账户 ID。

    如果存储桶拥有者的账户处于选择加入状态 AWS 区域,还需要在 Macie 服务相关角色的 ARN 中加入相应的区域代码。例如,如果账户位于中东(巴林)地区,且该地区代码为 me-south-1,则将 ARN 中的macie.amazonaws.com替换为macie.me-south-1.amazonaws.com。有关当前已开放 Macie 服务的所有区域的列表,请参阅《AWS 一般参考》中的 Amazon Macie 端点和限额

密钥拥有者将这些语句添加到密钥政策的位置,取决于策略当前包含的结构和元素。当密钥所有者添加语句时,应确保语法有效。密钥策略使用 JSON 格式。这意味着密钥所有者还必须在语句之前或之后添加逗号,具体取决于在策略中添加语句的位置。

第 2 步:创建授权

在密钥拥有者根据需要更新密钥政策后,存储桶拥有者必须为密钥创建授权。该授权将他们(即存储桶拥有者)账户的相关权限委托至 Macie 服务相关角色。在存储桶拥有者创建授权前,他们应验证是否允许为自己的账户执行kms:CreateGrant操作。此操作使其能够向现有的客户自主管理型 AWS KMS key添加授权。

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

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

  • GranteePrincipal – 其账户的 Macie 服务相关角色(AWSServiceRoleForAmazonMacie)的 ARN。此值应为 arn:aws:iam::111122223333:role/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie,其中 111122223333 是存储桶拥有者账户的账户 ID。

    如果账户位于选择加入型区域中,则 ARN 还必须包相应的区域代码。例如,假设其账户位于中东(巴林)区域,其区域代码为 me-south-1,则 ARN 应为 arn:aws:iam::111122223333:role/aws-service-role/macie.me-south-1.amazonaws.com/AWSServiceRoleForAmazonMacie,其中 111122223333 是存储桶所有者账户的账户 ID。

  • Operations— AWS KMS 解密操作 () Decrypt。这是解密使用 KMS 密钥加密的对象时必须允许 Macie 执行的唯一 AWS KMS 操作。

要使用 AWS Command Line Interface (AWS CLI) 为客户托管的 KMS 密钥创建授权,请运行 create-gran t 命令。下面的示例演示如何操作。该示例针对 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/aws-service-role/macie.amazonaws.com/AWSServiceRoleForAmazonMacie ^ --operations "Decrypt"

其中:

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

  • grantee-principal 指定了允许执行该授权所指定操作的账户的 Macie 服务相关角色 ARN。该值应与密钥政策中第二个语句的 kms:GranteePrincipal 条件指定的 ARN 一致。

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

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

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

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