VPC フローログを S3 バケットへ配信しようとするとアクセスエラーになる

VPC フローログを S3 バケットへ配信しようとするとアクセスエラーになる

2025.09.03

困っていること

VPC フローログを S3 バケットに配信したいのですが、「アクセスエラー ログの送信先にアクセスできません。」と表示され、配信できません。どうしたらいいですか?
スクリーンショット 2025-09-03 15.03.51

どう対応すればいいの?

ログの送信先である S3 バケットの暗号化設定を確認してください。暗号化のタイプが SSE-KMS の場合、KMS キーポリシーに以下の権限を追加する必要があります。

{
    "Sid": "Allow Logs Delivery to use the key", 
    "Effect": "Allow", 
    "Principal": {
        "Service": [ "delivery.logs.amazonaws.com" ] 
    }, 
    "Action": [ 
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": ["0123456789"]
        },
        "ArnLike": {
            "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"]
        }
        }
}

上記ポリシーは、Amazon S3 バケットのサーバー側の暗号化 より引用

やってみた

以下の構成でやってみます。EC2 のネットワークインターフェースに対して VPC フローログを設定します。
VPCフローログ.drawio

KMS キーの作成

S3 暗号化に使用する KMS キーを作成します。

KMS コンソールから「キーの作成」を選びます。
スクリーンショット 2025-09-03 15.22.56

キーのタイプは「対称」、使用法は「暗号化および復号化」を選びます。
スクリーンショット 2025-09-03 15.25.37

その後、任意のエイリアス名を設定し、その他はデフォルト設定とし、何も変更しません。キーポリシーも以下の通りデフォルトのまま使用します。
スクリーンショット 2025-09-03 15.31.01

作成できました。
スクリーンショット 2025-09-03 15.42.44

S3 バケットの作成

VPC フローログの配信先となる S3 バケットを作成します。
基本的にデフォルト設定で作成しますが、作成時の「デフォルトの暗号化」の部分のみ、以下のように「SSE-KMS」を選択します。キーは前述のものを指定します。
スクリーンショット 2025-09-03 15.47.32

作成できました。
スクリーンショット 2025-09-03 15.49.56

EC2, IAM ロール, フローログの作成

EC2 インスタンスの作成, VPC フローログに指定する IAM ロールの作成, 実際のフローログの設定方法については下記ブログを参照し、設定します。(下記ブログにもありますが、IAM ロールの信頼ポリシーの Principal には vpc-flow-logs.amazonaws.com を指定してください。)
https://dev.classmethod.jp/articles/tsnote-how-to-resolve-access-error-when-configuring-vpc-flow-logs/#%25E3%2582%2584%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%25BF%25E3%2581%259F

なお、フローログ設定時の送信先は、前述の S3 バケットを指定します。
スクリーンショット 2025-09-03 16.47.13

フローログの設定が完了しました。しかし、現段階では以下の通りアクセスエラーとなっています。
スクリーンショット 2025-09-03 15.03.51

KMS キーポリシーの修正

今回フローログを配信する S3 は SSE-KMS にて暗号化されているため、以下ドキュメントの内容に従い、キーポリシーを修正します。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-S3.html#AWS-logs-SSE-KMS-S3

修正後のキーポリシー
{
	"Version": "2012-10-17",
	"Id": "key-consolepolicy-3",
	"Statement": [
		{
			"Sid": "Enable IAM User Permissions",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::<アカウント ID>:root"
			},
			"Action": "kms:*",
			"Resource": "*"
		},
		{
			"Sid": "Allow Logs Delivery to use the key",
			"Effect": "Allow",
			"Principal": {
				"Service": "delivery.logs.amazonaws.com"
			},
			"Action": [
				"kms:Encrypt",
				"kms:Decrypt",
				"kms:ReEncrypt*",
				"kms:GenerateDataKey*",
				"kms:DescribeKey"
			],
			"Resource": "*",
			"Condition": {
				"StringEquals": {
					"aws:SourceAccount": "<アカウント ID>"
				},
				"ArnLike": {
					"aws:SourceArn": "arn:aws:logs:ap-northeast-1:<アカウント ID>:*"
				}
			}
		}
	]
}

動作確認

キーポリシー修正後、ステータスがアクティブに変わりました!(自分の環境だとステータスがアクティブ表示になるまでは 20 分ほどかかっていました。)
スクリーンショット 2025-09-03 16.53.58

S3 バケットを確認すると、ログ書き込みもちゃんとできていました。よかったです。
スクリーンショット 2025-09-03 16.55.54

終わりに

今回は VPC フローログの S3 配信時における「アクセスエラー」を解消してみました。原因はキーポリシーにありましたが、同エラーについては別の要因で発生することもあります。下記ブログもフローログ設定時のアクセスエラーについて記載がありますため、適宜ご参考にしていただければと存じます。
https://dev.classmethod.jp/articles/tsnote-how-to-resolve-access-error-when-configuring-vpc-flow-logs/

参考情報

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-S3.html#AWS-logs-SSE-KMS-S3
https://dev.classmethod.jp/articles/tsnote-how-to-resolve-access-error-when-configuring-vpc-flow-logs/

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.