Classic Load Balancer のアクセスログの有効化 - エラスティックロードバランシング

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Classic Load Balancer のアクセスログの有効化

ロードバランサーのアクセスログを有効にするには、ロードバランサーがログの格納先として使用する、Amazon S3 バケットの名前を指定する必要があります。また、バケットに書き込むためのアクセス権限を Elastic Load Balancing に付与するバケットポリシーを、このバケットにアタッチする必要があります。

ステップ 1: S3 バケットを作成する

アクセスログの作成を有効にするときは、アクセスログファイルの S3 バケットを指定する必要があります。バケットは、次の要件を満たしている必要があります。

要件
  • バケットは、ロードバランサーと同じリージョンに配置されている必要があります。バケットとロードバランサーは、異なるアカウントにより所有できます。

  • サポートされている唯一のサーバー側の暗号化オプションは、Amazon S3 マネージドキー (SSE-S3) です。詳細については、「Amazon S3 マネージド暗号化キー (SSE-S3)」を参照してください。

Amazon S3 コンソールを使用して S3 バケットを作成するには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケットを作成] を選択します。

  3. [バケットを作成] ページで、次の操作を実行します。

    1. [バケット名] にバケットの名前を入力します。この名前は、Amazon S3 内で既存の、すべてのバケット名の中で一意である必要があります。リージョンによっては、バケット名にその他の制限が設けられていることがあります。詳細については、Amazon S3ユーザーガイド」の「バケットのクォータ、制限、および制限」を参照してください。

    2. [AWS リージョン] で、ロードバランサーを作成したリージョンを選択します。

    3. [デフォルトの暗号化] には、[Amazon S3 マネージドキー (SSE-S3)] を選択します。

    4. [バケットを作成] を選択します。

ステップ 2: S3 バケットにポリシーをアタッチする

S3 バケットには、バケットにアクセスログを書き込む許可を Elastic Load Balancing に付与するバケットポリシーが必要です。バケットポリシーは、バケットのアクセス許可を定義するためにアクセスポリシー言語で記述された JSON ステートメントのコレクションです。各ステートメントには 1 つのアクセス許可に関する情報が含まれ、一連のエレメントが使用されます。

既にポリシーがアタッチされている既存のバケットを使用している場合は、Elastic Load Balancing アクセスログのステートメントをポリシーに追加できます。この場合、結果として作成されるアクセス権限のセットが、アクセスログのバケットへのアクセスを必要とするユーザーに対して適切であることを確認するために、このセットを評価することをお勧めします。

このポリシーは、ログ配信サービスにアクセス許可を付与します。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*" } ] }

にはResource、ポリシー例に示す形式を使用して、アクセスログの場所の ARN を入力します。S3 バケット ARN のリソースパスには、ロードバランサーを持つアカウントのアカウント ID を必ず含めてください。これにより、指定されたアカウントのロードバランサーのみが S3 バケットにアクセスログを書き込むことができます。

指定する ARN は、ステップ 3 でアクセスログを有効にするときにプレフィックスを含めるかどうかによって変わってきます。

プレフィックスを含む S3 バケット ARN の例

S3 バケット名は amzn-s3-demo-logging-bucket で、プレフィックスは ですlogging-prefix。

arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*

〔AWS GovCloud (US)] 次の例では、 の ARN 構文を使用します AWS GovCloud (US) Regions。

arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
プレフィックスを持たない S3 バケット ARN の例

S3 バケット名は ですamzn-s3-demo-logging-bucket。S3 バケット ARN にプレフィックス部分はありません。

arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*

〔AWS GovCloud (US)] 次の例では、 の ARN 構文を使用します AWS GovCloud (US) Regions。

arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*

以前は、2022 年 8 月より前に利用可能なリージョンでは、リージョンに固有の Elastic Load Balancing アカウントにアクセス許可を付与するポリシーが必要でした。このレガシーポリシーは引き続きサポートされていますが、上記の新しいポリシーに置き換えることをお勧めします。ここには示されていないレガシーバケットポリシーを引き続き使用する場合は、使用できます。

参考までに、 で指定する Elastic Load Balancing アカウントの IDs を次に示しますPrincipal。このリストに含まれていないリージョンは、レガシーバケットポリシーをサポートしていないことに注意してください。

  • 米国東部 (バージニア北部) – 127311923021

  • 米国東部 (オハイオ) — 033677994240

  • 米国西部 (北カリフォルニア) – 027434742980

  • 米国西部 (オレゴン) — 797873946194

  • アフリカ (ケープタウン) - 098369216593

  • アジアパシフィック (香港) - 754344448648

  • アジアパシフィック (ジャカルタ) – 589379963580

  • アジアパシフィック (ムンバイ) – 718504428378

  • アジアパシフィック (大阪) – 383597477331

  • アジアパシフィック (ソウル) – 600734575887

  • アジアパシフィック (シンガポール) – 114774131450

  • アジアパシフィック (シドニー) — 783225319266

  • アジアパシフィック (東京) — 582318560864

  • カナダ (中部) – 985666609251

  • 欧州 (フランクフルト) – 054676820928

  • 欧州 (アイルランド) – 156460612806

  • 欧州 (ロンドン) – 652711504416

  • ヨーロッパ (ミラノ) - 635631232127

  • 欧州 (パリ) – 009996457667

  • 欧州 (ストックホルム) – 897822967062

  • 中東 (バーレーン) — 076674570225

  • 南米 (サンパウロ) – 507241528517

  • AWS GovCloud (米国東部) – 190560391635

  • AWS GovCloud (米国西部) – 048591011584

