Nutanix Clusters on AWS のセキュリティグループのデフォルト設定について理解する

記事タイトルとURLをコピーする

概要

 当エントリーでは、Nutanix Clusters on AWS (以後NCA) 構築時に自動的に作成&アタッチされるセキュリティグループ(以後SG)のデフォルト設定について詳細についてAWSインフラ管理者視点で確認していきます。

NCAの通信制御はどうあるべきか

 NCAのようにAWSインフラ上にNutanix Clusterを構築される環境の場合は、 AWSレイヤーでもNutanixレイヤーでも似たような通信制御の機能を持つ 形となる為、どのように実施すべきかについては悩ましいところがあると思いますので確認しつつ考えていきます。

以下マニュアルでNCAのUVMのネットワークセキュリティに関する言及が確認出来ます。

portal.nutanix.com

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単位の細かい制御は不可)

www.nutanix.com


また、自動作成される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単位でざっくり何を許可しているかについて分けて考え詳細を見ていきます。

f:id:swx-tamura:20211110094536p:plain

コチラの図のネットワークリソースに関する詳細は以下blogを参照してください

blog.serverworks.co.jp

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へ自動的にルールが追加されます。

f:id:swx-tamura:20211109144956p:plain

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も図とかで整理しておかないといざトラブルシューティングの際に混乱してしまう可能性があるので備えておきたいものです。

関連エントリー

blog.serverworks.co.jp

blog.serverworks.co.jp