View a markdown version of this page

为计划查询配置 S3 目标 - 亚马逊 CloudWatch 日志

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

为计划查询配置 S3 目标

将 Amazon S3 配置为目的地,将您的预定查询结果存储为 JSON 文件,以便长期保留和分析。

使用 Amazon S3 作为目标时,查询结果以 JSON 文件形式存储在指定的存储桶和前缀中。此选项非常适合存档结果、执行批量分析或与其他处理 S3 数据的 AWS 服务集成。

您可以将查询结果传送到计划查询所在 AWS 账户中的 Amazon S3 存储桶,也可以将查询结果传送到其他 AWS 账户中的存储桶。您还可以选择使用客户管理的 AWS KMS 密钥 (SSE-KMS) 对查询结果进行加密。

将结果传送到同一账户中的 Amazon S3 存储桶

当目标 Amazon S3 存储桶与计划查询位于同一个 AWS 账户中时,您可以直接从控制台浏览和选择存储桶。

配置同一个账户的 Amazon S3 目标(控制台)
  1. 在 “将查询结果发布到 S3” 部分中,对于 S3 存储桶,选择此账户

  2. 对于 Amazon S3 URI,输入用于存储结果的 Amazon S3 存储桶和前缀(例如,s3://my-bucket/query-results/),或者选择 B rowse Amazon S3 浏览并选择现有的 Amazon S3 位置。

  3. (可选)要使用客户管理的 AWS KMS 密钥加密结果,请在 KMS AWS KMS 密钥 ARN 字段中输入密钥的 ARN 。密钥必须与目标 Amazon S3 存储桶位于同一 AWS 区域。如果您未指定 AWS KMS 密钥,则存储桶的默认加密设置适用。

  4. 在 “用于向 Amazon S3 发布查询结果的 IAM 角色” 部分中,选择Auto-create 具有默认权限的新角色以自动设置所需权限,或选择使用现有角色选择具有所需策略的现有 IAM 角色。

目标交付 IAM 角色需要以下权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-bucket/prefix/*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" } } } ] }

将结果传送到另一个账户中的 Amazon S3 存储桶

您可以将预定查询结果传送到其他 AWS 账户中的 Amazon S3 存储桶。使用跨账户存储桶时,您必须提供 Amazon S3 URI 和存储桶拥有账户的账户 ID。

配置跨账户 Amazon S3 目标(控制台)
  1. 在 “将查询结果发布到 S3” 部分中,对于 S3 存储桶,选择其他账户,并提供存储桶拥有账户的账户 ID 作为输入。

  2. 对于亚马逊 S3 URI,输入目标存储桶的完整 Amazon S3 URI,并在其他账户中输入前缀(例如,s3://cross-account-bucket/query-results/)。

  3. (可选)要使用客户管理的 AWS KMS 密钥加密结果,请在 KMS AWS KMS 密钥 ARN 字段中输入密钥的 ARN 。密钥必须与目标 Amazon S3 存储桶位于同一 AWS 区域。

  4. 在 “用于向 Amazon S3 发布查询结果的 IAM 角色” 部分中,选择Auto-create 具有默认权限的新角色以自动设置所需权限,或选择使用现有角色选择具有所需策略的现有 IAM 角色。

Cross-account 交付需要双方的许可。源账户中的目标交付 IAM 角色需要以下权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::cross-account-bucket/prefix/*", "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }

目标账户中的 Amazon S3 存储桶策略必须向源账户的 IAM 角色授予写入对象的权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowScheduledQueryRolePutObject", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/my-s3-delivery-role" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::cross-account-bucket/prefix/*" } ] }

由客户管理对结果进行加密 AWS KMS 键

您可以选择指定客户管理的 AWS KMS 密钥来加密交付给 Amazon S3 的查询结果 SSE-KMS。 AWS KMS 密钥可以与计划查询位于同一个账户中,也可以放在不同的账户中。

当您指定 AWS KMS 密钥时,计划查询使用该密钥通过加密结果 SSE-KMS。当您未指定 AWS KMS 密钥时,存储桶的默认加密设置将适用。如果使用客户管理的密钥将存储桶配置为默认 SSE-KMS 加密,则目标交付 IAM 角色仍必须拥有该密钥的kms:GenerateDataKey权限。

目标交付 IAM 角色需要 AWS KMS 密钥kms:GenerateDataKey权限。以下示例显示了使用客户托管 AWS KMS 密钥的 Amazon S3 目标所需的权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-bucket/prefix/*", "Condition": { "StringEquals": { "aws:ResourceAccount": "111122223333" } } }, { "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id", "Condition": { "StringEquals": { "kms:ViaService": "s3.us-east-1.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::my-bucket*" } } } ] }

当 AWS KMS 密钥与目标交付 IAM 角色不同的账户中时, AWS KMS 密钥拥有账户中的密钥策略必须明确授予该角色访问权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowScheduledQueryRoleToEncrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/my-s3-delivery-role" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "s3.us-east-1.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::my-bucket*" } } } ] }
注意

当 AWS KMS 密钥和目标交付 IAM 角色位于同一个账户中时,如果 AWS KMS 密钥策略包含默认的 “启用 IAM 策略” 根语句,则仅 IAM 身份策略就足够了。仅当 AWS KMS 密钥策略未委托给 IAM 时,才需要明确的密钥策略授予。

用于将查询结果发布到 Amazon S3 的 IAM 角色必须与 IAM 角色分开配置,以便按计划执行查询。这种分离允许细粒度的访问控制,执行角色可以运行查询,而 Amazon S3 角色专门处理结果交付。这两个角色都必须包含允许 CloudWatch 日志服务 (logs.amazonaws.com) 代入该角色的信任策略。