ここでは、次の点を紹介します。
- セキュリティグループのAuthorizeSecurityGroupeとRevokeSecurityGroup
- セキュリティグループのJoinSecurityGroupeとLeaveSecurityGroup
Alibaba Cloud は、クラシックネットワークと VPC ネットワークという 2 種類のネットワークを提供します。 それらは異なるセキュリティグループルールをサポートしています。
- クラシックネットワークの場合: イントラネットインバウンド、イントラネットアウトバウンド、インターネットインバウンド、およびインターネットアウトバウンドのルールを設定します。
- VPC ネットワークの場合: イントラネットインバウンドとイントラネットアウトバウンドのルールを設定します。
セキュリティグループに関するイントラネット通信の基礎知識
セキュリティグループのイントラネット通信に関する次の点を解説します。
- デフォルトでは、同一セキュリティグループ内の ECS インスタンスだけが互いにアクセスできます。 つまり、異なるセキュリティグループ内の同一アカウントのインスタンスは、イントラネット上で互いにアクセスできません。 これは、クラシックネットワークと VPC ネットワークの両方に当てはまります。 したがって、クラシックネットワークの ECS インスタンスはイントラネット上で安全が保証されます。
- 異なるセキュリティグループに 2 つの ECS インスタンスがあり、それらがイントラネット経由で互いにアクセスできないようにしたいが実際にはアクセスできてしまう場合は、セキュリティグループのイントラネットルール設定を確認する必要があります。
イントラネットのルールに次の項目が含まれる場合は、再設定することを推奨します。
- すべてのポートを許可
- 許可されたオブジェクトが、CIDR セグメント (SourceCidrIp) 。0.0.0.0/0 または 10.0.0.0/8。 クラシックネットワークの場合、上記のルールによってイントラネットが外部アクセスにさらされる可能性があります。
- 異なるセキュリティグループのリソース間でネットワーク相互通信を実装する場合は、セキュリティグループ権限を採用する必要があります。 イントラネットアクセスの場合は、CIDR セグメント権限ではなく、送信元セキュリティグループ権限を採用することを推奨します。
セキュリティルールの属性
セキュリティルールは、次の属性を持つさまざまなアクセス権限を主に記述します。
- Policy: 権限ポリシー。 パラメーター値は accept または drop です。
- Priority: 優先順位。 優先順位は作成時間の降順で並べ替えられています。 ルールの優先度範囲は 1~100 です。 デフォルト値は 1 で、これが最も高い優先度です。 値が大きいほど、優先度が低くなります。
- NicType: ネットワークタイプ。 セキュリティグループ権限では (つまり、SourceGroupId を指定して、SourceCidrIp を指定しない) 、NicType を intranet と指定する必要があります。
- 説明:
- IpProtocol: IP プロトコル。 値: tcp、udp、icmp、gre または all。 値 "all" はすべてのプロトコルを指します。
- PortRange: IP プロトコルに関連するポート番号の範囲。
- IpProtocol の値が tcp または udp の場合は、ポート番号の範囲は 1~65535 です。 形式は "開始ポート番号/終了ポート番号" とする必要があります。 たとえば、 "1/200" はポート範囲が 1~200 であることを示しています。 入力値を "200/1" とすると、インターフェイスを呼び出したときにエラーが報告されます。
- IpProtocol の値が icmp、gre、all の場合は、ポート番号範囲は "-1/-1" であり、ポート番号に制限がないことを示しています。
- セキュリティグループ権限を採用する場合は、SourceGroupId (つまり、送信元セキュリティグループ ID) を指定する必要があります。 この場合は、この権限がクロスアカウント権限であるかどうかに基づいて SourceGroupOwnerAccount の設定を選択可能です。 SourceGroupOwnerAccount は、送信元セキュリティグループが属するアカウントを示しています。
- CIDR 権限を採用する場合は、SourceCidrIp を指定する必要があります。 SourceCidrIp は送信元 IP アドレスセグメントであり、CIDR 形式にする必要があります。
インバウンドリクエストを許可するルールの作成
コンソールまたは API を使用してセキュリティグループを作成する場合、デフォルトのインバウンドルールは deny all です。つまり、デフォルトではインバウンドリクエストはすべて拒否されます。 これはすべての状況に当てはまるわけではないため、適切にインバウンドルールを設定する必要があります。
インターネットのポート 80 を有効にして外部アプリケーションに HTTP サービスを提供する必要がある場合は、インバウンドリクエストをすべて許可するために、IP ネットワークセグメントに制限をかけるのではなく 0.0.0.0/0 と設定します。 このために、コンソールパラメーターがかっこの外側にあり、OpenAPI パラメーターがかっこの内側にある以下のプロパティを参照します (パラメーターが両方とも同じであっても違いは生じません) 。
- NIC タイプ (NicType): インターネット (internet) 。 VPC の場合は、「intranet」と入力して、EIP を介したインターネットアクセスを実装します。
- アクション (Policy): 許可 (accept)
- ルールの方向 (NicType): インバウンド
- プロトコル種別 (IpProtocol): TCP (tcp)
- ポート範囲 (PortRange): 80/80
- 許可オブジェクト (SourceCidrIp): 0.0.0.0/0
- 優先度 (Priority): 1
インバウンドリクエストを拒否するルールの作成
インバウンドリクエストを拒否するには、優先度の低い拒否ポリシーを設定するだけです。 このようにして、必要に応じてより高い優先度を持つ別のルールを設定して、このルールを上書きします。 たとえば、ポート 6379 へのアクセスを拒否する方法を以下に説明します。
- NIC タイプ (NicType): イントラネット (intranet)
- アクション (Policy): 禁止 (drop)
- ルールの方向 (NicType): インバウンド
- プロトコル種別 (IpProtocol): TCP (tcp)
- ポート範囲 (PortRange): 6379/6379
- 許可オブジェクト (SourceCidrIp): 0.0.0.0/0
- 優先度 (Priority): 100
クラシックネットワークのイントラネットセキュリティグループルールでは CIDR または IP 権限は使用しません。
エラスティックコンピューティングの場合、イントラネット IP アドレスは頻繁に変わり、IP アドレスがマッピングされるネットワークセグメントが動的に変わります。 このため、クラシックネットワークではセキュリティグループを介してイントラネットアクセスを許可することのみ推奨します。
たとえば、sg-redis セキュリティグループ内に Redis クラスターを構築し、特定のコンピューター (sg-web 内のコンピューターなど) にだけ、この Redis クラスターのサーバーへのアクセスを許可する場合、CIDR を設定する必要はありません。 代わりに、インバウンドルールを追加して、関連するセキュリティグループ ID を指定します。
- NIC タイプ (NicType): イントラネット (intranet)
- アクション (Policy): 許可 (accept)
- ルールの方向 (NicType): インバウンド
- プロトコル種別 (IpProtocol): TCP (tcp)
- ポート範囲 (PortRange): 6379/6379
- 許可オブジェクト (SourceGroupId): sg-web
- 優先度 (Priority): 1
VPC のインスタンスの場合、複数の VSwitch を使用して IP アドレス範囲の計画を立てている場合は、セキュリティグループのインバウンドルールとして CIDR 設定を使用します。 ただし、VPC ネットワークセグメントがはっきりしない場合は、インバウンドルールのセキュリティグループに優先度付けすることを推奨します。
相互通信が必要な ECS インスタンスの同一セキュリティグループへの追加
単一 ECS インスタンスは最大 5 つのセキュリティグループに参加し、同一セキュリティグループ内の ECS インスタンスはイントラネットを介して相互通信します。 計画中に複数のセキュリティグループを作成し、複数のセキュリティルールを直接設定するのが複雑すぎる場合は、セキュリティグループを作成し、イントラネット通信が必要なインスタンスを追加します。
セキュリティグループが異なれば、ネットワークの種類も異なります。 さらに重要なことに、クラシックネットワークの ECS インスタンスは、クラシックネットワーク用に作成したセキュリティグループにしか参加できません。 VPC 内の ECS インスタンスは、同一 VPC 用に作成したセキュリティグループにのみ参加可能です。
さらに、セキュリティグループルールの設定が非常に面倒になるため、ECS インスタンスをすべて同一セキュリティグループに追加することは推奨しません。 大規模または中規模のアプリケーションの場合、各サーバーグループには異なるロールがあり、インバウンドおよびアウトバウンドリクエストを合理的な方法で計画することが重要です。
コンソールで、 セキュリティグループに参加の説明に従ってセキュリティグループにインスタンスを追加します。
Alibaba Cloud OpenAPI に馴染みがある場合は、OpenAPI によってバッチ操作を実行します。 詳細は、「OpenAPI を使用した ECS インスタンスのエラスティックな管理」をご参照ください。 対応する Python スニペットは次のとおりです。
def join_sg(sg_id, instance_id):
request = JoinSecurityGroupRequest()
request.set_InstanceId(instance_id)
request.set_SecurityGroupId(sg_id)
response = _send_request(request)
return response
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
セキュリティグループからの ECS インスタンスの削除
ECS インスタンスを不適切なセキュリティグループに追加すると、サービスが公開されたりブロックされたりする可能性があります。 この場合、セキュリティグループから ECS インスタンスを削除します。 ただし、削除前に、ECS インスタンスが別のセキュリティグループに追加されていることを確認する必要があります。
対応する Python スニペットは次のとおりです。
def leave_sg(sg_id, instance_id):
request = LeaveSecurityGroupRequest()
request.set_InstanceId(instance_id)
request.set_SecurityGroupId(sg_id)
response = _send_request(request)
return response
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
セキュリティグループの適切な名前とタグの定義
セキュリティグループの合理的な名前と説明は、複雑なルールの組み合わせの意味をすばやく識別するのに役立ちます。 セキュリティグループの名前と説明を必要に応じて変更します。
また、セキュリティグループにタグを設定することも可能です。 タグでグループ化して自身のセキュリティグループを管理します。 タグを設定するには、コンソールまたは API を使用してタグを直接設定します。
不要なセキュリティグループの削除
セキュリティグループのセキュリティルールは、ホワイトリストおよびブラックリスト項目と似ています。 したがって、不要なセキュリティグループに 誤って ECS インスタンスを追加することによる予期しない問題の発生を防ぐため、不要なセキュリティグループを削除することを推奨します。