完全にプライベートな AWS Elastic Beanstalk 環境における、ネットワークの問題をトラブルシューティングしたいです。
簡単な説明
完全プライベート環境の設定は次のようになっており、同じ Amazon Virtual Private Cloud (Amazon VPC) 内からのみウェブアプリケーションにアクセスできます。
- ロードバランサーの可視性: プライベート
- ロードバランサーのサブネット: プライベートサブネット (両方)
- インスタンスのパブリック IP: 無効
- ** インスタンスのサブネット:** プライベートサブネット (両方)
VPC 経由のすべての通信は、設定された VPC エンドポイント経由で行われます。また、VPC 内のすべての通信は、ルートテーブルのローカルルート経由で行われます。ネットワーク構成が原因で環境内で発生する可能性のある一般的なエラーを次に示します。
- Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが Elastic Beanstalk との通信に失敗しました。通信障害は、VPC の設定の問題または EC2 インスタンスの障害が原因です。VPC の設定を確認してから、環境を再度起動してください。
- インスタンスは、許可されたコマンドタイムアウト時間内に応答しませんでした。
解決策
完全にプライベートな Elastic Beanstalk 環境を作成する場合、以下の構成が設定されていることを確認してください。
- 複数のアベイラビリティーゾーンには、少なくとも 2 つのプライベートサブネットを持つ VPC が必要です。
- VPC では DNS ホスト名と DNS 解決が有効になっている必要があります。これらを有効にすると、パブリックサービスエンドポイントをインターフェイス VPC エンドポイントにマッピングする DNS エントリが VPC に追加されます。
- VPC の外部の AWS サービスと VPC 内のインスタンスがこれらのエンドポイント経由で通信できるように、VPC エンドポイントを作成する必要があります。
VPC エンドポイントを確認する
標準の Elastic Beanstalk 環境を正常に作成するには、次の VPC エンドポイントが必要です。
- com.amazonaws.your-region.elasticbeanstalk (Elastic Beanstalk インターフェイスエンドポイント)
- com.amazonaws.your-region.elasticbeanstalk-health (Elastic Beanstalk ヘルスインターフェイスエンドポイント)
- com.amazonaws.your-region.cloudformation (AWS CloudFormation インターフェイスエンドポイント)
- com.amazonaws.your-region.logs (ログインターフェイスエンドポイント)
- com.amazonaws.your-region.sqs (Amazon Simple Queue Service (Amazon SQS) インターフェイスエンドポイント)
- com.amazonaws.your-region.s3 (Amazon Simple Storage Service (Amazon S3) ゲートウェイエンドポイント)
64 ビット Amazon Linux 2 で動作する Docker プラットフォーム上で動作する環境には、以下の追加の VPC エンドポイントが必要です。
- com.amazonaws.your-region.ecr.dkr
- com.amazonaws.your-region.ecr.api
64 ビットの Amazon Linux 2 上で稼働する Amazon Elastic Container Service (Amazon ECS) プラットフォームで実行されている環境には、次の追加の VPC エンドポイントが必要です。
- com.amazonaws.your-region.ecs
- com.amazonaws.your-region.ecr.api
- com.amazonaws.your-region.ecr.dkr
注: Docker およびマルチ Docker 環境を正しく動作させるには、プライベート Docker イメージを提供します。
セキュリティグループを確認します。
インターフェイス VPC エンドポイントを作成するときには、VPC エンドポイントのサブネットとセキュリティグループを選択する必要があります。適切なインバウンドルールが適用されたプライベートサブネットとセキュリティグループを選択してください。
インターフェイス VPC エンドポイントにアタッチされているセキュリティグループには、ポート 443 (HTTPS) のインバウンドルールが必要です。
インバウンドルール:
| | | |
---|
タイプ | プロトコル | ポート範囲 | ソース |
HTTPS | TCP | 443 | クライアントの IP アドレス (注を参照) |
**注:**VPC エンドポイントを経由する受信トラフィックを保護するために、ソースにはクライアントの IP アドレスまたはネットワークのみを指定することを検討してください。
また、インスタンスに関連付けられているセキュリティグループが、ロードバランサーのセキュリティグループからの HTTP トラフィックを許可していることを確認します。
インバウンドルール:
| | | |
---|
タイプ | プロトコル | ポート範囲 | ソース |
HTTP | TCP | 80 | ロードバランサーのセキュリティグループ |
ロードバランサーに関連付けられているセキュリティグループが、インバウンドルール内のすべての HTTP トラフィックを許可していることを確認します。
インバウンドルール:
| | | |
---|
タイプ | プロトコル | ポート範囲 | ソース |
HTTP | TCP | 80 | 0.0.0.0/0 |
注: 上記のどのセキュリティグループでも、エグレストラフィックを制限する必要はありません。
ルートテーブルエントリを確認する
ゲートウェイエンドポイントを作成する場合、ルートテーブルを選択できます。必ず、VPC のプライベートサブネットに関連付けられているルートテーブルを選択してください。プライベートサブネットに関連付けられているルートテーブルには、各ゲートウェイ VPC エンドポイントのルートが必要です。たとえば、Amazon Simple Storage Service (Amazon S3) または Amazon DynamoDB に関連付けられている各ゲートウェイ VPC エンドポイントのルートが必要です。
ルートテーブルエントリ:
| |
---|
宛先 | ターゲット |
172.xx.x.0/16 | local |
pl-63a5xxx | vpce-04xxx |
VPC エンドポイントポリシーを確認する
VPC エンドポイントポリシーでは、Elastic Beanstalk 環境がサービスとプライベートで通信できるようにする必要があります。インターフェイスまたはゲートウェイエンドポイントを作成するときに、エンドポイントポリシーをアタッチできます。エンドポイントポリシーは、どの AWS プリンシパルが VPC エンドポイントを使用してエンドポイントサービスにアクセスできるかを制御します。AWS プリンシパルには、AWS アカウント、AWS Identity and Access Management (IAM) ユーザー、IAM ロールが含まれます。エンドポイントの作成時にエンドポイントポリシーを指定しない場合、エンドポイントにはデフォルトでフルアクセスが付与されます。
Elastic Beanstalk を使用する際に S3 エンドポイントに必要な S3 ゲートウェイ VPC エンドポイントの最小ポリシーの例を次に示します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EBBucketAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject",
"s3:PutBucketPolicy",
"s3:PutObjectVersionAcl"
],
"Resource": [
"arn:aws:s3:::elasticbeanstalk-*",
"arn:aws:s3:::elasticbeanstalk-*/*",
"arn:aws:s3:::cloudformation*/*"
]
}
]
}
関連情報
インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする