[英]AWS : Exporting logs from Amazon CloudWatch to Amazon Redshift
[英]AWS: Permissions for exporting logs from Cloudwatch to Amazon S3
我正在尝试使用 AWS 控制台将日志从我的 CloudWatch 日志组之一导出到 Amazon S3。
我按照AWS 文档中的指南进行操作,但收效甚微。 我的组织不允许我管理 IAM 角色/策略,但是我发现我的角色被允许进行所有与日志相关的操作( logs:*
在账户内的所有资源上)。
目前,我遇到以下错误消息:
无法创建导出任务。 对给定存储桶的 PutObject 调用失败。 请检查 CloudWatch Logs 是否已被授予执行此操作的权限。
我的存储桶策略是通过以下方式设置的:
{
[
...
{
"Sid": "Cloudwatch Log Export 1",
"Effect": "Allow",
"Principal": {
"Service": "logs.eu-central-1.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::my-bucket"
},
{
"Sid": "Cloudwatch Log Export 2",
"Effect": "Allow",
"Principal": {
"Service": "logs.eu-central-1.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
在编辑存储桶策略之前,我的错误消息是
无法创建导出任务。 对给定存储桶的 GetBucketAcl 调用失败。 请检查 CloudWatch Logs 是否已被授予执行此操作的权限。
但是编辑存储桶策略解决了这个问题。 我希望允许PutObject
做同样的事情,但事实并非如此。
谢谢你的帮助。
请查看本指南使用 AWS CLI 策略将日志数据导出到 Amazon S3 与您共享的文档相似,但略有不同。 假设您在同一帐户和同一区域执行此操作,请检查您放置的区域是否正确(在此示例中为 us-east-2)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:GetBucketAcl",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-exported-logs",
"Principal": { "Service": "logs.us-east-2.amazonaws.com" }
},
{
"Action": "s3:PutObject" ,
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-exported-logs/*",
"Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } },
"Principal": { "Service": "logs.us-east-2.amazonaws.com" }
}
]
}
我认为bucket owner完全控制在这里不是问题,唯一的机会是区域。 无论如何,如果您使用不同的帐户/使用角色而不是用户,请查看其他两个示例。
这解决了我的问题,与您提到的相同。
要检查的一件事是您的加密设置。 根据https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasksConsole.html
不支持将日志数据导出到由 AWS KMS 加密的 Amazon S3 存储桶。
Amazon S3 托管密钥 (SSE-S3) 存储桶加密可能会解决您的问题。 如果您使用 SSE-KMS,Cloudwatch 无法访问您的加密密钥,以便在对象放入存储桶时正确加密它们。
确保在导出数据时正确配置以下内容
S3 存储桶前缀 - 可选这将是您要用于存储日志的对象名称。
在为PutBucket
创建策略时,您必须确保充分捕获对象/前缀。 请参阅PutBucket
语句Resource
的差异:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:GetBucketAcl",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-exported-logs",
"Principal": { "Service": "logs.us-east-2.amazonaws.com" }
},
{
"Action": "s3:PutObject" ,
"Effect": "Allow",
- "Resource": "arn:aws:s3:::my-exported-logs/*",
+ "Resource": "arn:aws:s3:::my-exported-logs/**_where_i_want_to_store_my_logs_***",
"Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } },
"Principal": { "Service": "logs.us-east-2.amazonaws.com" }
}
]
}
我遇到了同样的情况,对我有用的是将存储桶名称本身作为资源添加到Allow PutObject Sid中,例如:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowLogsExportGetBucketAcl",
"Effect": "Allow",
"Principal": {
"Service": "logs.eu-west-1.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::my-bucket"
},
{
"Sid": "AllowLogsExportPutObject",
"Effect": "Allow",
"Principal": {
"Service": "logs.eu-west-1.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": [
"my-bucket",
"my-bucket/*"
]
}
]
}
我也相信所有其他答案都是相关的,尤其是以毫秒为单位的时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.