使用控制台将日志数据导出到 Amazon S3 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用控制台将日志数据导出到 Amazon S3

在以下示例中,您使用亚马逊 CloudWatch 控制台将名为的 Amazon Log CloudWatch s 日志组中的所有数据导出my-log-group到名为的 Amazon S3 存储桶my-exported-logs

支持将日志数据导出到由 SSE-KMS 加密的 S3 存储桶。不支持导出到由 DSSE-KMS 加密的存储桶。

有关如何设置导出的详细信息取决于您要导出到的 Amazon S3 存储桶与要导出的日志是位于同一个账户中,还是不同的账户中。

同账号导出

如果 Amazon S3 存储桶与要导出的日志位于同一个账户中,请参阅本节中的说明。

步骤 1:创建 Amazon S3 存储桶

我们建议您使用专为 Logs 创建的存储 CloudWatch 桶。但是,如果要使用现有存储桶,请跳至第 2 步。

注意

S3 存储桶必须与要导出的日志数据位于同一个区域中。 CloudWatch 日志不支持将数据导出到其他区域的 S3 存储桶。

创建 S3 存储桶
  1. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

  2. 如果需要,可以更改区域。从导航栏中,选择您的 CloudWatch 日志所在的区域。

  3. 选择 Create Bucket(创建存储桶)

  4. 对于 Bucket Name(存储桶名称),输入存储桶的名称。

  5. 对于区域,选择您的 CloudWatch 日志数据所在的区域。

  6. 选择 创建

步骤 2:设置访问权限

要在步骤 5 中创建导出任务,您需要分配 AmazonS3ReadOnlyAccess IAM 角色和以下权限:

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

要提供访问权限,请为您的用户、组或角色添加权限:

步骤 3:在 S3 桶上设置权限

默认情况下,所有 S3 桶和对象都是私有的。仅资源所有者(创建了桶的 Amazon Web Services 账户 )能够访问桶及其包含的任何对象。不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限。

当您设置策略时,建议包含一个随机生成的字符串作为存储桶的前缀,这样只会将目标日志流导出到该存储桶。

重要

为了使导出到 S3 桶更加安全,我们现在要求您指定允许将日志数据导出到 S3 桶的源账户列表。

以下示例中,aws:SourceAccount 密钥中账户 ID 的列表会是用户可以从其中将日志数据导出到 S3 存储桶的账户。aws:SourceArn 密钥是正在进行的操作的资源。如本示例所示,您可以将其限制为特定的日志组,也可以使用通配符。

建议您还包括创建 S3 桶的账户的账户 ID,以允许在同一账户内导出。

设置 Amazon S3 存储桶上的权限
  1. 在 Amazon S3 控制台中,选择您在第 1 步中创建的存储桶。

  2. 选择 Permissions(权限)Bucket policy(存储桶策略)

  3. Bucket Policy Editor(桶策略编辑器)中,添加以下策略。将 my-exported-logs 更改为 S3 存储桶的名称。请务必指定正确的区域端点,例如 Principal(委托人)us-west-1

    { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } } ] }
  4. 选择 Save,将您刚添加的策略设置为存储桶上的访问策略。此策略允许 CloudWatch 日志将日志数据导出到您的 S3 存储桶。存储桶拥有者对所有导出的对象拥有完全权限。

    警告

    如果现有存储桶已附加了一个或多个策略,请添加该策略的 CloudWatch 日志访问权限声明。我们建议您评估生成的权限集,确保它们适合访问存储桶的用户。

(可选)步骤 4:导出到使用 SSE-KMS 加密的桶

仅当您要导出到使用服务器端加密的 S3 存储桶时,才需要执行此步骤。 Amazon KMS keys这种加密称为 SSE-KMS。

