メニュー
Elastic Load Balancing
クラシックロードバランサー

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

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

標準ロードバランサーが EC2-Classic 内のセキュリティグループをサポートする方法と VPC 内のセキュリティグループをサポートする方法には大きな違いがあります。EC2-Classic では、Elastic Load Balancing は特殊なソースセキュリティグループを提供しており、これを使用してインスタンスがロードバランサーからのトラフィックのみを受信するように設定できます。このソースセキュリティグループを変更することはできません。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 内に作成するロードバランサーにも、このセキュリティグループが使用されます。新しいロードバランサーのリスナーポートおよびヘルスチェックポートのトラフィックが許可されるように、セキュリティグループルールを必ず確認してください。ロードバランサーを削除した場合でも、このセキュリティグループは自動的には削除されません。

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

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

インターネット向けロードバランサー: 推奨ルール

インバウンド
送信元 プロトコル ポート範囲 コメント

0.0.0.0/0

TCP

リスナー

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

アウトバウンド

送信先 プロトコル ポート範囲 コメント

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

TCP

インスタンスリスナー

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

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

TCP

ヘルスチェック

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

内部向けロードバランサー: 推奨ルール

インバウンド
送信元 プロトコル ポート範囲 コメント

VPC CIDR

TCP

リスナー

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

アウトバウンド

送信先 プロトコル ポート範囲 コメント

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

TCP

インスタンスリスナー

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

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

TCP

ヘルスチェック

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

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

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

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

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

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

  2. ナビゲーションペインの [LOAD BALANCING] で [Load Balancers] を選択します。

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

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

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

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

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

次の apply-security-groups-to-load-balancer コマンドを使用して、追加のセキュリティグループを VPC 内のロードバランサーに割り当てます。

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

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

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

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

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

インスタンス: 推奨ルール

インバウンド
送信元 プロトコル ポート範囲 コメント

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

TCP

インスタンスリスナー

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

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

TCP

ヘルスチェック

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

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

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

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

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

インターネット向けロードバランサー: 推奨ルール

インバウンド
送信元 プロトコル ポート コメント

0.0.0.0/0

TCP

リスナー

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

VPC CIDR

TCP

1024-65535

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

アウトバウンド

送信先 プロトコル ポート コメント

VPC CIDR

TCP

インスタンスリスナー

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

VPC CIDR

TCP

ヘルスチェック

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

0.0.0.0/0

TCP

1024-65535

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

内部向けロードバランサー: 推奨ルール

インバウンド
送信元 プロトコル ポート コメント

VPC CIDR

TCP

リスナー

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

VPC CIDR

TCP

1024-65535

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

アウトバウンド

送信先 プロトコル ポート コメント

VPC CIDR

TCP

インスタンスリスナー

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

VPC CIDR

TCP

ヘルスチェック

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

VPC CIDR

TCP

1024-65535

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

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

インスタンス: 推奨ルール

インバウンド
送信元 プロトコル ポート コメント

VPC CIDR

TCP

インスタンスリスナー

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

VPC CIDR

TCP

ヘルスチェック

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

アウトバウンド

送信先 プロトコル ポート コメント

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] で [Load Balancers] を選択します。

  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 コマンドを使用して、ロードバランサーのソースセキュリティグループの名前と所有者を表示します。

    Copy
    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 を取得します。

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

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

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

      Copy
      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 コマンドを使用して、セキュリティグループに新しいルールが追加されていることを確認します。

    Copy
    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)。

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