Datadog は、クラウドリソース間の関係をマッピングするグラフ処理フレームワークを使用して、クラウドリソースがインターネットからアクセス可能かどうかを判断します。このガイドでは、グラフフレームワーク内でリソースを公開に分類するために使用されるロジックについて説明します。

ネットワーク到達可能性に関する詳細については、AWS のドキュメントおよび AWS Network Reachability Analyser を参照してください。現在、Is Publicly Accessible ファセットは AWS のリソースに対してのみ使用できます。

リソース依存関係グラフ

下の図は、他のリソースが公開されているかどうかを判断するために、関連リソースがどのように使用されるかを示しています。たとえば、S3 の公開バケットに格納されている CloudTrail トレイルは、それ自体が公開されています。リソースが別のリソースが原因で公開されている場合、その関係性が Cloud Security Management Misconfigurations リソース関係性グラフに示されます。

この図は、リソース同士の相関関係から公開状況を判断する際の参考にしてください。

: Publicly Accessible 属性を持つすべてのリソースが、この図に示されているわけではありません。

公開状況を判断するために使用されるリソース間の関係性を示すグラフ図

リソース別のパブリックアクセシビリティ判定ロジック

次のセクションでは、リソースのパブリックアクセシビリティ判定の背後にあるロジックをリソース別に詳しく説明します。

注: すべてのリソースが、そのリソース構成のみを通じてパブリックアクセシビリティの有無を分類できるわけではありません。そのようなリソースは、ここでは取り扱っていません。

Amazon S3 バケット

次の場合、S3 バケット (aws_s3_bucket) は公開されていると判断されます。

  • ACL によってアクセス権を判断:
条件説明
バケットの public_access_block_configuration とバケットアカウントのパブリックアクセスブロック (aws_s3_account_public_access_block) の両方で、ignore_public_aclsfalse に設定されている。アクセスコントロールリスト (ACL) は、このバケットに対するアクセス権を付与された AWS アカウントおよびグループを定義するものです。ignore_public_aclsfalse に設定されている場合、バケットの構成でパブリックアクセスを許可する ACL の使用が許可されます。
バケットの権限付与リストに、http://acs.amazonaws.com/groups/global/AllUsers または /AuthenticatedUsers という URI の値が含まれている。AllUsers は、世界中のすべての人にバケットへのアクセス権を付与します。AuthenticatedUsers は、世界中の AWS 認証ユーザーにバケットへのアクセス権を付与します。

または

  • バケットポリシーによってアクセス権を判断:
条件説明
バケットの public_access_block_configuration とバケットアカウントのパブリックアクセスブロック (aws_s3_account_public_access_block) の両方で、ignore_public_aclsfalse に設定されている。アクセスコントロールリスト (ACL) は、このバケットに対するアクセス権を付与された AWS アカウントおよびグループを定義するものです。ignore_public_aclsfalse に設定されている場合、バケットの構成でパブリックアクセスを許可する ACL の使用が許可されます。
バケットのポリシーステートメントで、s3:GetObject 権限が無条件で許可され、リソースとプリンシパルが "*" に設定されている。これにより、バケットのパブリックポリシーが定義され、クロスアカウントアクセスが許可されます。"*" はワイルドカードで、あらゆるリソースおよびプリンシパルにアクセス権が付与されます。

詳細については、Amazon S3 ストレージへのパブリックアクセスをブロックするを参照してください。

AWS CloudTrail トレイル

次の場合、Cloudtrail トレイル (aws_cloudtrail_trail) は公開されていると判断されます。

条件説明
トレイルの s3_bucket_name に、公開されていると判断される S3 バケットが設定されている。CloudTrail トレイルは、S3 バケットに送信されるログファイルです。トレイルが S3 の公開バケットに格納される場合、トレイルも公開されます。

Amazon VPC サブネット

次の場合、サブネット (aws_subnet) は公開されていると判断されます。

条件説明
1 つまたは複数のルートテーブルに接続されており、そのルートテーブルがインターネットゲートウェイに接続され、送信先 CIDR ブロック "0.0.0.0/0" または IPv6 CIDR ブロック "::/0" にルーティングされる。このサブネットにアタッチされているルートテーブルは、インターネットゲートウェイを通じてアウトバウンドトラフィックのルーティングを行い、サブネット内のリソースは公衆インターネットにアクセスできます。
1 つまたは複数のネットワーク ACL に接続されており、ネットワーク ACL に、CIDR ブロック "0.0.0.0/0" または IPv6 CIDR ブロック "::/0" を持つインバウンドエントリとアウトバウンドエントリがそれぞれ 1 つ以上設定されている。ネットワーク ACL は、サブネットを出入りするトラフィックをサブネットレベルで制御します。ネットワーク ACL のルールでインターネットからのインバウンドトラフィックが許可され、エフェメラルポートへのアウトバウンドトラフィックが許可されている場合で、パブリック IP が割り当てられ、セキュリティグループで許可されている場合は、アドレスサブネット内のリソースがインターネットに公開されます。

AWS におけるパブリックサブネットの定義については、VPC のサブネットを参照してください。

