🎯 まず結論!このエラーの原因と解決策
このエラーは「AWS ConfigがS3バケットにログを配信できない」という権限の問題です
S3バケットポリシーにAWS Configへの書き込み許可がない
IAMロールに必要な権限(s3:PutObject等)が不足
設定ミス(バケット名にARNを使用等)
📬 たとえ話で理解しよう!「郵便配達と郵便受け」
AWS Config
= 郵便配達員
AWSリソースの設定変更を
記録して配達する
S3バケット
= 郵便受け
設定履歴やスナップショットを
保管する場所
今起きていること
「郵便配達員(AWS Config)が郵便受け(S3バケット)に
手紙を入れようとしたけど、鍵がかかっていて入れられない!」
郵便受けの持ち主(バケットポリシー)が「この配達員は入れてOK」と許可していないのです
🔗 AWS Configの仕組みを理解しよう
AWSリソース
EC2、S3、RDSなど
監視対象のリソース
AWS Config
リソースの設定変更を
監視・記録するサービス
S3バケット
設定履歴の保存先
(ここへの配信が失敗中)
📝 配信チャネル(Delivery Channel)
AWS ConfigからS3への「配送ルート」を定義する設定
📊 正常な流れ vs 今のエラー状態
✅ 正常な流れ
❌ 今のエラー状態
❓ エラーの原因を詳しく理解しよう
🛠️ 解決手順(ステップバイステップ)
📋 S3バケットポリシーを確認・修正する
S3コンソールでバケットを選択 → 「アクセス許可」タブ → 「バケットポリシー」を編集。 config.amazonaws.com サービスプリンシパルに書き込み権限を付与します。
🔑 IAMロールの権限を確認する
AWS Configに割り当てられているIAMロールに、S3への書き込み権限(s3:PutObject*、s3:GetBucketAcl)があることを確認します。
⚙️ 設定値を確認する
Delivery Channelの設定で、S3バケット名がARNではなく「バケット名のみ」になっているか確認します。
🔐 KMS設定を確認する(暗号化使用時)
S3バケットがKMS暗号化されている場合、KMSキーポリシーにもconfig.amazonaws.comへのアクセス許可を追加します。
📝 必要なポリシー設定(コピペOK!)
{ "Version": "2012-10-17", "Statement": [ // ① バケットのACL確認権限 { "Sid": "AWSConfigBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::YOUR-BUCKET-NAME", "Condition": { "StringEquals": { "AWS:SourceAccount": "YOUR-ACCOUNT-ID" } } }, // ② バケットの存在確認権限 { "Sid": "AWSConfigBucketExistenceCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::YOUR-BUCKET-NAME", "Condition": { "StringEquals": { "AWS:SourceAccount": "YOUR-ACCOUNT-ID" } } }, // ③ オブジェクトの書き込み権限(これが最重要!) { "Sid": "AWSConfigBucketDelivery", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/AWSLogs/YOUR-ACCOUNT-ID/Config/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "AWS:SourceAccount": "YOUR-ACCOUNT-ID" } } } ] }
YOUR-ACCOUNT-ID → 12桁のAWSアカウントID(例:123456789012)
{ "Sid": "AWSConfigKMSPolicy", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceAccount": "YOUR-ACCOUNT-ID" } } }
✅ 解決確認チェックリスト
s3_bucket_name = "arn:aws:s3:::my-bucket" → NG!s3_bucket_name = "my-bucket" → OK!❌ 間違い②:depends_on を設定し忘れる
Terraformなどでは、Delivery ChannelがConfiguration Recorderに依存していることを明示する必要があります。
❌ 間違い③:リージョン固有の問題を見落とす
一部のリージョン(香港など)では追加の設定が必要な場合があります。
❓ よくある質問(FAQ)
カスタムIAMロール:より細かい制御が可能ですが、手動でS3やSNSへの権限を設定する必要があります。
🎉 これで解決!
S3バケットポリシーを正しく設定すれば、AWS Configは正常に動作します