セキュリティを強化するには、正確な S3 バケット ARNs を使用します。

  • S3 バケット ARN だけでなく、完全なリソースパスを使用します。

  • S3 バケット ARN のアカウント ID 部分を含めます。

  • S3 バケット ARN のアカウント ID 部分でワイルドカード (*) を使用しないでください。

バケットポリシーを作成したら、Amazon S3 コンソールや AWS CLI コマンドなどの Amazon S3 インターフェイスを使用して、バケットポリシーを S3 バケットにアタッチします。

コンソールを使用してバケットポリシーをバケットにアタッチするには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. バケットの名前を選択して、その詳細ページを開きます。

  3. [許可] を選択してから、[バケットポリシー][編集] の順に選択します。

  4. 必要な許可を付与するようにバケットポリシーを更新します。

  5. [Save changes] (変更の保存) をクリックします。

を使用して S3 バケットにバケットポリシーをアタッチするには AWS CLI

put-bucket-policy コマンドを使用します。この例では、バケットポリシーは指定された .json ファイルに保存されます。

aws s3api put-bucket-policy \ --bucket amzn-s3-demo-bucket \ --policy file://access-log-policy.json

ステップ 3: アクセスログを設定する

以下の手順を使って、リクエスト情報を取り込み S3 バケットにログファイルを配信するようにアクセスログを設定します。

要件

バケットはステップ 1 で説明した要件を満たしている必要があり、ステップ 2 で説明したようにバケットポリシーをアタッチする必要があります。プレフィックスを指定する場合、「AWSLogs」を含めることはできません。

コンソールを使用したロードバランサーのアクセスログを設定するには
  1. Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

  2. ナビゲーションペインの [ロードバランシング][ロードバランサー] を選択します。

  3. ロードバランサーの名前を選択して、その詳細ページを開きます。

  4. [属性] タブで、[編集] を選択します。

  5. [ロードバランサー属性の編集] ページの [モニタリング] セクションで、次の操作を実行します。

    1. [アクセスログ] を有効にします。

    2. [S3 ロケーション] には、ログファイルの S3 URI を入力します。指定する URI は、プレフィックスを使用しているかどうかによって異なります。

      • プレフィックスが付いた URI: s3://amzn-s3-demo-logging-bucket/logging-prefix

      • プレフィックスなしの URI: s3://amzn-s3-demo-logging-bucket

    3. [ロギング間隔] は 60 minutes - default のままにしておきます。

    4. [Save changes] (変更の保存) をクリックします。

を使用してロードバランサーのアクセスログを設定するには AWS CLI

まず、Elastic Load Balancing が 60 分ごとにログをキャプチャし、ログ用に作成した S3 バケットにそれを配信できるようにする .json ファイルを作成します。

{ "AccessLog": { "Enabled": true, "S3BucketName": "amzn-s3-demo-logging-bucket", "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": "amzn-s3-demo-logging-bucket", "S3BucketPrefix": "my-app" } }, "LoadBalancerName": "my-loadbalancer" }
アクセスログの S3 バケットを管理するには

アクセスログ用に設定したバケットを削除する前に、必ずアクセスログを無効にします。そうしないと、同じ名前の新しいバケットと AWS アカウント 、所有していない で作成された必要なバケットポリシーがある場合、Elastic Load Balancing はロードバランサーのアクセスログをこの新しいバケットに書き込む可能性があります。

ステップ 4: バケット許可を確認

アクセスログをロードバランサーで有効にすると、Elastic Load Balancing は S3 バケットを検証し、テストファイルを作成して、バケットポリシーが必要なアクセス権限を指定するようにします。S3 コンソールを使用して、テストファイルが作成されたことを確認できます。テストファイルは実際のアクセスログファイルではなく、レコード例は含まれていません。

Elastic Load Balancing が S3 バケットにテストファイルを作成したことを確認するには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. アクセスログ用に指定した S3 バケットの名前を選択します。

  3. テストファイル「ELBAccessLogTestFile」に移動します。場所は、プレフィックスを使用しているかどうかによって異なります。

    • プレフィックスがある場合の場所:amzn-s3-demo-loadbalancer-logs/logging-prefix/AWSLogs/123456789012/ELBAccessLogTestFile

    • プレフィックスのない場合の場所:amzn-s3-demo-loadbalancer-logs/AWSLogs/123456789012/ELBAccessLogTestFile

トラブルシューティング

バケットへのアクセスが拒否されました: bucket-name。S3 バケットの許可を確認してください

このエラーが表示される場合は、以下の原因が考えられます。

  • バケットが、バケットにアクセスログを書き込む許可を Elastic Load Balancing に付与しない。そのリージョンに対して正しいバケットポリシーを使用していることを確認してください。リソース ARN で、アクセスログを有効にしたときに指定したのと同じバケット名が使用されていることを確認します。アクセスログを有効にしたときにプレフィックスを指定しなかった場合は、リソース ARN にプレフィックスが含まれていないことを確認してください。

  • バケットが、サポートされていないサーバー側の暗号化オプションを使用している。バケットは、Amazon S3 マネージドキー (SSE-S3) を使用する必要があります。