Classic Load Balancer のセキュリティグループの設定 - Elastic Load Balancing

Classic Load Balancer のセキュリティグループの設定

セキュリティグループは、1 つ以上のインスタンスとの間で許可されているトラフィックを制御するファイアウォールとして機能します。EC2 インスタンスを起動するとき、1 つ以上のセキュリティグループをインスタンスに関連付けることができます。セキュリティグループごとに、トラフィックを許可する 1 つ以上のルールを追加します。セキュリティグループのルールは、いつでも変更できます。新しいルールは、セキュリティグループに関連付けられているすべてのインスタンスに自動的に適用されます。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EC2 セキュリティグループ」を参照してください。

クラシックロードバランサー が EC2-Classic 内のセキュリティグループをサポートする方法と VPC 内のセキュリティグループをサポートする方法には大きな違いがあります。EC2-Classic では、ロードバランサーは特殊なソースセキュリティグループを提供しており、これを使用してインスタンスがロードバランサーからのトラフィックのみを受信するように設定できます。このソースセキュリティグループを変更することはできません。VPC では、ロードバランサーのセキュリティグループを指定することで、許可するポートとプロトコルを選択できます。たとえば、ロードバランサーが ping リクエストに応答できるよう、Internet Control Message Protocol (ICMP) 接続を開くことができます (ただし、ping リクエストは登録済みインスタンスに転送されません)。

EC2-Classic でも VPC でも、インスタンスのセキュリティグループにより、ロードバランサーがリスナーポートとヘルスチェックポートの両方でインスタンスとの通信が許可されるようにする必要があります。VPC では、セキュリティグループとネットワークアクセスコントロールリスト (ACL) により、これらのポートで両方向のトラフィックが許可される必要があります。

VPC のロードバランサーのセキュリティグループ

AWS マネジメントコンソール を使用して VPC 内にロードバランサーを作成する場合は、VPC 用の既存のセキュリティグループを選択するか、VPC の新しいセキュリティグループを作成できます。既存のセキュリティグループを選択する場合、ロードバランサーのリスナーポートとヘルスチェックポートの両方で、双方向のトラフィックを許可する必要があります。セキュリティグループを作成する場合、これらのポートのすべてのトラフィックを許可するルールがコンソールによって自動的に追加されます。

[デフォルト以外の VPC] セキュリティグループを指定せずにデフォルト以外の VPC で AWS CLI または API を使用してロードバランサーを作成する場合、ロードバランサーは VPC のデフォルトのセキュリティグループに自動的に関連付けられます。

[デフォルト VPC] デフォルト VPC で AWS CLI または API を使用してロードバランサーを作成する場合、ロードバランサーの既存のセキュリティグループを選択することはできません。代わりに、ロードバランサー用に指定したポートのすべてのトラフィックを許可するルールが Elastic Load Balancing によってセキュリティグループに設定されます。Elastic Load Balancing がそのようなセキュリティグループを作成するのは、1 つの AWS アカウントにつき 1 つのみで、default_elb_id という形式の名前が付きます (例: default_elb_fc5fbed3-0405-3b7d-a328-ea290EXAMPLE)。今後デフォルト VPC 内に作成するロードバランサーにも、このセキュリティグループが使用されます。新しいロードバランサーのリスナーポートおよびヘルスチェックポートのトラフィックが許可されるように、セキュリティグループルールを必ず確認してください。ロードバランサーを削除した場合でも、このセキュリティグループは自動的には削除されません。

既存のロードバランサーにリスナーを追加する場合、新しいリスナーポートが両方向で許可されるように、セキュリティグループを確認する必要があります。

ロードバランサーのセキュリティグループでは、インスタンスとの通信が許可される必要があります。推奨ルールは、ロードバランサーのタイプ (インターネット向けまたは内部向け) によって異なります。

次の表に、インターネット向けロードバランサーの推奨ルールを示します。

Inbound
Source Protocol Port Range Comment

0.0.0.0/0

TCP

リスナー

ロードバランサーのリスナーポートですべてのインバウンドトラフィックを許可する

Outbound

Destination Protocol Port Range Comment

インスタンスセキュリティグループ

TCP

インスタンスリスナー

インスタンスリスナーポートでインスタンスへのアウトバウンドトラフィックを許可する

インスタンスセキュリティグループ

TCP

ヘルスチェック

ヘルスチェックポートでインスタンスへのアウトバウンドトラフィックを許可する

次の表に、内部ロードバランサーの推奨ルールを示します。

Inbound
Source Protocol Port Range Comment

VPC CIDR

TCP

リスナー

ロードバランサーのリスナーポートで VPC CIDR からのインバウンドトラフィックを許可する

Outbound

Destination Protocol Port Range Comment

インスタンスセキュリティグループ

TCP

インスタンスリスナー

インスタンスリスナーポートでインスタンスへのアウトバウンドトラフィックを許可する

インスタンスセキュリティグループ

TCP

ヘルスチェック

ヘルスチェックポートでインスタンスへのアウトバウンドトラフィックを許可する

コンソールを使用したセキュリティグループの管理

次の手順に従って、VPC 内のロードバランサーに関連付けられたセキュリティグループの変更を行います。

ロードバランサーに割り当てられたセキュリティグループを更新するには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ロードバランサー] を選択します。

  3. ロードバランサーを選択します。

  4. [Description] タブで、[Edit security groups] を選択します。

  5. [Edit security groups] ページで、必要に応じてセキュリティグループを選択または選択解除します。

  6. 完了したら、[Save ] を選択します。

AWS CLI を使用したセキュリティグループの管理

次の apply-security-groups-to-load-balancer コマンドを使用して、セキュリティグループを VPC 内のロードバランサーに関連付けます。指定されたセキュリティグループは、以前に関連付けられたセキュリティグループに上書きされます。

aws elb apply-security-groups-to-load-balancer --load-balancer-name my-loadbalancer --security-groups sg-53fae93f

以下に、応答の例を示します。

{ "SecurityGroups": [ "sg-53fae93f" ] }

VPC 内のインスタンスのセキュリティグループ

インスタンスのセキュリティグループでは、ロードバランサーとの通信が許可される必要があります。次の表は、推奨されるルールを示します。

Inbound
Source Protocol Port Range Comment

ロードバランサーのセキュリティグループ

TCP

インスタンスリスナー

インスタンスリスナーポートでロードバランサーからのトラフィックを許可する

ロードバランサーのセキュリティグループ

TCP

ヘルスチェック

ヘルスチェックポートでロードバランサーからのトラフィックを許可する

また、パス MTU 検出をサポートするため、インバウンド ICMP トラフィックを許可することをお勧めします。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「パス MTU 検出」を参照してください。

VPC 内のロードバランサーのネットワーク ACL

VPC のデフォルトネットワークアクセスコントロールリスト (ACL) では、すべてのインバウンドトラフィックとアウトバウンドトラフィックが許可されます。カスタムネットワーク ACL を作成する場合、ロードバランサーとインスタンスの通信を許可するルールを追加します。

ロードバランサーのサブネットの推奨ルールは、ロードバランサーのタイプ (インターネット向けまたは内部向け) によって異なります。

インターネット向けロードバランサーの推奨ルールを次に示します。

Inbound
Source Protocol Port Comment

0.0.0.0/0

TCP

リスナー

ロードバランサーのリスナーポートですべてのインバウンドトラフィックを許可する

VPC CIDR

TCP

1024-65535

一時ポートで VPC CIDR からのインバウンドトラフィックを許可する

Outbound

Destination Protocol Port Comment

VPC CIDR

TCP

インスタンスリスナー

インスタンスのリスナーポートですべてのアウトバウンドトラフィックを許可する

VPC CIDR

TCP

ヘルスチェック

ヘルスチェックポートですべてのアウトバウンドトラフィックを許可する

0.0.0.0/0

TCP

1024-65535

一時ポートですべてのアウトバウンドトラフィックを許可する

内部ロードバランサーの推奨ルールを次に示します。

Inbound
Source Protocol Port Comment

VPC CIDR

TCP

リスナー

ロードバランサーのリスナーポートで VPC CIDR からのインバウンドトラフィックを許可する

VPC CIDR

TCP

1024-65535

一時ポートで VPC CIDR からのインバウンドトラフィックを許可する

Outbound

Destination Protocol Port Comment

VPC CIDR

TCP

インスタンスリスナー

インスタンスリスナーポートで VPC CIDR へのアウトバウンドトラフィックを許可する

VPC CIDR

TCP

ヘルスチェック

ヘルスチェックポートで VPC CIDR へのアウトバウンドトラフィックを許可する

VPC CIDR

TCP

1024-65535

一時ポートで VPC CIDR へのアウトバウンドトラフィックを許可する

インスタンスのサブネットの推奨ルールは、サブネットがプライベートとパブリックのどちらであるかによって異なります。次のルールは、プライベートサブネット用です。インスタンスがパブリックサブネット内にある場合、送信元と宛先を VPC の CIDR から 0.0.0.0/0 に変更します。

Inbound
Source Protocol Port Comment

VPC CIDR

TCP

インスタンスリスナー

インスタンスリスナーポートで VPC CIDR からのインバウンドトラフィックを許可する

VPC CIDR

TCP

ヘルスチェック

ヘルスチェックポートで VPC CIDR からのインバウンドトラフィックを許可する

Outbound

Destination Protocol Port Comment

VPC CIDR

TCP

1024-65535

一時ポートで VPC CIDR へのアウトバウンドトラフィックを許可する

EC2-Classic 内のインスタンスのセキュリティグループ

EC2-Classic で起動されたインスタンスとロードバランサーの間の通信を許可するには、すべての IP アドレス (0.0.0.0/0 CIDR ブロックを使用) またはロードバランサーのみ (Elastic Load Balancing によって提供されるソースセキュリティグループを使用) からのインバウンドトラフィックを許可するインスタンスに、セキュリティグループのインバウンドルールを作成します。

次の手順に従って、EC2-Classic 内のロードバランサーとインスタンス間のトラフィックをロックします。

コンソールを使用してロードバランサーとインスタンスの間のトラフィックをロックダウンするには

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

  2. ナビゲーションペインの [LOAD BALANCING] で [ロードバランサー] を選択します。

  3. ロードバランサーを選択します。

  4. [Description] タブで、ソースセキュリティグループの名前をコピーします。

    
							ELB ソースセキュリティグループ
  5. [Instances] タブで、ロードバランサーに登録されているいずれかのインスタンスのインスタンス ID を選択します。

  6. [Description] タブの [Security groups] で、セキュリティグループの名前をクリックします。

  7. [Inbound] タブで、[Edit]、[Add Rule] を選択します。

  8. [Type] 列でプロトコルタイプを選択します。[Protocol] 列と [Port Range] 列に値が入力されます。[Source] 列で、[Custom IP] を選択し、前にコピーしたソースセキュリティグループの名前 (例: amazon-elb/amazon-elb-sg) を貼り付けます。

  9. (オプション) 前の手順で追加したルールよりも規制のゆるいルールがセキュリティグループに設定されている場合は、そのルールの削除アイコンを使用してそのルールを削除します。

AWS CLI を使用してロードバランサーとインスタンスの間のトラフィックをロックダウンするには

  1. 次の describe-load-balancers コマンドを使用して、ロードバランサーのソースセキュリティグループの名前と所有者を表示します。

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    応答には、SourceSecurityGroup フィールドの名前と所有者が出力されます。(例:

    { "LoadBalancerDescriptions": [ { ... "SourceSecurityGroup": { "OwnerAlias": "amazon-elb", "GroupName": "amazon-elb-sg" } } ] }
  2. 次のとおりインスタンスのセキュリティグループにルールを追加します。

    1. インスタンスのセキュリティグループの名前が分からない場合は、次の describe-instances コマンドを使用して、特定のインスタンスのセキュリティグループの名前と ID を取得します。

      aws ec2 describe-instances --instance-ids i-315b7e51

      応答には、SecurityGroups フィールドのセキュリティグループの名前と ID が出力されます。セキュリティグループの名前は次のステップで使用しますので、書き留めておきます。

    2. 次の authorize-security-group-ingress コマンドを使用して、ロードバランサーからのトラフィックを許可するルールをインスタンスのセキュリティグループに追加します。

      aws ec2 authorize-security-group-ingress --group-name my-security-group --source-security-group-name amazon-elb-sg --source-security-group-owner-id amazon-elb
  3. (オプション) 次の describe-security-groups コマンドを使用して、セキュリティグループに新しいルールが追加されていることを確認します。

    aws ec2 describe-security-groups --group-names my-security-group

    応答には、インスタンスにアクセスする権限を付与されたセキュリティグループを一覧表示する UserIdGroupPairs データ構造が出力されます。

    { "SecurityGroups": [ { ... "IpPermissions": [ { "IpRanges": [], "FromPort": -1, "IpProtocol": "icmp", "ToPort": -1, "UserIdGroupPairs": [ { "GroupName": "amazon-elb-sg", "GroupId": "sg-5a9c116a", "UserId": "amazon-elb" } ] }, { "IpRanges": [], "FromPort": 1, "IpProtocol": "tcp", "ToPort": 65535, "UserIdGroupPairs": [ { "GroupName": "amazon-elb-sg", "GroupId": "sg-5a9c116a", "UserId": "amazon-elb" } ] }, { "IpRanges": [], "FromPort": 1, "IpProtocol": "udp", "ToPort": 65535, "UserIdGroupPairs": [ { "GroupName": "amazon-elb-sg", "GroupId": "sg-5a9c116a", "UserId": "amazon-elb" } ] }, . . . }
  4. (省略可) 前の手順で追加したルールよりも規制のゆるいルールがセキュリティグループに設定されている場合は、revoke-security-group-ingress コマンドを使用して、そのルールを削除します。たとえば、次のコマンドは、すべてのユーザーからの TCP トラフィックを許可するルールを削除します (CIDR 範囲 0.0.0.0/0)。

    aws ec2 revoke-security-group-ingress --group-name my-security-group --protocol tcp --port 80 --cidr 0.0.0.0/0