ablog

不器用で落着きのない技術者のメモ

NLB のアクセスログ出力先に既存 S3 バケットを指定すると "Access Denied for bucket: ... Please " と怒られる

事象

Access Denied for bucket: <S3バケット名>. Please check S3bucket permission nlb

原因

  • サービスアカウントからS3バケットへの書込み権限がないため。

解決策

  • S3 のバケットポリシーで以下のようにサービスアカウントからのアクセスを許可する。
{
    "Version": "2012-10-17",
    "Id": "AWSConsole-AccessLogs-Policy-1601391827684",
    "Statement": [
        {
            "Sid": "AWSConsoleStmt-1601391827686",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::582318560864:root"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::elb-log/AWSLogs/123456789023/*"
        },
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::elb-log/AWSLogs/123456789023/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::elb-log"
        }
    ]
}