导出到使用 SSE-KMS 加密的桶
  1. 打开 Amazon KMS 控制台,网址为 https://console.aws.amazon.com/kms

  2. 要更改 Amazon Web Services 区域,请使用页面右上角的区域选择器。

  3. 在左侧导航栏中,选择 Customer managed keys(客户托管密钥)。

    选择 Create Key(创建密钥)。

  4. 对于 Key type (密钥类型),选择 Symmetric (对称)

  5. 对于 Key usage(密钥用法),选择 Encrypt and decrypt(加密和解密),然后选择 Next(下一步)。

  6. Add labels(添加标签)下,输入密钥的别名,并添加描述或标签(可选)。然后选择下一步

  7. Key administrators(密钥管理员)下,选择可以管理此密钥的人员,然后选择 Next(下一步)。

  8. Define key usage permissions(定义密钥使用权限)下,不进行任何更改并选择 Next(下一步)。

  9. 检查设置,然后选择 Finish(完成)。

  10. 返回 Customer managed keys(客户托管密钥)页面,选择您刚刚创建的密钥的名称。

  11. 选择 Key policy(密钥策略)选项卡,然后选择 Switch to policy view(切换到策略视图)。

  12. Key policy(密钥策略)部分,选择 Edit(编辑)。

  13. 将以下语句添加到密钥策略语句列表。执行此操作时,将 Region 替换为日志的区域,将 account-ARN 替换为拥有 KMS 密钥的账户的 ARN。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CWL Service Principal usage", "Effect": "Allow", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "account-ARN" }, "Action": [ "kms:GetKeyPolicy*", "kms:PutKeyPolicy*", "kms:DescribeKey*", "kms:CreateAlias*", "kms:ScheduleKeyDeletion*", "kms:Decrypt" ], "Resource": "*" } ] }
  14. 选择 ‬保存更改

  15. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

  16. 找到您在 步骤 1:创建 S3 存储桶 中创建的桶并选择桶名称。

  17. 选择属性选项卡。然后,在 Default Encryption(默认加密)下,选择 Edit(编辑)。

  18. Server-side Encryption(服务器端加密)下,选择 Enable(启用)。

  19. Encryption type (加密类型) 下,请选择 Amazon Key Management Service key (SSE-KMS) (Amazon Key Management Service 密钥(SSE-KMS))

  20. 选择 “从 Amazon KMS 密钥中选择”,然后找到您创建的密钥。

  21. 对于 Bucket Key(桶密钥),选择 Enable(启用)。

  22. 选择 ‬保存更改

步骤 5:创建导出任务

在本步骤中,您可创建导出任务以便从日志组中导出日志。

使用 CloudWatch 控制台将数据导出到 Amazon S3
  1. 步骤 2:设置访问权限 中所述,使用足够的权限登录。

  2. 打开 CloudWatch 控制台,网址为 https://console.aws.amazon.com/cloudwatch/

  3. 在导航窗格中,选择 日志组

  4. Log Groups(日志组)屏幕上,选择日志组的名称。

  5. 选择 Actions(操作)Export data to Amazon S3(将数据导出到 Amazon S3)

  6. Export data to Amazon S3(将数据导出到 Amazon S3)屏幕的 Define data export(定义数据导出)下,使用 From(从)To(至)设置要导出的数据的时间范围。

  7. 如果日志组有多个日志流,您可以提供一个日志流前缀,将日志组数据限定为特定流。选择 Advanced(高级),然后为 Stream prefix(流前缀)输入日志流前缀。

  8. Choose S3 bucket(选择 S3 桶)下,选择与 S3 桶关联的账户。

  9. 对于 S3 bucket name(S3 桶名称),选择 S3 桶。

  10. 对于 S3 Bucket prefix(S3 存储桶前缀),输入在存储桶策略中指定的随机生成的字符串。

  11. 选择 Export(导出),将日志数据导出到 Amazon S3。

  12. 要查看您导出到 Amazon S3 的日志数据的状态,请依次选择 Actions(操作)View all exports to Amazon S3(查看导出到 Amazon S3 的所有内容)

跨账户导出

如果 Amazon S3 存储桶与要导出的日志位于不同账户中,请参阅本节中的说明。

步骤 1:创建 Amazon S3 存储桶

我们建议您使用专为 Logs 创建的存储 CloudWatch 桶。但是,如果要使用现有存储桶,请跳至第 2 步。

注意

S3 存储桶必须与要导出的日志数据位于同一个区域中。 CloudWatch 日志不支持将数据导出到其他区域的 S3 存储桶。