Amazon Redshift クラスター

次の場合、Redshift クラスター (aws_redshift_cluster) は公開されていると判断されます。

条件説明
その構成で publicly_accessibletrue に設定されている。VPC におけるクラスターの管理を参照してください。
パブリック VPC 内にある。パブリック VPC とは、少なくとも 1 つのパブリックサブネットを持ち、1 つまたは複数のネットワーク ACL に接続され、ネットワーク ACL に、CIDR ブロック "0.0.0.0/0" または IPv6 CIDR ブロック "::/0" を持つインバウンドエントリとアウトバウンドエントリがそれぞれ 1 つ以上設定されている VPC のことです。
CIDR 範囲 "0.0.0.0/0" または IPv6 CIDR 範囲 "::/0" からのアクセスを許可するルールが設定されたセキュリティグループと紐付けられている。セキュリティグループは、VPC へのインバウンドトラフィックを制御します。CIDR 範囲がオープンになっている場合は、すべての IP アドレスがアクセス権を取得できます。
1 つまたは複数のルートテーブルに接続されており、そのルートテーブルがインターネットゲートウェイに接続され、送信先 CIDR ブロック "0.0.0.0/0" または IPv6 CIDR ブロック "::/0" にルーティングされる。このサブネットにアタッチされているルートテーブルは、インターネットゲートウェイを通じてアウトバウンドトラフィックのルーティングを行い、サブネット内のリソースは公衆インターネットにアクセスできます。

Redshift クラスターとパブリックアクセシビリティの詳細については、プライベートな Amazon Redshift クラスターの公開を参照してください。

Amazon RDS DB インスタンス

次の場合、RDS DB インスタンス (aws_rds_instance) は公開されていると判断されます。

条件説明
接続の構成で publicly_accessibletrue に設定されている。この設定により DB が公開され、DNS エンドポイントは VPC 内ではプライベート IP アドレスで名前解決し、VPC 外からはパブリック IP アドレスで名前解決します。ただし、クラスターへのアクセスは、引き続き関連するセキュリティグループにより制御されます。
パブリックサブネット内にある。-
CIDR 範囲 "0.0.0.0/0" または IPv6 CIDR 範囲 "::/0" からのアクセスを許可するルールが設定されたセキュリティグループと紐付けられている。セキュリティグループは、VPC へのインバウンドトラフィックを制御します。CIDR 範囲がオープンになっている場合は、すべての IP アドレスがアクセス権を取得できます。

RDS DB インスタンスへのパブリックアクセスの詳細については、VPC のサブネットを使用する RDS DB インスタンスへの接続の問題を修正するを参照してください。

Amazon RDS DB スナップショット

次の場合、RDS DB スナップショット (aws_rds_db_snapshot) は公開されていると判断されます。

条件説明
"restore" に設定された属性があり、属性値が "all" に設定されている。DB スナップショットの可視性を Public に設定した場合、すべての AWS アカウントが手動の DB スナップショットから DB インスタンスを復元し、データにアクセスできます。

詳細については、DB スナップショットの共有を参照してください。

Amazon Elastic Load Balancer

次の場合、ELB (aws_elbv2_load_balancer) は公開されていると判断されます。

条件説明
スキームinternet-facing に設定されている。スキームは、ロードバランサーが内部のロードバランサーか、インターネット向けロードバランサーかを決定します。
CIDR 範囲 "0.0.0.0/0" または IPv6 CIDR 範囲 "::/0" からのアクセスを許可するルールが設定されたセキュリティグループと紐付けられている。セキュリティグループは、VPC へのインバウンドトラフィックを制御します。CIDR 範囲がオープンになっている場合は、すべての IP アドレスがアクセス権を取得できます。

インターネット向けロードバランサーの詳細については、アプリケーションロードバランサーの作成を参照してください。

Amazon EC2 インスタンス

次の場合、EC2 インスタンス (aws_ec2_instance) は公開されていると判断されます。

  • “パブリックサブネット"によってアクセス権を判断:
条件説明
1 つまたは複数のパブリック IP アドレスを持っている。パブリック IP アドレスにより、インスタンスがインターネットから到達可能になります。
パブリックサブネット内にある。-
CIDR 範囲 "0.0.0.0/0" または IPv6 CIDR 範囲 "::/0" からのアクセスを許可するルールが設定されたセキュリティグループと紐付けられている。セキュリティグループは、VPC へのインバウンドトラフィックを制御します。CIDR 範囲がオープンになっている場合は、すべての IP アドレスがアクセス権を取得できます。

または

  • オートスケーリンググループを通じて ELB によってアクセス権を判断:
