翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
VPC のセキュリティ要件の判断
[重要]
VPC のアウトバウンドトラフィックのセキュリティアーキテクチャは、テスト環境で設計しテストするのがベストプラクティスとなります。アーキテクチャの変更を開発環境でテストすることで、意図しないシステム動作が稼働するリスクを減らせます。
ネットワークのアウトバウンドトラフィックのパターンを変更するときは、アプリケーションを意図したとおりに動かすにはどのようなトラフィックパターンが必要なのかを理解しておくことが重要です。この情報は、ネットワークを再構築する際に、どのトラフィックパターンを許可し、どのパターンを拒否するのかを判断するのに役立ちます。
VPC のアウトバウンドトラフィックの、既存のパターンを分析するときは、まず VPC フローログを有効にします。次に、テスト環境を使って、さまざまな使用シナリオでアプリケーションを実行し、シミュレートされたトラフィックをフローログで分析します。
VPC フローログは、VPC のインバウンドとアウトバウンドの IP トラフィックを記録します。次に、Amazon VPC がそれらのログを Amazon Simple Storage Service (Amazon S3) または Amazon CloudWatch に送信します。これらのログは、次のいずれかのツールを使って閲覧し分析することができます。
(Amazon S3 用) Amazon Athena
(CloudWatch 用) CloudWatch Logs Insights
詳細およびクエリの例については、以下を参照してください。
Amazon VPC フローログのクエリ (Amazon Athena ユーザーガイド)
VPC フローログで CloudWatch Logs Insights のクエリを使用するにはどうすればよいですか?
(AWS ナレッジセンター) CloudWatch Logs Insights のクエリ構文 (Amazon CloudWatch Logs ユーザーガイド)
VPC フローログでキャプチャされる情報の種類については、「Amazon VPC ユーザーガイド」の「フローログレコードの例」を参照してください。
メモ
VPC フローログは、DNS ホスト名など、アプリケーションレイヤー (レイヤー 7) の情報はキャプチャしません。セキュリティ要件で、アプリケーションレイヤーにあるデータの分析が必要とされている場合は、AWS Network Firewall
VPC フローログの使用時に VPC のアウトバウンドトラフィックを分析する際のベストプラクティス
VPC フローログを Amazon Athena または CloudWatch Logs Insights クエリのいずれかを使用して分析するときは、必ず以下を行います。
アプリケーションで使用されるリソースにアタッチされた Elastic Network Interface を通過する、インバウンドおよびアウトバウンドのトラフィックを特定し分析します。
NAT ゲートウェイにアタッチされたネットワークインターフェイスを通過する、アプリケーショントラフィックを特定し分析します。
クエリ内の送信元アドレスを、ネットワークインターフェイスのプライベート IP アドレスに変更して、ネットワークインターフェイスのすべてのアウトバウンドトラフィックをキャプチャします。
予期しないトラフィックパターンのみに焦点を絞ったクエリを作成します (例えば、アプリケーションが HTTPS API エンドポイントのようなサードパーティーのエンティティと通信している場合、そのエンティティを含めないようにクエリを構成できます)。
各ポートと送信先 IP アドレスの有効性を確認します (例えば、アウトバウンドの送信先ポート 22 は、踏み台ホスト、または SSH を使用して Git のリポジトリをクローンするホストにとっては通常のポートとなる可能性があります)。
メモ
Amazon Athena を使用するのが初めてである場合は、クエリの結果の場所を設定します。手順については、「Amazon Athena ユーザーガイド」の「Athena コンソールを使用したクエリ結果の場所の指定」を参照してください。
Amazon Athena のクエリの例
特定のネットワークインターフェイスからアウトバウンドの管理トラフィックを返す Athena クエリの例
次の Athena クエリは、IP アドレスが 10.100.0.10 であるネットワークインターフェイスから、アウトバウンドの管理トラフィックの最初の 200 行を返します。
SELECT * FROM "<vpc_flow_logs_table_name>" WHERE interface_id = 'eni-1234567890000000' AND srcaddr LIKE '10.100.0.10' AND dstport < 1024 LIMIT 200;
出力例
# |
1 |
version |
2 |
account_id |
<account-id> |
interface_id |
eni-123456789000000 |
srcaddr |
10.32.0.10 |
dstaddr |
11.22.33.44 |
srcport |
36952 |
dstport |
443 |
protocol |
6 |
packets |
25 |
bytes |
5445 |
start |
1659310200 |
end |
1659310225 |
アクション |
ACCEPT |
log_status |
OK |
date |
2022-07-16 |
メモ
このパターンのこちらの出力は説明用に書かれたものであるため、お使いのシステムとは表示の仕方が異なる場合があります。
大半のトラフィックを特定の VPC から受信している外部 IP アドレスを返す Athena クエリの例
次の Athena クエリは、大半のアウトバウンドトラフィックを、CIDR ブロックが「10.32」 で始まる VPC から受信している、外部の IP アドレスとポートを返します。
SELECT dstport, dstaddr, count(*) AS count FROM "<vpc_flow_logs_table_name>" WHERE dstaddr not like '10.32%' AND interface_id = 'eni-1234567890000000' GROUP BY dstport, dstaddr ORDER BY count desc LIMIT 200;
出力例
# | dstport | Dstaddr | count |
1 | 443 | 52.x.x.x | 1442 |
2 | 443 | 63.x.x.x | 1201 |
3 | 443 | 102.x.x.x | 887 |
特定のVPC から拒否されたアウトバウンドトラフィックを返す Athena クエリの例
次の Athena クエリは、CIDR ブロックが「10.32」で始まる VPC から拒否されたアウトバウンドトラフィックを返します。
SELECT * FROM "<vpc_flow_logs_table_name>" WHERE srcaddr like '10.32%' AND action LIKE 'REJECT'
出力例
# |
1 |
version |
2 |
account_id |
<account-id> |
interface_id |
eni-123456789000000 |
srcaddr |
10.32.0.10 |
dstaddr |
11.22.33.44 |
srcport |
36952 |
dstport |
443 |
protocol |
6 |
packets |
25 |
bytes |
5445 |
start |
1659310200 |
end |
1659310225 |
アクション |
REJECT |
log_status |
OK |
date |
2022-07-16 |
メモ
このパターンのこちらの出力は説明用に書かれたものであるため、お使いのシステムとは表示の仕方が異なる場合があります。
Athena のクエリ結果の解釈の方法については、「Amazon VPC ユーザーガイド」の「フローログレコード」を参照してください。
CloudWatch Logs Insights のクエリの例
特定のネットワークインターフェイスからアウトバウンドの管理トラフィックを返す CloudWatch Logs Insights クエリの例
次の CloudWatch Logs Insights クエリは、IP アドレスが 10.100.0.10 であるネットワークインターフェイスから、アウトバウンドの管理トラフィックの、最初の 200 の結果を返します。
fields @timestamp, @message | filter interfaceId = 'eni-1234567890000000' | filter srcAddr = '10.100.0.10' | filter dstPort < 1024 | limit 200
出力例
フィールド | 値 |
@ingestionTime | 1659310250813 |
@log | <account-id>:/aws/vpc/flowlogs |
@logStream | eni-123456789000000-all |
@message | 2 <account-id> eni-123456789000000 10.100.0.10 11.22.33.44 36952 443 6 25 5445 1659310200 1659310225 ACCEPT OK |
@timestamp | 1659310200000 |
accountId | <account-id> |
action | ACCEPT |
bytes | 5445 |
dstAddr | 11.22.33.44 |
dstPort | 443 |
end | 1659310225 |
interfaceId | eni-123456789000000 |
logStatus | OK |
packets | 25 |
protocol | 6 |
srcAddr | 10.100.0.10 |
srcPort | 36952 |
開始 | 1659310200 |
version | 2 |
大半のトラフィックを特定の VPC から受信している外部 IP アドレスを返す CloudWatch Logs Insights クエリの例
次の CloudWatch Logs Insights クエリは、大半のアウトバウンドトラフィックを、CIDR ブロックが「10.32」で始まる VPC から受信している、外部の IP アドレスとポートを返します。
filter @logstream = 'eni-1234567890000000' | stats count(*) as count by dstAddr, dstPort | filter dstAddr not like '10.32' | order by count desc | limit 200
出力例
# | dstAddr | dstPort | count |
1 | 52.x.x.x | 443 | 439 |
2 | 51.79.x.x | 63.x.x.x | 25 |
特定のVPC から拒否されたアウトバウンドトラフィックを返す CloudWatch Logs クエリの例
次の CloudWatch Logs クエリは、CIDR ブロックが「10.32」で始まる VPC から拒否された、アウトバウンドトラフィックを返します。
filter @logstream = 'eni-0123456789000000' | fields @timestamp, @message | filter action='REJECT'
出力例
フィールド | 値 |
@ingestionTime | 1666991000899 |
@log | <account-id>:/aws/vpc/flowlogs |
@logStream | eni-0123456789000000-all |
@message | 2 <account-id> 'eni-0123456789000000' 185.x.x.x 10.10.2.222 55116 11211 17 1 43 1666990939 1666990966 REJECT OK |
@timestamp | 1666990939000 |
accountId | <account-id> |
action | REJECT |
bytes | 43 |
dstAddr | 10.10.2.222 |
dstPort | 11211 |
end | 1666990966 |
interfaceId | 'eni-0123456789000000' |
logStatus | OK |
packets | 1 |
protocol | 17 |
srcAddr | 185.x.x.x |
srcPort | 55116 |
開始 | 1666990939 |
version | 2 |