创建 S3 存储桶
  1. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

  2. 如果需要,可以更改区域。从导航栏中,选择您的 CloudWatch 日志所在的区域。

  3. 选择 Create Bucket(创建存储桶)

  4. 对于 Bucket Name(存储桶名称),输入存储桶的名称。

  5. 对于区域,选择您的 CloudWatch 日志数据所在的区域。

  6. 选择 创建

步骤 2:设置访问权限

首先,您必须创建新的 IAM 策略,以使 CloudWatch Logs 拥有目标账户中目标 Amazon S3 存储桶的s3:PutObject权限。

您创建的策略取决于目标存储桶是否使用 Amazon KMS 加密。

创建 IAM policy 以将日志导出到 Amazon S3 存储桶
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧的导航窗格中,选择策略

  3. 选择 创建策略

  4. 策略编辑器部分,选择 JSON

  5. 如果目标存储桶不使用 Amazon KMS 加密,请将以下策略粘贴到编辑器中。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*" } ] }

    如果目标存储桶确实使用了 Amazon KMS 加密,请将以下策略粘贴到编辑器中。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "ARN_OF_KMS_KEY" } ] }
  6. 选择下一步

  7. 输入策略名称。您将使用此名称将策略附加到您的 IAM 角色。

  8. 选择创建策略以保存新策略。

要在步骤 5 中创建导出任务,您需要使用 AmazonS3ReadOnlyAccess IAM 角色登录。您还必须使用刚刚创建的 IAM policy 登录并且具有以下权限:

  • logs:CreateExportTask

  • logs:CancelExportTask

  • logs:DescribeExportTasks

  • logs:DescribeLogStreams

  • logs:DescribeLogGroups

要提供访问权限,请为您的用户、组或角色添加权限:

步骤 3:在 S3 桶上设置权限

默认情况下,所有 S3 桶和对象都是私有的。仅资源所有者(创建了桶的 Amazon Web Services 账户 )能够访问桶及其包含的任何对象。不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限。

当您设置策略时,建议包含一个随机生成的字符串作为存储桶的前缀,这样只会将目标日志流导出到该存储桶。

重要

为了使导出到 S3 桶更加安全,我们现在要求您指定允许将日志数据导出到 S3 桶的源账户列表。

以下示例中,aws:SourceAccount 密钥中账户 ID 的列表会是用户可以从其中将日志数据导出到 S3 存储桶的账户。aws:SourceArn 密钥是正在进行的操作的资源。如本示例所示,您可以将其限制为特定的日志组,也可以使用通配符。

建议您还包括创建 S3 桶的账户的账户 ID,以允许在同一账户内导出。

