同じ S3 バケットにプレフィックスを指定して複数の NLB アクセスログを設定する際に、「その名前のバケットを既に所有しています。」 のエラーなったときの対処方法。
困っていた内容
2つの NLB を所有しており、どちらも同様の S3 バケットにそれぞれのプレフィックスを指定して、 NLB アクセスログを有効にしたいです。
NLB アクセスログの設定で、1つ目の NLB のアクセスログの有効化は成功しましたが、2つ目の NLB のアクセスログを設定する際、 プレフィックスを含む S3 バケットを指定して「この場所を作成する」をクリックしましたが、「その名前のバケットを既に所有しています。」のエラーが発生しました。 対処方法を教えてください。
対象 NLB
- NLB-DEV
- NLB-STG
エラーが発生した時の画面
どう対応すればいいの?
2つ目の NLB アクセスログを有効化する際、「この場所を作成する」をクリックすると、S3バケットは 1つ目の NLB アクセスログを有効化する際に、 既に作成されているので、違うプレフィックスを指定してもエラーが発生します。
エラーを対処するためには、S3 のバケットポリシーを編集する必要がございます。
1つ目の NLB アクセスログを有効化する際に作成された S3バケットのバケットポリシーのリソースは以下 [1] となっておりますので、
既に存在しているプレフィックスのみ指定されております。
そのため、以下 [2] に変更する必要がございます。
[1] 変更前
"Resource": "arn:aws:s3:::nlb-log-blog/dev-test/AWSLogs/[アカウントID]/*"
[2] 変更後
"Resource": [ "arn:aws:s3:::nlb-log-blog/dev-test/AWSLogs/[アカウントID]/*", "arn:aws:s3:::nlb-log-blog/stg-test/AWSLogs/[アカウントID]/*" ]
[2] に変更後、2つ目のNLBアクセスログ有効化の設定で「この場所の作成」をクリックせずに保存すると、 S3 バケットに2つ目のプレフィックスフォルダーが作成されます。
やってみた
変更前のバケットポリシー
{ "Version": "2012-10-17", "Id": "AWSConsole-AccessLogs-Policy-1631232504909", "Statement": [ { "Sid": "AWSConsoleStmt-1631232504909", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[アカウントID]:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::nlb-log-blog/dev-test/AWSLogs/[アカウントID]/*" }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::nlb-log-blog/dev-test/AWSLogs/[アカウントID]/*", "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:::nlb-log-blog" } ] }
変更後のバケットポリシー
{ "Version": "2012-10-17", "Id": "AWSConsole-AccessLogs-Policy-1631232504909", "Statement": [ { "Sid": "AWSConsoleStmt-1631232504909", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[アカウントID]:root" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::nlb-log-blog/dev-test/AWSLogs/[アカウントID]/*", "arn:aws:s3:::nlb-log-blog/stg-test/AWSLogs/[アカウントID]/*" ] }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::nlb-log-blog/dev-test/AWSLogs/[アカウントID]/*", "arn:aws:s3:::nlb-log-blog/stg-test/AWSLogs/[アカウントID]/*" ], "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:::nlb-log-blog" } ] }
2つ目の NLBアクセスログ有効化の設定で「この場所の作成」をクリックせずに保存した後、S3バケットに2つ目のプレフィックスフォルダーが作成されます。