使用控制台将日志数据导出到 Amazon S3
在以下示例中,您将使用 Amazon CloudWatch 控制台将所有数据从名为 my-log-group
的 Amazon CloudWatch Logs 日志组导出到名为 my-exported-logs
的 Amazon S3 存储桶。
不支持将日志数据导出到由 Amazon KMS 加密的 Amazon S3 存储桶。
步骤 1:创建 Amazon S3 存储桶
我们建议您使用专为 CloudWatch Logs 创建的存储桶。但是,如果要使用现有存储桶,请跳至第 2 步。
Amazon S3 存储桶必须与要导出的日志数据位于同一区域。CloudWatch Logs 不支持将数据导出到其他区域中的 Amazon S3 存储桶。
创建 Amazon S3 存储桶
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
如果需要,可以更改 区域。从导航栏中,选择 CloudWatch Logs 所在的区域。
-
选择 Create Bucket(创建存储桶)。
-
对于 Bucket Name(存储桶名称),输入存储桶的名称。
-
对于 Region(区域),选择 CloudWatch Logs 数据所在的区域。
-
选择 Create (创建) 。
步骤 2:创建对 Amazon S3 和 CloudWatch Logs 具有完全访问权限的 IAM 用户
在以下步骤中,您将创建具有必要权限的 IAM 用户。
创建必要的 IAM 用户
通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 依次选择 Users(用户)和 Add user(添加用户)。
输入用户名,例如
CWLExportUser
.同时选择 Programmatic access(以编程方式访问)和 Amazon Web Services Management Console access(控制台访问)。
选择 Autogenerated password(自动生成的密码)或 Custom password(自定义密码)。
选择 Next: Permissions(下一步: 权限)。
选择 Attach existing policies directly(直接附加现有策略),然后将
AmazonS3FullAccess
和CloudWatchLogsFullAccess
策略附加到用户。您可以使用搜索框来查找策略。选择 Next: Tags(下一步:标签)、Next: Review(下一步:审核),然后选择 Create user(创建用户)。
步骤 3:设置 Amazon S3 存储桶上的权限
默认情况下,所有 Amazon S3 存储桶和对象都是私有的。仅资源所有者(创建了存储桶的 Amazon 账户)能够访问存储桶及其包含的任何对象。不过,资源所有者可以选择通过编写访问策略来向其他资源和用户授予访问权限。
当您设置策略时,建议包含一个随机生成的字符串作为存储桶的前缀,这样只会将目标日志流导出到该存储桶。
设置 Amazon S3 存储桶上的权限
-
在 Amazon S3 控制台中,选择您在第 1 步中创建的存储桶。
-
选择 Permissions(权限)、Bucket policy(存储桶策略)。
-
在 Bucket Policy Editor(存储桶策略编辑器)中,添加以下策略之一。将
my-exported-logs
更改为 S3 存储桶的名称,将random-string
更改为随机生成的字符串。请务必为 Principal(委托人)指定正确的区域端点。如果存储桶位于您的账户中,请添加以下策略。
{ "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::
my-exported-logs
", "Principal": { "Service": "logs.us-west-2
.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-west-2
.amazonaws.com" } } ] }-
如果存储桶位于其他账户中,请改用以下策略。它使用您在上一步中创建的 IAM 用户来包括附加语句。
{ "Version": "2012-10-17", "Statement": [ { "Action": "s3:GetBucketAcl", "Effect": "Allow", "Resource": "arn:aws:s3:::
my-exported-logs
", "Principal": { "Service": "logs.us-west-2
.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "Service": "logs.us-west-2
.amazonaws.com" } }, { "Action": "s3:PutObject" , "Effect": "Allow", "Resource": "arn:aws:s3:::my-exported-logs/random-string
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }, "Principal": { "AWS": "arn:aws:iam::SendingAccountID
:user/CWLExportUser
" } } ] }
-
选择 Save,将您刚添加的策略设置为存储桶上的访问策略。此策略可让 CloudWatch Logs 将日志数据导出到您的 Amazon S3 存储桶中。存储桶拥有者对所有导出的对象拥有完全权限。
警告 如果现有存储桶已附加一个或多个策略,请将 CloudWatch Logs 访问的语句添加到这些策略。我们建议您评估生成的权限集,确保它们适合访问存储桶的用户。
步骤 4:创建导出任务
在本步骤中,您可创建导出任务以便从日志组中导出日志。
使用 CloudWatch 控制台将数据导出到 Amazon S3
以您在步骤 2:创建对 Amazon S3 和 CloudWatch Logs 具有完全访问权限的 IAM 用户中创建的 IAM 用户身份登录。
访问 https://console.aws.amazon.com/cloudwatch/
,打开 CloudWatch 控制台。 -
在导航窗格中,选择 Log groups(日志组)。
-
在 Log Groups(日志组)屏幕上,选择日志组的名称。
选择 Actions(操作)、Export data to Amazon S3(将数据导出到 Amazon S3)。
-
在 Export data to Amazon S3(将数据导出到 Amazon S3)屏幕的 Define data export(定义数据导出)下,使用 From(从)和 To(至)设置要导出的数据的时间范围。
-
如果日志组有多个日志流,您可以提供一个日志流前缀,将日志组数据限定为特定流。选择 Advanced(高级),然后为 Stream prefix(流前缀)输入日志流前缀。
-
在 Choose S3 bucket(选择 S3 存储桶)中,选择与 Amazon S3 存储桶关联的账户。
-
对于 S3 bucket name(S3 存储桶名称),选择一个 Amazon S3 存储桶。
-
对于 S3 Bucket prefix(S3 存储桶前缀),输入在存储桶策略中指定的随机生成的字符串。
-
选择 Export(导出),将日志数据导出到 Amazon S3。
-
要查看您导出到 Amazon S3 的日志数据的状态,请依次选择 Actions(操作)、View all exports to Amazon S3(查看导出到 Amazon S3 的所有内容)。