![](/img/trans.png)
[英]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.