View a markdown version of this page

为计划查询配置 S3 目的地 - Amazon 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/),或者选择浏览亚马逊 S3 进行导航并选择现有的 Amazon S3 位置。

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

  4. 用于向 Amazon S3 发布查询结果的 IAM 角色部分,选择自动创建具有默认权限的新角色以自动设置所需权限,或者选择使用现有角色选择具有所需策略的现有 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. 对于 Amazon S3 URI,请输入目标存储桶的完整 Amazon S3 URI,并在另一个账户中输入前缀(例如,s3://cross-account-bucket/query-results/)。

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

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

跨账户交付需要双方的权限。源账户中的目标配送 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 密钥,以便使用 SSE-KMS 对发送到 Amazon S3 的查询结果进行加密。 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) 代入该角色的信任策略。