条件説明
ロードバランサーにアタッチされたセキュリティグループ (例: SG1) が公開されており、特定のポート X へのインバウンドトラフィックが許可されている。これにより、ロードバランサーが特定のポートにおいて、インターネット由来のインバウンドトラフィックに対して開かれます。
ロードバランサーで、ポート X においてトラフィックを受け入れるリスナーが設定されている。リスナーとは、構成したプロトコルとポートを使用して接続リクエストをチェックするプロセスです。
ロードバランサーで、トラフィックを特定のポート Y に転送するターゲットグループが設定されている。ターゲットグループは、指定されたプロトコルとポートを使用して、1 つまたは複数の登録済みのターゲット (EC2 インスタンスなど) にリクエストをルーティングします。
オートスケーリンググループが、ロードバランサーのターゲットグループにアタッチされている。-
EC2 インスタンスがオートスケーリンググループの一部で、0.0.0.0/0、VPC の CIDR (例: 10.0.0.0/8)、またはロードバランサーのセキュリティグループ (SG1) のいずれかからのインバウンドトラフィックをポート Y で許可するルールが 1 つ以上設定されたセキュリティグループを使用している。これにより、EC2 インスタンスがロードバランサーからのトラフィックに対して公開されます。セキュリティグループはロードバランサーからのトラフィックを許可する必要があり、したがって、すべての IP、VPC 内のすべての IP、またはその特定のセキュリティグループに対して公開される必要があります。

または

  • ターゲットグループのみを通じて ELB によってアクセス権を判断:
条件説明
上記 (オートスケーリンググループを通じて ELB によってアクセス権を判断) の条件 1、2 および 3 が適用されます。-
EC2 インスタンスがターゲットグループのターゲットとして登録され、0.0.0.0/0、VPC の CIDR (例: 10.0.0.0/8)、またはロードバランサーのセキュリティグループ (SG1) のいずれかからのインバウンドトラフィックをポート Y で許可するルールが 1 つ以上設定されたセキュリティグループを使用している。インスタンスがターゲットグループのターゲットとして登録されているため、ロードバランサーはポート Y を通じてトラフィックを転送できます。セキュリティグループは、ロードバランサーからのトラフィックを許可します。

EC2 インスタンスとパブリックアクセスの詳細については、Linux インスタンスでインバウンドトラフィックを許可するを参照してください。ロードバランサーを通じて公開される EC2 インスタンス例については、例: プライベートサブネット内にサーバーを配置し、NATを使用する VPC を参照してください。

Amazon Elasticsearch ドメイン

次の場合、Elasticsearch ドメイン (aws_elasticsearch_domain) は公開されていると判断されます。

条件説明
正規表現パターン ^search-.*\.es\.amazonaws\.com$ に一致するエンドポイントを持っている。これは、公開されているドメインのエンドポイントで採用される形式です。

Elasticsearch ドメインを非公開にする場合の詳細については、VPC 内で Amazon OpenSearch Service ドメインをローンチするを参照してください。

Amazon マシーンイメージ (AMI)

次の場合、マシーンイメージ (aws_ami) は公開されていると判断されます。

条件説明
顧客所有で、エイリアス所有者 (アカウントフィールドが amazon または aws-marketplace のいずれか) がいない 。認証済みプロバイダー (Amazon または認証済みプロバイダーのいずれか) が所有するパブリック AMI にはエイリアス所有者が存在し、アカウントフィールドに amazon または aws-marketplace として表示されます。AWS ドキュメントの共有 AMI を見つけるを参照してください。
イメージが public に設定され、イメージのローンチ権限がパブリックになっている。AMI の launchPermission プロパティを変更することで、AMI を公開する (すべての AWS アカウントにローンチ権限を付与する) か、指定したAWS アカウントとのみ共有することができます。

AMI を公開または非公開にする方法の説明は、AMI の公開を参照してください。

Amazon EBS スナップショット

次の場合、EBS スナップショット (aws_ebs_snapshot) は公開されていると判断されます。

条件説明
create_volume_permissionall に設定されている。各スナップショットには、スナップショットのデータを新しい EBS ボリュームに復元するのに必要なすべての情報が格納されています。誰かがスナップショットからボリュームを作成した場合、その情報は公開されます。

EBS の公開スナップショットの情報、およびそれを非公開にする方法については、Amazon EBS スナップショットの共有を参照してください。

Amazon EKS クラスター

次の場合、EKS クラスター (aws_eks_cluster) は公開されていると判断されます。

条件説明
クラスターの構成で、endpoint_public_accesstrue に設定されている。この設定とオープンなパブリック CIDR が組み合わされると、クラスターが公開されます。
クラスターの public_access_cidrs にオープンな CIDR ブロック ("0.0.0.0/0") が格納されている。EKS クラスターのパブリックエンドポイントにアクセスできる CIDR ブロックは制限することができます。オープンな CIDR ブロックは、インターネット上の誰でもエンドポイントにアクセスできることを意味します。

パブリックな EKS クラスターに関する詳細については、Amazon EKS クラスターのエンドポイントアクセス制御を参照してください。

Amazon SQS キュー

次の場合、SQS キュー (aws_sqs_queue) は公開されていると判断されます。

条件説明
キューに、任意のプリンシパル (プリンシパルの設定が "*") が無条件にアクションを実行することを許可する (statement_has_condition の設定が false) ポリシーが設定されている。この設定により、キューは世界中のすべての人、または認証済みの AWS ユーザーからアクセス可能になります。

パブリック SQS キューの詳細については、Amazon SQS セキュリティベストプラクティスを参照してください。

その他の参考資料