概要
当エントリーでは、Nutanix Clusters on AWS (以後NCA) 構築時に自動的に作成&アタッチされるセキュリティグループ(以後SG)のデフォルト設定について詳細についてAWSインフラ管理者視点で確認していきます。
- 概要
- NCAの通信制御はどうあるべきか
- NCAのセキュリティグループ一覧
- NCA構築時に作成されるSGのルール一覧
- ざっくりイメージ
- 1. SG: Internal Management (sg-06177da99a42251aa)
- 2. SG: User Management (sg-0d435f750d4503cd8)
- 3. SG: UVM (sg-0c74189b464692708)
- まとめ
- 関連エントリー
NCAの通信制御はどうあるべきか
NCAのようにAWSインフラ上にNutanix Clusterを構築される環境の場合は、 AWSレイヤーでもNutanixレイヤーでも似たような通信制御の機能を持つ
形となる為、どのように実施すべきかについては悩ましいところがあると思いますので確認しつつ考えていきます。
以下マニュアルでNCAのUVMのネットワークセキュリティに関する言及が確認出来ます。
Network security for UVM networks is managed by the cluster itself (networking service). This security covers all UVM traffic that is either entering the cluster or entering a subnet. All traffic between UVMs on the same subnet is allowed. You can achieve more granular network security by using the Flow product. See the Flow Microsegmentation Guide for more information.
AWSインフラ視点だと以下の通り解釈できます。
UVMネットワークのネットワークセキュリティは、クラスター自体(ネットワークサービス)によって管理される。このセキュリティは、クラスタに入るまたはサブネットに入るすべてのUVMトラフィックをカバーする
- -> NCAおよび内部のUVMは、構築時に自動作成されたSGのネットワーク制御が適用されている
UVM用サブネット上のUVM間のすべてのトラフィックが許可される
- -> UVMサブネット内の通信は全てのトラフィックが許可されている
Flow製品を使用すると、よりきめ細かいネットワークセキュリティを実現できる
- -> 細かいトラフィック制御を実現したい場合は、Nutanixの Flowという製品を利用して制御を実施すべきである (1つのENIのセカンダリIPアドレスとしてUVMが関連付けられる仕様の為、SGではUVM単位の細かい制御は不可)
また、自動作成されるSGのルールに関して以下言及があります。
If you want to modify these default rules, you must modify the user security group for management from the AWS console or APIs directly.
編集するなという訳ではなく、「もし変更が必要な場合はAWS側のオペレーションで実施してくださいね」といった内容です。
結論
従って、ざっくりNCAの通信制御の原則としては以下2点を意識するのが良さそうです。
- UVM間の通信はデフォルトで全て許可されている。もし制御したい場合はAWSの機能(SGやらNACL)ではなく、Nutanixの機能(Flow)を利用する
- NutanixよりNCAの為に自動作成されたSGについては、必要な場合のみAWS側のオペレーションで変更する
続けて、NCAが稼働するためにNutanix側から自動作成されるSGの詳細を見ていきます。
NCAのセキュリティグループ一覧
NCA構築後は以下のようなに3つの用途で作成されます。
(厳密には4つですがdefaultはNutanixの予約ENI用途の物が便宜上利用しているだけなので今回は省略)
No | 名称 | オフィシャルの用途説明 |
---|---|---|
1 | Internal Management | クラスター内のAHVとCVM間のすべての通信を許可 |
2 | User Management | UVMからCVMへの通信に特定のポートを許可 |
3 | UVM | User VM間の通信を可能とする |
SG IDから許可する設定がある為、IDも明記とします。
[cloudshell-user@ip-10-0-121-89 tmp]$ echo "VpcId^GroupName^GroupId^Description" > /tmp/awscli.tmp;\ > aws ec2 describe-security-groups --query "SecurityGroups[].[VpcId,GroupName,GroupId,Description]" --output text | tr "\t" "^" >> /tmp/awscli.tmp ;\ > column -s^ -t /tmp/awscli.tmp;\ > rm /tmp/awscli.tmp VpcId GroupName GroupId Description vpc-06d2c707a03ca8651 default sg-04f38705e55fdba86 default VPC security group vpc-06d2c707a03ca8651 Nutanix Cluster CC229F2B7E01 Internal Management sg-06177da99a42251aa Internal management security group vpc-06d2c707a03ca8651 Nutanix Cluster CC229F2B7E01 UVM sg-0c74189b464692708 UVM security group vpc-06d2c707a03ca8651 Nutanix Cluster CC229F2B7E01 User Management sg-0d435f750d4503cd8 Security group for management interfaces [cloudshell-user@ip-10-0-121-89 tmp]$
NCA構築時に作成されるSGのルール一覧
今回は以下コマンドで必要最小限のカラムだけを見ていきます。
利用コマンド(AWS CLI)
echo "GroupId^IpProtocol^FromPort^ToPort^CidrIpv4^SourceGroupId^Description" > /tmp/awscli.tmp ;\ aws ec2 describe-security-group-rules \ --query "SecurityGroupRules[].\ [GroupId,\ IpProtocol,\ FromPort,\ ToPort,\ CidrIpv4,\ ReferencedGroupInfo.GroupId,\ Description]" \ --output text | tr "\t" "^" >> /tmp/awscli.tmp ;\ column -s^ -t /tmp/awscli.tmp ;\ rm /tmp/awscli.tmp
結果
以下の条件で構築したNCAで自動的に作成されたセキュリティグループのルール一覧は以下のようになりました。
- Public から Prismへのアクセスを許可
- NCAでの Management Service起動を有効化かつ 10.0.0.0/22 からのみ接続を許可
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-0c74189b464692708 False tcp 9440 9440 None sg-0d435f750d4503cd8 RESP API calls and Prism access sg-0d435f750d4503cd8 False tcp 2020 2020 10.0.0.0/22 None Disaster Recovery sg-0c74189b464692708 False tcp 2027 2027 None sg-0d435f750d4503cd8 CVM to FSVM management sg-0c74189b464692708 True -1 -1 -1 0.0.0.0/0 None None sg-0d435f750d4503cd8 False tcp 3205 3205 10.0.0.0/22 None Stargate iscsi access for Files sg-04f38705e55fdba86 False -1 -1 -1 None sg-04f38705e55fdba86 None sg-06177da99a42251aa False -1 -1 -1 None sg-06177da99a42251aa Allow hosts and CVMs to communicate sg-0d435f750d4503cd8 False tcp 3205 3205 None sg-0c74189b464692708 Stargate iscsi access for Files sg-0d435f750d4503cd8 False tcp 111 111 10.0.0.0/22 None Nutanix Move appliance sg-0c74189b464692708 False tcp 22 22 None sg-0d435f750d4503cd8 SSH from CVM/PE to UVMs sg-0d435f750d4503cd8 False tcp 3260 3260 10.0.0.0/22 None Stargate iscsi access for Files sg-0c74189b464692708 False icmp 0 0 None sg-0d435f750d4503cd8 eco reply (to ping) sg-0d435f750d4503cd8 False tcp 22 22 10.0.0.0/22 None SSH to both CVM and Hypervisor sg-0d435f750d4503cd8 False tcp 8443 8443 None sg-0c74189b464692708 Cluster remote support sg-0d435f750d4503cd8 False tcp 2073 2073 None sg-0c74189b464692708 NGT tools sg-0c74189b464692708 False icmp 8 0 None sg-0d435f750d4503cd8 eco request sg-0c74189b464692708 False tcp 2100 2100 None sg-0d435f750d4503cd8 Cluster configuration sg-0d435f750d4503cd8 False udp 111 111 None sg-0c74189b464692708 Nutanix Move appliance sg-0d435f750d4503cd8 False udp 2049 2049 None sg-0c74189b464692708 Nutanix Move appliance sg-0c74189b464692708 False tcp 3000 3000 None sg-0d435f750d4503cd8 Analytics clients Analytics UI sg-0d435f750d4503cd8 False tcp 2020 2020 None sg-0c74189b464692708 Disaster Recovery sg-0d435f750d4503cd8 False tcp 2090 2090 None sg-0c74189b464692708 Ergon access sg-0d435f750d4503cd8 False icmp 0 0 None sg-0c74189b464692708 eco reply (to ping) sg-0d435f750d4503cd8 False udp 123 123 None sg-0c74189b464692708 NTP Service sg-0d435f750d4503cd8 False udp 111 111 10.0.0.0/22 None Nutanix Move appliance sg-04f38705e55fdba86 True -1 -1 -1 0.0.0.0/0 None None sg-0c74189b464692708 False tcp 7502 7502 None sg-0d435f750d4503cd8 Access services running on Files sg-0d435f750d4503cd8 False tcp 2009 2009 None sg-0c74189b464692708 Disaster Recovery sg-0d435f750d4503cd8 False tcp 9440 9440 None sg-0c74189b464692708 Prism web console, Citrix MCS sg-0d435f750d4503cd8 False tcp 2036 2036 None sg-0c74189b464692708 Anduril access sg-0c74189b464692708 False tcp 443 443 None sg-0d435f750d4503cd8 Analytics clients Gateway API access sg-0d435f750d4503cd8 False tcp 2049 2049 None sg-0c74189b464692708 Nutanix Move appliance sg-0c74189b464692708 False udp 123 123 None sg-0d435f750d4503cd8 NTP Service sg-0d435f750d4503cd8 False tcp 80 80 10.0.0.0/22 None Cluster remote support sg-0d435f750d4503cd8 False tcp 8443 8443 10.0.0.0/22 None Cluster remote support sg-06177da99a42251aa True -1 -1 -1 0.0.0.0/0 None None sg-0d435f750d4503cd8 False tcp 7501 7501 None sg-0c74189b464692708 AFS services on CVM access for Files sg-0c74189b464692708 False tcp 7501 7501 None sg-0d435f750d4503cd8 Access services running on Files sg-0d435f750d4503cd8 False tcp 2009 2009 10.0.0.0/22 None Disaster Recovery sg-0d435f750d4503cd8 False tcp 5000 5000 None sg-0c74189b464692708 NTG user VM sg-0d435f750d4503cd8 False tcp 111 111 None sg-0c74189b464692708 Nutanix Move appliance sg-0d435f750d4503cd8 False tcp 9440 9440 10.0.3.207/32 None Prism access for Load balancer nodes sg-0d435f750d4503cd8 False tcp 3260 3260 None sg-0c74189b464692708 Stargate iscsi access for Files sg-0d435f750d4503cd8 False tcp 2030 2030 None sg-0c74189b464692708 Acropolis access sg-0d435f750d4503cd8 False udp 2049 2049 10.0.0.0/22 None Nutanix Move appliance sg-0d435f750d4503cd8 False icmp 8 0 None sg-0c74189b464692708 eco request sg-0c74189b464692708 False -1 -1 -1 None sg-0c74189b464692708 Allow UVMs to communicate sg-0c74189b464692708 False tcp 29092 29092 None sg-0d435f750d4503cd8 FSVM internal IPs Kafka broker access sg-0d435f750d4503cd8 False tcp 22 22 None sg-0c74189b464692708 SSH to both CVM and Hypervisor sg-0c74189b464692708 False tcp 7 7 None sg-0d435f750d4503cd8 TCP echo request from CVM/PE to UVMs sg-0c74189b464692708 False tcp 2090 2090 None sg-0d435f750d4503cd8 CVM to file server management and task status sg-0d435f750d4503cd8 False tcp 2074 2074 None sg-0c74189b464692708 NGT tools sg-0d435f750d4503cd8 False udp 123 123 10.0.0.0/22 None NTP Service sg-0d435f750d4503cd8 False tcp 2049 2049 10.0.0.0/22 None Nutanix Move appliance sg-0d435f750d4503cd8 True -1 -1 -1 0.0.0.0/0 None None sg-0d435f750d4503cd8 False tcp 7501 7501 10.0.0.0/22 None AFS services on CVM access for Files sg-0d435f750d4503cd8 False tcp 80 80 None sg-0c74189b464692708 Cluster remote support
※ IsEgress が Trueの内容がアウトバウンド制御となりますが、以下の通り今回はすべてデフォルトのアウトバウンド制御を実施しない(ALL許可)設定となっていましたので以後の確認からは割愛します。
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-0c74189b464692708 True -1 -1 -1 0.0.0.0/0 None None sg-04f38705e55fdba86 True -1 -1 -1 0.0.0.0/0 None None sg-06177da99a42251aa True -1 -1 -1 0.0.0.0/0 None None sg-0d435f750d4503cd8 True -1 -1 -1 0.0.0.0/0 None None
ざっくりイメージ
NCAはEC2ベアメタルインスタンスを利用するAWSインフラ視点で少し特殊な環境なので図で整理してみます。
各SGのFrom単位でざっくり何を許可しているかについて分けて考え詳細を見ていきます。
コチラの図のネットワークリソースに関する詳細は以下blogを参照してください
1. SG: Internal Management (sg-06177da99a42251aa)
用途に関するオフィシャルの記載は以下です
internal_management: Allows all communication between AHV and CVM within a cluster
クラスター内のAHV(Acropolis Hypervisor) とCVM(Controler VM)間のすべての通信を許可するといった内容です。
① SG: Internal Management (自身)から全てのトラフィックを許可
ベアメタルインスタンスのENIにアタッチされるSGのため、そのENIを介して利用されるNutanixの通信を全て許可している内容と理解出来ます。
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-06177da99a42251aa False -1 -1 -1 None sg-06177da99a42251aa Allow hosts and CVMs to communicate
2. SG: User Management (sg-0d435f750d4503cd8)
用途に関するオフィシャルの記載は以下です
user_management: Allows specific ports for UVM to CVM communication
UVMからCVMへの通信に特定のポートを許可するものとあります
② SG:UVM からNutanix独自通信を許可
SG: UVM用なので UVMとして起動してくるマシン -> EC2ベアメタルインスタンスの中で稼働するNCAの方向で必要な以下通信が許可されています。
一般的なプロトコルはICMPとNTPぐらいで、他はNutanix独自のポートとなっています。
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-0d435f750d4503cd8 False tcp 3205 3205 None sg-0c74189b464692708 Stargate iscsi access for Files sg-0d435f750d4503cd8 False tcp 8443 8443 None sg-0c74189b464692708 Cluster remote support sg-0d435f750d4503cd8 False tcp 2073 2073 None sg-0c74189b464692708 NGT tools sg-0d435f750d4503cd8 False udp 111 111 None sg-0c74189b464692708 Nutanix Move appliance sg-0d435f750d4503cd8 False udp 2049 2049 None sg-0c74189b464692708 Nutanix Move appliance sg-0d435f750d4503cd8 False tcp 2020 2020 None sg-0c74189b464692708 Disaster Recovery sg-0d435f750d4503cd8 False tcp 2090 2090 None sg-0c74189b464692708 Ergon access sg-0d435f750d4503cd8 False icmp 0 0 None sg-0c74189b464692708 eco reply (to ping) sg-0d435f750d4503cd8 False udp 123 123 None sg-0c74189b464692708 NTP Service sg-0d435f750d4503cd8 False tcp 2009 2009 None sg-0c74189b464692708 Disaster Recovery sg-0d435f750d4503cd8 False tcp 9440 9440 None sg-0c74189b464692708 Prism web console, Citrix MCS sg-0d435f750d4503cd8 False tcp 2036 2036 None sg-0c74189b464692708 Anduril access sg-0d435f750d4503cd8 False tcp 2049 2049 None sg-0c74189b464692708 Nutanix Move appliance sg-0d435f750d4503cd8 False tcp 7501 7501 None sg-0c74189b464692708 AFS services on CVM access for Files sg-0d435f750d4503cd8 False tcp 5000 5000 None sg-0c74189b464692708 NTG user VM sg-0d435f750d4503cd8 False tcp 111 111 None sg-0c74189b464692708 Nutanix Move appliance sg-0d435f750d4503cd8 False tcp 3260 3260 None sg-0c74189b464692708 Stargate iscsi access for Files sg-0d435f750d4503cd8 False tcp 2030 2030 None sg-0c74189b464692708 Acropolis access sg-0d435f750d4503cd8 False icmp 8 0 None sg-0c74189b464692708 eco request sg-0d435f750d4503cd8 False tcp 22 22 None sg-0c74189b464692708 SSH to both CVM and Hypervisor sg-0d435f750d4503cd8 False tcp 2074 2074 None sg-0c74189b464692708 NGT tools sg-0d435f750d4503cd8 False tcp 80 80 None sg-0c74189b464692708 Cluster remote support
③ Core Nutanix Serviceへの通信許可 (有効化した場合のみ)
以下、My Nutanix画面のNCA構築時に指定する項目となります。 NCA内でManagement Serviceを稼働させるか否かを指定出来る項目があり、こちらの指定内容によってSGへ自動的にルールが追加されます。
Disableであれば以下記載するルールは追加されず、Enableであれば暗黙でRestrictedとなり接続出来るネットワークCIDRの指定が求められます。
VPCのネットワークCIDRの指定は必須となり、更に追加したい場合はこちらに指定する事でVPCのネットワークCIDRとは別にルールが自動的に作成されます。
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-0d435f750d4503cd8 False tcp 2020 2020 10.0.0.0/22 None Disaster Recovery sg-0d435f750d4503cd8 False tcp 3205 3205 10.0.0.0/22 None Stargate iscsi access for Files sg-0d435f750d4503cd8 False tcp 111 111 10.0.0.0/22 None Nutanix Move appliance sg-0d435f750d4503cd8 False tcp 3260 3260 10.0.0.0/22 None Stargate iscsi access for Files sg-0d435f750d4503cd8 False tcp 22 22 10.0.0.0/22 None SSH to both CVM and Hypervisor sg-0d435f750d4503cd8 False udp 111 111 10.0.0.0/22 None Nutanix Move appliance sg-0d435f750d4503cd8 False tcp 80 80 10.0.0.0/22 None Cluster remote support sg-0d435f750d4503cd8 False tcp 8443 8443 10.0.0.0/22 None Cluster remote support sg-0d435f750d4503cd8 False tcp 2009 2009 10.0.0.0/22 None Disaster Recovery sg-0d435f750d4503cd8 False udp 2049 2049 10.0.0.0/22 None Nutanix Move appliance sg-0d435f750d4503cd8 False udp 123 123 10.0.0.0/22 None NTP Service sg-0d435f750d4503cd8 False tcp 2049 2049 10.0.0.0/22 None Nutanix Move appliance sg-0d435f750d4503cd8 False tcp 7501 7501 10.0.0.0/22 None AFS services on CVM access for Files
AWSインフラ視点だとUser Management用のSGとCore Nutanix Service用のSGは別物として分かれていた方が 個人的に設計として綺麗なようにも思えるのですが何かNutanix側で何か事情があるのかもしれません。
④ Prismアクセス用NLBからの通信を許可
今回の環境で自動作成されたNLBの Private IPアドレスが 10.0.3.207/32
であった為、そのようにルールに埋め込まれています。
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-0d435f750d4503cd8 False tcp 9440 9440 10.0.3.207/32 None Prism access for Load balancer nodes
ちなみにブラウザからHTTPS相当で利用するPrismへのアクセス用のポートは TCP: 9440
を利用します。
NLBとも連動しているのでNutanix独自ポートの中でもAWSインフラ担当として把握しておきたいポート番号になります。
3. SG: UVM (sg-0c74189b464692708)
用途に関するオフィシャルの記載は以下です
UVM: Allows communication between user VMs
UVM間の通信を許可するものとあります
⑤ SG: User Management からUVMに対する通信許可
こちらのSGがアタッチされるがEC2ベアメタルインスタンスのENIとなるので、NCA->UVMの方向で許可されている内容が以下ルールとなります。
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-0c74189b464692708 False tcp 9440 9440 None sg-0d435f750d4503cd8 RESP API calls and Prism access sg-0c74189b464692708 False tcp 2027 2027 None sg-0d435f750d4503cd8 CVM to FSVM management sg-0c74189b464692708 False tcp 22 22 None sg-0d435f750d4503cd8 SSH from CVM/PE to UVMs sg-0c74189b464692708 False icmp 0 0 None sg-0d435f750d4503cd8 eco reply (to ping) sg-0c74189b464692708 False icmp 8 0 None sg-0d435f750d4503cd8 eco request sg-0c74189b464692708 False tcp 2100 2100 None sg-0d435f750d4503cd8 Cluster configuration sg-0c74189b464692708 False tcp 3000 3000 None sg-0d435f750d4503cd8 Analytics clients Analytics UI sg-0c74189b464692708 False tcp 7502 7502 None sg-0d435f750d4503cd8 Access services running on Files sg-0c74189b464692708 False tcp 443 443 None sg-0d435f750d4503cd8 Analytics clients Gateway API access sg-0c74189b464692708 False udp 123 123 None sg-0d435f750d4503cd8 NTP Service sg-0c74189b464692708 False tcp 7501 7501 None sg-0d435f750d4503cd8 Access services running on Files sg-0c74189b464692708 False tcp 29092 29092 None sg-0d435f750d4503cd8 FSVM internal IPs Kafka broker access sg-0c74189b464692708 False tcp 7 7 None sg-0d435f750d4503cd8 TCP echo request from CVM/PE to UVMs sg-0c74189b464692708 False tcp 2090 2090 None sg-0d435f750d4503cd8 CVM to file server management and task status
⑥ SG:UVM (自身) から全てのトラフィックを許可
こちらのルールがある事で、UVM間が全て通信可能な状態となっています。
異なるUVMサブネットをネットワーク関連付けて拡張した場合でも自動作成されたENIに同じSGがアタッチされる構成となる為、異なるUVMサブネット間でも同様に通信は全て許可されます。
GroupId IsEgress IpProtocol FromPort ToPort CidrIpv4 SourceGroupId Description sg-0c74189b464692708 False -1 -1 -1 None sg-0c74189b464692708 Allow UVMs to communicate
まとめ
NCA構築時に自動作成されアタッチされるSGのデフォルトのルール状態について確認してみました。
NCAは、1つのENIで複数の役割を担う構成となっている事から、それにアタッチされるSGも図とかで整理しておかないといざトラブルシューティングの際に混乱してしまう可能性があるので備えておきたいものです。