セキュリティグループは、Elastic Compute Service (ECS) インスタンスの仮想ファイアウォールとして機能し、インバウンドとアウトバウンドの両方のトラフィックを制御します。同様のセキュリティパターンと信頼レベルを持つインスタンスをグループ化することで、個別のセキュリティドメインを確立し、クラウドリソースを隔離して保護します。
仕組み
ECS インスタンスを作成する際には、少なくとも 1 つのセキュリティグループに関連付ける必要があります。関連付けられたすべてのセキュリティグループのルールが優先度順にソートされ、トラフィックを許可するか拒否するかが決定されます。
ルールはいつでも追加、変更、削除できます。変更は、グループ内のすべてのインスタンスにすぐに適用されます。セキュリティグループルールは、ソース (インバウンドの場合) または宛先 (アウトバウンドの場合)、ポート範囲、プロトコル、ポリシー ([許可]/[拒否])、および優先度によって定義されます。インバウンドルールはインスタンスに到達しようとするトラフィックを制御し、アウトバウンドルールはインスタンスから発信されるトラフィックを制御します。詳細については、「セキュリティグループルール」をご参照ください。
デフォルトでは、ルールはプライマリ Elastic Network Interface (ENI) に適用されます。VPC 内のインスタンスにアタッチされたセカンダリ ENI には、異なるセキュリティグループを割り当てて、詳細なトラフィック制御を実装できます。
設定の制約:
セキュリティグループはリージョンおよび VPC 固有です。インスタンスを起動する際、定義された vSwitch (サブネット) とセキュリティグループは同じ VPC 内に存在する必要があります。
インスタンスまたは ENI は、少なくとも 1 つのセキュリティグループに属している必要があります。インスタンスごとまたは ENI ごとのグループ数の制限については、「制限」をご参照ください。
起動時にセキュリティグループが指定されていない場合、システムはプライマリ ENI を VPC のデフォルトセキュリティグループに自動的に割り当てます。詳細については、「デフォルトセキュリティグループ」をご参照ください。
次の図に示すように、ECS 1 と ECS 2 を含む VPC を考えます。両方のインスタンスはプライマリ ENI を利用し、Security Group 1 に関連付けられています。Security Group 1 は、デフォルトのグループ内接続ポリシーを持つ基本セキュリティグループです。ECS 1 と ECS 2 は、内部ネットワークを介して相互に通信できます。この暗黙の信頼は、明示的に上書きされない限り、カスタムルールを無視します。インバウンドおよびアウトバウンドアクセスは、カスタムルールによって管理されます。たとえば、インバウンドルールが ICMP を許可する場合、どの IP からでもこれらのインスタンスに ping を実行できます。アウトバウンドルールが定義されていない場合、デフォルトですべてのアウトバウンドトラフィックが許可されます。
セキュリティグループの種類
基本セキュリティグループと高度なセキュリティグループ
ネットワーク属性に基づいて、セキュリティグループは基本または高度に分類されます。どちらのタイプも無料です。ECS API または CLI を使用する場合、SecurityGroupType パラメーターは 2 つの主要な属性タイプを区別します: 基本 (normal) と高度 (enterprise)。
基本セキュリティグループ: グループ内接続をサポートします (グループ内のインスタンスはデフォルトで通信できます)。ソース/宛先として別のセキュリティグループの ID (例: sg-123) を指定することで、そのセキュリティグループからのトラフィックを許可できます。基本セキュリティグループは、サポートするプライベート IP アドレスの数が少なくなります。
高度セキュリティグループ: 暗黙的なグループ内接続はありません。ルールには IP アドレスまたは CIDR ブロック (例: 10.0.0.0/24) を明示的に使用する必要があります。高度セキュリティグループは、はるかに多くのプライベート IP アドレスをサポートします。
ENI が複数のセキュリティグループに関連付けられている場合、それらはすべて同じタイプ (すべて基本またはすべて高度) である必要があります。詳細については、「基本セキュリティグループと高度セキュリティグループ」をご参照ください。
カスタムセキュリティグループとマネージドセキュリティグループ
管理所有権に基づいて、セキュリティグループはカスタムまたはマネージドに分類されます。カスタムセキュリティグループとマネージドセキュリティグループは、どちらも基本または高度にすることができます。
カスタムセキュリティグループ: ECS コンソールまたは API を介してユーザーが作成および管理します。ルールとライフサイクルを完全に制御できます。デフォルトセキュリティグループは、カスタムセキュリティグループの一種です。詳細については、「セキュリティグループの作成」をご参照ください。
マネージドセキュリティグループ: クラウドサービスがその操作を容易にするために自動的に作成します。読み取り専用であり、ルールを変更することはできません。詳細については、「マネージドセキュリティグループ」をご参照ください。
マネージドセキュリティグループの識別: DescribeSecurityGroups API では ServiceManaged 属性が True を返し、コンソールには [Managed by Cloud Service] バナーが表示されます。
セキュリティグループを使用するためのベストプラクティス
堅牢なセキュリティ体制を維持するには、次のガイドラインに従ってください:
命名規則の確立
セキュリティグループには、明確で説明的な名前とタグを使用します。一貫したタグ付けにより、インフラストラクチャがスケールするにつれて、リソースのフィルタリングと運用管理が容易になります。
セキュリティグループをホワイトリストとして扱う
デフォルトですべてのアクセスを拒否します。特定のポートとソース IP のトラフィックを明示的に承認するルールのみを追加します。
最小権限の原則 (PoLP)
必要最小限のアクセスのみを許可します。ポート 22 (SSH) で
0.0.0.0/0を許可する代わりに、ポート 22 へのアクセスを特定の企業のオフィス CIDR または踏み台ホストの IP に制限します。最小権限の原則に従う
基本セキュリティグループ内の ECS インスタンスが内部ネットワークを介して相互に通信する必要がない場合は、グループ内接続ポリシーを内部隔離に設定します。
ルールをシンプルに保つ
目的別にルールを異なるセキュリティグループにグループ化し、インスタンスをそれらのグループに関連付けます。単一のセキュリティグループにルールが多すぎると、管理が複雑になります。ヘルスチェック機能を使用して、未使用のルールを特定して削除します。
アプリケーションロールによるインスタンスの隔離
パブリックに公開されるインスタンスを、ポート 80/443 のみを開くセキュリティグループに関連付けます。データベースインスタンス (MySQL, Redis) は、すべてのパブリックインターネットアクセスを拒否し、アプリケーション層のセキュリティグループからのトラフィックのみを受け入れる別のセキュリティグループに配置する必要があります。
本番環境のセキュリティグループを直接変更しない
セキュリティグループをステージング環境にクローン -> 変更を適用 -> 接続性を検証 -> 本番環境に適用。
関連情報
アクセス制御: 隔離戦略の詳細については、「セキュリティグループとルールの管理」をご参照ください。
クォータ: グループごとのルールまたはインスタンスごとのグループの制限については、「制限」をご参照ください。
ネットワーキング: 複数のインターフェイスのアタッチについては、「ENI の概要」をご参照ください。
セキュリティに関する注意: セキュリティグループは重要な防御層ですが、包括的なセキュリティ戦略の一部であるべきです。全体的なセキュリティ対策については、「ECS セキュリティ」をご参照ください。