簡體   English   中英

AWS:將日志從 Cloudwatch 導出到 Amazon S3 的權限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM