本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为计划查询配置 S3 目的地
将 Amazon S3 配置为目标,将您的计划查询结果存储为 JSON 文件,以便长期保留和分析。
使用 Amazon S3 作为目标时,查询结果将作为 JSON 文件存储在指定的存储桶和前缀中。此选项非常适合存档结果、执行批量分析或与其他处理 S3 数据的 AWS 服务集成。
您可以将查询结果传送到与计划查询相同的 AWS 账户中的 Amazon S3 存储桶,也可以将查询结果传送到其他 AWS 账户中的存储桶。您也可以选择使用客户托管密 AWS KMS 钥 (SSE-KMS) 对查询结果进行加密。
将结果传送到同一个账户中的 Amazon S3 存储桶
当目标 Amazon S3 存储桶与计划查询位于同一 AWS 账户时,您可以直接从控制台浏览和选择存储桶。
配置同账户 Amazon S3 目的地(控制台)
-
在 “将查询结果发布到 S3” 部分中,对于 S3 存储桶,选择此账户。
-
对于 Amazon S3 URI,请输入存储结果的 Amazon S3 存储桶和前缀(例如
s3://my-bucket/query-results/),或者选择浏览亚马逊 S3 进行导航并选择现有的 Amazon S3 位置。 -
(可选)要使用客户管理的 AWS KMS 密钥对结果进行加密,请在 KMS 密钥 ARN 字段中输入 AWS KMS 密钥的 ARN。密钥必须与目标 Amazon S3 存储桶位于同一 AWS 区域。如果您未指定 AWS KMS 密钥,则应用存储桶的默认加密设置。
-
在用于向 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 目标(控制台)
-
在 “将查询结果发布到 S3” 部分中,对于 S3 存储桶,选择其他账户,并提供拥有存储桶的账户的账户 ID 作为输入。
-
对于 Amazon S3 URI,请输入目标存储桶的完整 Amazon S3 URI,并在另一个账户中输入前缀(例如,
s3://cross-account-bucket/query-results/)。 -
(可选)要使用客户管理的 AWS KMS 密钥对结果进行加密,请在 KMS 密钥 ARN 字段中输入 AWS KMS 密钥的 ARN。密钥必须与目标 Amazon S3 存储桶位于同一 AWS 区域。
-
在用于向 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) 代入该角色的信任策略。