

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

# Application Load Balancer のアクセスログを有効にする
<a name="enable-access-logging"></a>

ロードバランサーのアクセスログを有効にする場合は、ロードバランサーがログを保存する S3 バケットの名前を指定する必要があります。このバケットは、バケットにアクセスログを書き込む許可を Elastic Load Balancing に付与するバケットポリシーが必要です。

**Topics**
+ [ステップ 1: S3 バケットを作成する](#access-log-create-bucket)
+ [ステップ 2: S3 バケットにポリシーをアタッチする](#attach-bucket-policy)
+ [ステップ 3: アクセスログを設定する](#enable-access-logs)
+ [ステップ 4: バケット許可を確認](#verify-bucket-permissions)
+ [トラブルシューティング](#bucket-permissions-troubleshooting)

## ステップ 1: S3 バケットを作成する
<a name="access-log-create-bucket"></a>

アクセスログを有効にするときは、アクセスログの S3 バケットを指定する必要があります。既存のバケットを使用するか、アクセスログ専用のバケットを作成できます。バケットは、次の要件を満たしている必要があります。

**要件**
+ バケットは、ロードバランサーと同じリージョンに配置されている必要があります。バケットとロードバランサーは、異なるアカウントにより所有できます。
+ サポートされている唯一のサーバー側の暗号化オプションは、Amazon S3 マネージドキー (SSE-S3) です。詳細については、 「 [Amazon S3 マネージド暗号化キー (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)」を参照してください。

**Amazon S3 コンソールを使用して S3 バケットを作成するには**

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

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

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

   1. **[バケット名]** にバケットの名前を入力します。この名前は、Amazon S3 内で既存の、すべてのバケット名の中で一意である必要があります。リージョンによっては、バケット名にその他の制限が設けられていることがあります。詳細については、*Amazon S3 ユーザーガイド*の「[バケットの制約と制限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」を参照してください。

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

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

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

## ステップ 2: S3 バケットにポリシーをアタッチする
<a name="attach-bucket-policy"></a>

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

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

### バケットポリシー
<a name="bucket-policy-logdelivery"></a>

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

****  

```
{
  "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](#enable-access-logs) でアクセスログを有効にするときにプレフィックスを含めるかどうかによって変わってきます。

**プレフィックスを含む 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)** – 次の例では、 AWS GovCloud (US) Regionsの ARN 構文を使用します。

```
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)** – 次の例では、 AWS GovCloud (US) Regionsの ARN 構文を使用します。

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

### レガシーバケットポリシー
<a name="legacy-bucket-policy"></a>

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

 参考までに、レガシーポリシーの `Principal` で指定する Elastic Load Balancing アカウントの ID を次に示します。このリストに含まれていないリージョンは、レガシーポリシーをサポートしていないことに注意してください。
+ 米国東部 (バージニア北部) – 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

### Outposts ゾーン
<a name="bucket-policy-outposts"></a>

次のポリシーを使用して、指定されたログ配信サービスに許可を付与します。Outposts ゾーンのロードバランサーにはこのポリシーを使用します。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "logdelivery.elb.amazonaws.com"
    },
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*",
    "Condition": {
        "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
        }
    }
}
```

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

指定する S3 バケット ARN は、[ステップ 3](#enable-access-logs) でアクセスログを有効にするときにプレフィックスを含めるかどうかによって変わってきます。

**プレフィックスを含む S3 バケット ARN の例**  
S3 バケット名は amzn-s3-demo-logging-bucket で、プレフィックスは logging-prefix です。

```
arn:aws: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/*
```

### セキュリティのベストプラクティス
<a name="bucket-policy-security-best-practices"></a>
+ S3 バケット ARN のアカウント ID 部分を含む完全なリソースパスを使用します。S3 バケット ARN のアカウント ID 部分にワイルドカード (\$1) を使用しないでください。

  ```
  "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
  ```
+ `aws:SourceArn` を使用して、指定されたリージョンとアカウントのロードバランサーのみがバケットを使用できるようにします。

  ```
  "Condition": {
      "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/*"
      }
  }
  ```
+ `aws:SourceOrgId` を `aws:SourceArn` と共に使用して、指定した組織のロードバランサーのみがバケットを使用できるようにします。

  ```
  "Condition": {
      "StringEquals": {
          "aws:SourceOrgId": "o-1234567890"
      },
      "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticloadbalancing:*:*:loadbalancer/*"
      }
  }
  ```
+ 明示的に許可されているもの以外のサービスプリンシパルへのアクセスを禁止する `Deny` ステートメントがある場合は、許可されたサービスプリンシパルのリストに `logdelivery.elasticloadbalancing.amazonaws.com` を必ず追加してください。たとえば、`aws:PrincipalServiceNamesList` 条件を使用した場合は、次のように `logdelivery.elasticloadbalancing.amazonaws.com` を追加します。

  ```
  {
    "Effect": "Deny",
    "Principal": "*",
    "Condition": {
        "StringNotEqualsIfExists": {
            "aws:PrincipalServiceNamesList": [
                "logdelivery.elasticloadbalancing.amazonaws.com",
                "service.amazonaws.com"
            ]
        }
    }
  }
  ```

  `NotPrincipal` 要素を使用した場合は、次のように `logdelivery.elasticloadbalancing.amazonaws.com` を追加します。`NotPrincipal` 要素を使用する代わりに、`aws:PrincipalServiceName` または `aws:PrincipalServiceNamesList` 条件キーを使用してサービスプリンシパルを明示的に許可することをお勧めします。詳細については、「[NotPrincipal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html)」を参照してください。

  ```
  {
    "Effect": "Deny",
    "NotPrincipal": {
      "Service": [
         "logdelivery.elasticloadbalancing.amazonaws.com",
         "service.amazonaws.com"
      ]
    }
  },
  ```

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

------
#### [ Console ]

**バケットポリシーを S3 バケットにアタッチするには**

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

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

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

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

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

------
#### [ AWS CLI ]

**バケットポリシーを S3 バケットにアタッチするには**  
[put-bucket-policy](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html) コマンドを使用します。この例では、バケットポリシーは指定された .json ファイルに保存されます。

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

------

## ステップ 3: アクセスログを設定する
<a name="enable-access-logs"></a>

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

**要件**  
バケットは[ステップ 1](#access-log-create-bucket) で説明した要件を満たしている必要があり、[ステップ 2](#attach-bucket-policy) で説明したようにバケットポリシーをアタッチする必要があります。プレフィックスを指定する場合は、文字列「AWSLogs」を含めることはできません。

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

------
#### [ Console ]

**アクセスログを有効にするには**

1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. ナビゲーションペインで、[**ロードバランサー**] を選択します。

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

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

1. **[モニタリング]** で **[アクセスログ]** をオンにします。

1. **[S3 ロケーション]** には、ログファイルの S3 URI を入力します。指定する URI は、プレフィックスを使用しているかどうかによって異なります。
   + プレフィックスがある URI: s3://*amzn-s3-demo-logging-bucket*/*logging-prefix*
   + プレフィックスがない URI:: s3://*amzn-s3-demo-logging-bucket*

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

------
#### [ AWS CLI ]

**アクセスログを有効にするには**  
関連する属性で [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) コマンドを使用します。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes \
        Key=access_logs.s3.enabled,Value=true \
        Key=access_logs.s3.bucket,Value=amzn-s3-demo-logging-bucket \
        Key=access_logs.s3.prefix,Value=logging-prefix
```

------
#### [ CloudFormation ]

**アクセスログを有効にするには**  
[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html) リソースを更新して、関連する属性を含めます。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "access_logs.s3.enabled"
          Value: "true"
        - Key: "access_logs.s3.bucket"
          Value: "amzn-s3-demo-logging-bucket"
        - Key: "access_logs.s3.prefix"
          Value: "logging-prefix"
```

------

## ステップ 4: バケット許可を確認
<a name="verify-bucket-permissions"></a>

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

**Amazon S3 コンソールを使用して、バケットにテストファイルが作成されたことを確認するには**

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

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

1. テストファイル「`ELBAccessLogTestFile`」に移動します。場所は、プレフィックスを使用しているかどうかによって異なります。
   + プレフィックス付きロケーション: *amzn-s3-demo-logging-bucket*/*logging-prefix*/AWSLogs/*123456789012*/ELBAccessLogTestFile
   + プレフィックスなしのロケーション: *amzn-s3-demo-logging-bucket*/AWSLogs/*123456789012*/ELBAccessLogTestFile

## トラブルシューティング
<a name="bucket-permissions-troubleshooting"></a>

アクセス拒否エラーが表示される場合は、以下の原因が考えられます。
+ バケットが、バケットにアクセスログを書き込む許可を Elastic Load Balancing に付与しない。そのリージョンに対して正しいバケットポリシーを使用していることを確認してください。リソース ARN で、アクセスログを有効にしたときに指定したのと同じバケット名が使用されていることを確認します。アクセスログを有効にしたときにプレフィックスを指定しなかった場合は、リソース ARN にプレフィックスが含まれていないことを確認してください。
+ バケットが、サポートされていないサーバー側の暗号化オプションを使用している。バケットは、Amazon S3 マネージドキー (SSE-S3) を使用する必要があります。