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 |
|
TCP |
|
ロードバランサーのリスナーポートで VPC CIDR からのインバウンドトラフィックを許可する |
Outbound |
|||
Destination | Protocol | Port Range | Comment |
|
TCP |
|
インスタンスリスナーポートでインスタンスへのアウトバウンドトラフィックを許可する |
|
TCP |
|
ヘルスチェックポートでインスタンスへのアウトバウンドトラフィックを許可する |
コンソールを使用したセキュリティグループの管理
次の手順に従って、VPC 内のロードバランサーに関連付けられたセキュリティグループの変更を行います。
ロードバランサーに割り当てられたセキュリティグループを更新するには
-
https://console.aws.amazon.com/ec2/
で Amazon EC2 コンソールを開きます。 -
ナビゲーションペインの [LOAD BALANCING] で [ロードバランサー] を選択します。
-
ロードバランサーを選択します。
-
[Description] タブで、[Edit security groups] を選択します。
-
[Edit security groups] ページで、必要に応じてセキュリティグループを選択または選択解除します。
-
完了したら、[Save ] を選択します。
AWS CLI を使用したセキュリティグループの管理
次の apply-security-groups-to-load-balancer コマンドを使用して、セキュリティグループを VPC 内のロードバランサーに関連付けます。指定されたセキュリティグループは、以前に関連付けられたセキュリティグループに上書きされます。
aws elb apply-security-groups-to-load-balancer --load-balancer-name
my-loadbalancer
--security-groupssg-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 |
|
ロードバランサーのリスナーポートですべてのインバウンドトラフィックを許可する |
|
TCP |
1024-65535 |
一時ポートで VPC CIDR からのインバウンドトラフィックを許可する |
Outbound |
|||
Destination | Protocol | Port | Comment |
|
TCP |
|
インスタンスのリスナーポートですべてのアウトバウンドトラフィックを許可する |
|
TCP |
|
ヘルスチェックポートですべてのアウトバウンドトラフィックを許可する |
0.0.0.0/0 |
TCP |
1024-65535 |
一時ポートですべてのアウトバウンドトラフィックを許可する |
内部ロードバランサーの推奨ルールを次に示します。
Inbound | |||
Source | Protocol | Port | Comment |
|
TCP |
|
ロードバランサーのリスナーポートで VPC CIDR からのインバウンドトラフィックを許可する |
|
TCP |
1024-65535 |
一時ポートで VPC CIDR からのインバウンドトラフィックを許可する |
Outbound |
|||
Destination | Protocol | Port | Comment |
|
TCP |
|
インスタンスリスナーポートで VPC CIDR へのアウトバウンドトラフィックを許可する |
|
TCP |
|
ヘルスチェックポートで VPC CIDR へのアウトバウンドトラフィックを許可する |
|
TCP |
1024-65535 |
一時ポートで VPC CIDR へのアウトバウンドトラフィックを許可する |
インスタンスのサブネットの推奨ルールは、サブネットがプライベートとパブリックのどちらであるかによって異なります。次のルールは、プライベートサブネット用です。インスタンスがパブリックサブネット内にある場合、送信元と宛先を
VPC の CIDR から 0.0.0.0/0
に変更します。
Inbound | |||
Source | Protocol | Port | Comment |
|
TCP |
|
インスタンスリスナーポートで VPC CIDR からのインバウンドトラフィックを許可する |
|
TCP |
|
ヘルスチェックポートで VPC CIDR からのインバウンドトラフィックを許可する |
Outbound |
|||
Destination | Protocol | Port | Comment |
|
TCP |
1024-65535 |
一時ポートで VPC CIDR へのアウトバウンドトラフィックを許可する |
EC2-Classic 内のインスタンスのセキュリティグループ
EC2-Classic で起動されたインスタンスとロードバランサーの間の通信を許可するには、すべての IP アドレス (0.0.0.0/0
CIDR ブロックを使用) またはロードバランサーのみ (Elastic Load Balancing によって提供されるソースセキュリティグループを使用) からのインバウンドトラフィックを許可するインスタンスに、セキュリティグループのインバウンドルールを作成します。
次の手順に従って、EC2-Classic 内のロードバランサーとインスタンス間のトラフィックをロックします。
コンソールを使用してロードバランサーとインスタンスの間のトラフィックをロックダウンするには
-
https://console.aws.amazon.com/ec2/
で Amazon EC2 コンソールを開きます。 -
ナビゲーションペインの [LOAD BALANCING] で [ロードバランサー] を選択します。
-
ロードバランサーを選択します。
-
[Description] タブで、ソースセキュリティグループの名前をコピーします。
-
[Instances] タブで、ロードバランサーに登録されているいずれかのインスタンスのインスタンス ID を選択します。
-
[Description] タブの [Security groups] で、セキュリティグループの名前をクリックします。
-
[Inbound] タブで、[Edit]、[Add Rule] を選択します。
-
[Type] 列でプロトコルタイプを選択します。[Protocol] 列と [Port Range] 列に値が入力されます。[Source] 列で、[
Custom IP
] を選択し、前にコピーしたソースセキュリティグループの名前 (例:amazon-elb/amazon-elb-sg
) を貼り付けます。 -
(オプション) 前の手順で追加したルールよりも規制のゆるいルールがセキュリティグループに設定されている場合は、そのルールの削除アイコンを使用してそのルールを削除します。
AWS CLI を使用してロードバランサーとインスタンスの間のトラフィックをロックダウンするには
-
次の describe-load-balancers コマンドを使用して、ロードバランサーのソースセキュリティグループの名前と所有者を表示します。
aws elb describe-load-balancers --load-balancer-name
my-loadbalancer
応答には、
SourceSecurityGroup
フィールドの名前と所有者が出力されます。(例:{ "LoadBalancerDescriptions": [ { ... "SourceSecurityGroup": { "OwnerAlias": "amazon-elb", "GroupName": "amazon-elb-sg" } } ] }
-
次のとおりインスタンスのセキュリティグループにルールを追加します。
-
インスタンスのセキュリティグループの名前が分からない場合は、次の describe-instances コマンドを使用して、特定のインスタンスのセキュリティグループの名前と ID を取得します。
aws ec2 describe-instances --instance-ids
i-315b7e51
応答には、
SecurityGroups
フィールドのセキュリティグループの名前と ID が出力されます。セキュリティグループの名前は次のステップで使用しますので、書き留めておきます。 -
次の 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
-
-
(オプション) 次の 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" } ] }, . . . }
-
(省略可) 前の手順で追加したルールよりも規制のゆるいルールがセキュリティグループに設定されている場合は、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