设置 Amazon S3 存储桶上的权限
  1. 在 Amazon S3 控制台中,选择您在第 1 步中创建的存储桶。

  2. 选择 Permissions(权限)Bucket policy(存储桶策略)

  3. Bucket Policy Editor(桶策略编辑器)中,添加以下策略。将 my-exported-logs 更改为 S3 存储桶的名称。请务必指定正确的区域端点,例如 Principal(委托人)us-west-1

    { "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/*", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "AccountId1", "AccountId2", ... ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:Region:AccountId1:log-group:*", "arn:aws:logs:Region:AccountId2:log-group:*", ... ] } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-exported-logs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
  4. 选择 Save,将您刚添加的策略设置为存储桶上的访问策略。此策略允许 CloudWatch 日志将日志数据导出到您的 S3 存储桶。存储桶拥有者对所有导出的对象拥有完全权限。

    警告

    如果现有存储桶已附加了一个或多个策略,请添加该策略的 CloudWatch 日志访问权限声明。我们建议您评估生成的权限集,确保它们适合访问存储桶的用户。

(可选)步骤 4:导出到使用 SSE-KMS 加密的桶

仅当您要导出到使用服务器端加密的 S3 存储桶时,才需要执行此步骤。 Amazon KMS keys这种加密称为 SSE-KMS。

导出到使用 SSE-KMS 加密的桶
  1. 打开 Amazon KMS 控制台,网址为 https://console.aws.amazon.com/kms

  2. 要更改 Amazon Web Services 区域,请使用页面右上角的区域选择器。

  3. 在左侧导航栏中,选择 Customer managed keys(客户托管密钥)。

    选择 Create Key(创建密钥)。

  4. 对于 Key type (密钥类型),选择 Symmetric (对称)

  5. 对于 Key usage(密钥用法),选择 Encrypt and decrypt(加密和解密),然后选择 Next(下一步)。

  6. Add labels(添加标签)下,输入密钥的别名,并添加描述或标签(可选)。然后选择下一步

  7. Key administrators(密钥管理员)下,选择可以管理此密钥的人员,然后选择 Next(下一步)。

  8. Define key usage permissions(定义密钥使用权限)下,不进行任何更改并选择 Next(下一步)。

  9. 检查设置,然后选择 Finish(完成)。

  10. 返回 Customer managed keys(客户托管密钥)页面,选择您刚刚创建的密钥的名称。

  11. 选择 Key policy(密钥策略)选项卡,然后选择 Switch to policy view(切换到策略视图)。

  12. Key policy(密钥策略)部分,选择 Edit(编辑)。

  13. 将以下语句添加到密钥策略语句列表。执行此操作时,将 Region 替换为日志的区域,将 account-ARN 替换为拥有 KMS 密钥的账户的 ARN。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CWL Service Principal usage", "Effect": "Allow", "Principal": { "Service": "logs.Region.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "account-ARN" }, "Action": [ "kms:GetKeyPolicy*", "kms:PutKeyPolicy*", "kms:DescribeKey*", "kms:CreateAlias*", "kms:ScheduleKeyDeletion*", "kms:Decrypt" ], "Resource": "*" }, { "Sid": "Enable IAM Role Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::create_export_task_caller_account:role/role_name" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "ARN_OF_KMS_KEY" } ] }
  14. 选择 ‬保存更改

  15. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

  16. 找到您在 步骤 1:创建 S3 存储桶 中创建的桶并选择桶名称。

  17. 选择属性选项卡。然后,在 Default Encryption(默认加密)下,选择 Edit(编辑)。

  18. Server-side Encryption(服务器端加密)下,选择 Enable(启用)。

  19. Encryption type (加密类型) 下,请选择 Amazon Key Management Service key (SSE-KMS) (Amazon Key Management Service 密钥(SSE-KMS))

  20. 选择 “从 Amazon KMS 密钥中选择”,然后找到您创建的密钥。

  21. 对于 Bucket Key(桶密钥),选择 Enable(启用)。

  22. 选择 ‬保存更改

步骤 5:创建导出任务

在本步骤中,您可创建导出任务以便从日志组中导出日志。

使用 CloudWatch 控制台将数据导出到 Amazon S3
  1. 步骤 2:设置访问权限 中所述,使用足够的权限登录。

  2. 打开 CloudWatch 控制台,网址为 https://console.aws.amazon.com/cloudwatch/

  3. 在导航窗格中,选择 日志组

  4. Log Groups(日志组)屏幕上,选择日志组的名称。

  5. 选择 Actions(操作)Export data to Amazon S3(将数据导出到 Amazon S3)

  6. Export data to Amazon S3(将数据导出到 Amazon S3)屏幕的 Define data export(定义数据导出)下,使用 From(从)To(至)设置要导出的数据的时间范围。

  7. 如果日志组有多个日志流,您可以提供一个日志流前缀,将日志组数据限定为特定流。选择 Advanced(高级),然后为 Stream prefix(流前缀)输入日志流前缀。

  8. Choose S3 bucket(选择 S3 桶)下,选择与 S3 桶关联的账户。

  9. 对于 S3 bucket name(S3 桶名称),选择 S3 桶。

  10. 对于 S3 Bucket prefix(S3 存储桶前缀),输入在存储桶策略中指定的随机生成的字符串。

  11. 选择 Export(导出),将日志数据导出到 Amazon S3。

  12. 要查看您导出到 Amazon S3 的日志数据的状态,请依次选择 Actions(操作)View all exports to Amazon S3(查看导出到 Amazon S3 的所有内容)