Classic Load Balancer のアクセスログの有効化
ロードバランサーのアクセスログを有効にするには、ロードバランサーがログを格納する Amazon S3 バケットの名前を指定する必要があります。また、バケットに書き込むための Elastic Load Balancing アクセス権限を付与するバケットポリシーをこのバケットにアタッチする必要があります。
バケットとロードバランサーは同じリージョンに存在する必要があります。バケットは、ロードバランサーを所有するアカウントとは別のアカウントが所有するものでもかまいません。
タスク
ステップ 1: S3 バケットを作成する
S3 バケットは、Amazon S3 コンソールを使用して作成できます。バケットがすでにあり、それをアクセスログの保管に使用する場合は、このステップをスキップして「ステップ 2: S3 バケットにポリシーをアタッチする」に進み、バケットにログを書き込むためのアクセス権限を Elastic Load Balancing に付与します。
コンソールを使用してアクセスログを有効にする場合は、このステップをスキップし、必要なアクセス権限を持つバケットを Elastic Load Balancing に代わりに作成させることができます。AWS CLI を使用してアクセスログを有効にする場合は、バケットを作成し、必要なアクセス権限を付与する必要があります。
要件
-
バケットは、ロードバランサーと同じリージョンに配置されている必要があります。
-
Amazon S3 で管理された暗号化キー (SSE-S3) が必要です。その他の暗号化オプションはサポートされていません。
Amazon S3 コンソールを使用して S3 バケットを作成するには
-
https://console.aws.amazon.com/s3/
にある Amazon S3 コンソールを開きます。 -
[バケットを作成する] を選択します。
-
[バケットの作成] ページで、次の操作を実行します。
-
[バケット名] にバケットの名前を入力します。この名前は、Amazon S3 にある既存のすべてのバケット名と異なる必要があります。リージョンによっては、バケット名にその他の制限が設けられていることがあります。詳細については、Amazon Simple Storage Service 開発者ガイドの「バケットの制約と制限」を参照してください。
-
[リージョン] で、ロードバランサーを作成したリージョンを選択します。
-
[Create] を選択します。
-
ステップ 2: S3 バケットにポリシーをアタッチする
S3 バケットを作成または指定した後は、バケットにポリシーをアタッチする必要があります。バケットポリシーは、バケットのアクセス許可を定義するためにアクセスポリシー言語で記述された JSON ステートメントのコレクションです。各ステートメントには 1 つのアクセス許可に関する情報が含まれ、一連のエレメントが使用されます。
バケットにポリシーがすでにアタッチされている場合、Elastic Load Balancing アクセスログのステートメントをポリシーに追加できます。この場合、結果として作成されるアクセス権限のセットが、アクセスログのバケットへのアクセスを必要とするユーザーに対して適切であることを確認するために、このセットを評価することをお勧めします。
コンソールを使用してアクセスログを有効にする場合は、このステップをスキップし、必要なアクセス権限を持つバケットを Elastic Load Balancing に代わりに作成させることができます。
バケットにポリシーステートメントをアタッチするには
-
https://console.aws.amazon.com/s3/
にある Amazon S3 コンソールを開きます。 -
バケットを選択します。[Permissions]、[Bucket Policy] の順に選択します。
-
新しいバケットポリシーを作成する場合は、このポリシードキュメント全体をポリシーエディタにコピーし、プレースホルダーをお客様のバケットのバケット名とプレフィックス、Elastic Load Balancing 用の AWS アカウントの ID (ロードバランサーのリージョンに基づく)、お客様の AWS アカウントの ID に置き換えます。既存のバケットポリシーを編集する場合は、ポリシードキュメントから新しいステートメント (
Statement
要素の [ と ] の間のテキスト) をコピーします。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
elb-account-id
:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name
/prefix
/AWSLogs/your-aws-account-id
/*" }, { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name
/prefix
/AWSLogs/your-aws-account-id
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }, { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::bucket-name
" } ] }次の表に、バケットポリシーで使用するアカウント ID を示します。
リージョン リージョン名 Elastic Load Balancing アカウント ID us-east-1
米国東部(バージニア北部) 127311923021 us-east-2
米国東部 (オハイオ) 033677994240 us-west-1
米国西部 (北カリフォルニア) 027434742980 us-west-2
米国西部 (オレゴン) 797873946194 af-south-1
アフリカ (ケープタウン) 098369216593 ca-central-1
カナダ (中部) 985666609251 eu-central-1
欧州 (フランクフルト) 054676820928 eu-west-1
欧州 (アイルランド) 156460612806 eu-west-2
欧州 (ロンドン) 652711504416 eu-south-1
ヨーロッパ (ミラノ) 635631232127 eu-west-3
欧州 (パリ) 009996457667 eu-north-1
欧州 (ストックホルム) 897822967062 ap-east-1
アジアパシフィック (香港) 754344448648 ap-northeast-1
アジアパシフィック (東京) 582318560864 ap-northeast-2
アジアパシフィック (ソウル) 600734575887 ap-northeast-3
アジアパシフィック (大阪: ローカル) 383597477331 ap-southeast-1
アジアパシフィック (シンガポール) 114774131450 ap-southeast-2
アジアパシフィック (シドニー) 783225319266 ap-south-1
アジアパシフィック (ムンバイ) 718504428378 me-south-1
中東 (バーレーン) 076674570225 sa-east-1
南米 (サンパウロ) 507241528517 us-gov-west-1
*AWS GovCloud (US-West) 048591011584 us-gov-east-1
*AWS GovCloud (米国東部) 190560391635 cn-north-1
*中国 (北京) 638102146993 cn-northwest-1
*中国 (寧夏) 037604701340 * これらのリージョンには個別のアカウントが必要です。詳細については、「AWS GovCloud (米国西部)
」および「中国 (北京) 」を参照してください。 -
[保存] を選択します。
ステップ 3: アクセスログを有効にする
AWS マネジメントコンソール または AWS CLI を使用して、アクセスログを有効にできます。コンソールを使用してアクセスログを有効にするときは、ロードバランサーがバケットに書き込むために必要なアクセス権限を指定したバケットを、Elastic Load Balancing に代わりに作成させることができます。
次の例を使用して、S3 バケットのログを 60 分ごと (デフォルトの間隔) に収集して配信します。
コンソールを使用したロードバランサーのアクセスログの有効化
-
https://console.aws.amazon.com/ec2/
で Amazon EC2 コンソールを開きます。 -
ナビゲーションペインの [LOAD BALANCING] で [ロードバランサー] を選択します。
-
ロードバランサーを選択します。
-
[説明] タブで、[アクセスログの設定] を選択します。
-
[Configure Access Logs] ページで以下の操作を実行します。
-
[Enable access logs] を選択します。
-
[Interval] はデフォルト (
60 minutes
) のままにします。 -
[S3 location] に、プレフィックスを含めて S3 バケットの名前を入力します (たとえば
my-loadbalancer-logs/my-app
)。既存のバケットの名前や新しいバケットの名前を指定できます。 -
(オプション) バケットが存在しない場合は、[Create this location for me] を選択します。Amazon S3 内のすべての既存のバケット名全体で一意な名前を指定し、DNS 命名規則に従う必要があります。詳細については、Amazon Simple Storage Service 開発者ガイドの「バケット命名規則」を参照してください。
-
[保存] を選択します。
-
AWS CLI を使用してロードバランサーのアクセスログを有効にするには
まず、Elastic Load Balancing が 60 分ごとにログを収集し、ログ用に作成した S3 バケットに配信できるようにする .json ファイルを作成します。
{ "AccessLog": { "Enabled": true, "S3BucketName": "
my-loadbalancer-logs
", "EmitInterval": 60, "S3BucketPrefix": "my-app
" } }
アクセスログを有効にするには、次のように、modify-load-balancer-attributes コマンドでこの .json ファイルを指定します。
aws elb modify-load-balancer-attributes --load-balancer-name
my-loadbalancer
--load-balancer-attributes file://my-json-file
.json
以下に、応答の例を示します。
{
"LoadBalancerAttributes": {
"AccessLog": {
"Enabled": true,
"EmitInterval": 60,
"S3BucketName": "my-loadbalancer-logs",
"S3BucketPrefix": "my-app"
}
},
"LoadBalancerName": "my-loadbalancer"
}
ステップ 4: ロードバランサーにより S3 バケットにテストファイルが作成されたことを確認する
ロードバランサーのアクセスログを有効にすると、Elastic Load Balancing が S3 バケットを検証し、テストファイルを作成します。S3 コンソールを使用して、テストファイルが作成されたことを確認できます。
Elastic Load Balancing により S3 バケットにテストファイルが作成されたことを確認するには
-
https://console.aws.amazon.com/s3/
にある Amazon S3 コンソールを開きます。 -
S3 バケットを選択します。
-
アクセスログ記録用に指定したバケットに移動し、
ELBAccessLogTestFile
を探します。たとえば、コンソールを使用してバケットとバケットポリシーを作成した場合、パスは次のようになります。my-bucket
/prefix
/AWSLogs/123456789012
/ELBAccessLogTestFile
アクセスログの S3 バケットを管理するには
アクセスログを有効にしたら、アクセスログを有効にしたバケットを削除する前に、必ずアクセスログを無効にします。そうしないと、同じ名前を持ち、所有していない AWS アカウントで必要なバケットポリシーが作成された新しいバケットがある場合、Elastic Load Balancing はロードバランサーのアクセスログをその新しいバケットに書き込む可能性があります。