

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定受限環境的安全群組
<a name="security-groups-configuration"></a>

根據預設， 會 AWS ParallelCluster 建立和設定安全群組，以允許叢集節點之間的所有流量。在高度受限的環境中，您可能需要將網路存取限制為僅叢集操作所需的連接埠。本節說明如何為 AWS ParallelCluster 部署設定具有限制存取的自訂安全群組。

## 安全群組概觀
<a name="security-groups-configuration-overview"></a>

AWS ParallelCluster 使用安全群組來控制前端節點、運算節點和登入節點之間的網路流量 （如果已設定）。根據預設，當 AWS ParallelCluster 建立叢集時，它會建立安全群組，以允許叢集內節點之間的所有流量。在具有嚴格安全要求的環境中，您可以提供自訂安全群組，將流量限制為僅必要的連接埠。

您可以在叢集組態的下列區段中設定安全群組：
+ [`HeadNode` / `Networking`](HeadNode-v3.md#HeadNode-v3-Networking) - 控制對前端節點的存取
+ [`Scheduling` / `SlurmQueues` / `Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking) - 控制對運算節點的存取
+ [`LoginNodes`](LoginNodes-v3.md) - 控制登入節點的存取 （如果已設定）

對於這些區段，您可以指定：
+ `SecurityGroups` - 取代 AWS ParallelCluster 將建立的預設安全群組
+ `AdditionalSecurityGroups` - 新增安全群組，以及 建立的預設安全群組 AWS ParallelCluster

## 叢集操作所需的連接埠
<a name="security-groups-configuration-required-ports"></a>

設定自訂安全群組時，您必須確保在適當的節點之間開啟下列連接埠：


**前端節點所需的連接埠**  

| 連線埠 | 通訊協定 | Direction | 用途 | 
| --- | --- | --- | --- | 
| 22 | TCP | 傳入 | 前端節點的 SSH 存取 （從允許的 IP 範圍） | 
| 6817-6819 | TCP | 傳入 | Slurm 控制器連接埠 （來自運算和登入節點） | 
| 6817-6819 | TCP | 傳出 | Slurm 控制器連接埠 （用於運算和登入節點） | 
| 8443 | TCP | 傳入 | NICE DCV （如果啟用，從允許的 IP 範圍） | 
| 2049 年 111 月 | TCP/UDP | 傳入 | NFS （使用 NFS 進行共用儲存時，來自運算和登入節點） | 
| 443 | TCP | 傳出 | HTTPS 存取 AWS 服務 （如果未使用 VPC 端點） | 


**運算節點所需的連接埠**  

| 連線埠 | 通訊協定 | Direction | 用途 | 
| --- | --- | --- | --- | 
| 22 | TCP | 傳入 | SSH 存取 （來自前端節點和登入節點） | 
| 6818 | TCP | 傳入 | Slurm 協助程式連接埠 （來自前端節點） | 
| 6817-6819 | TCP | 傳出 | Slurm 控制器連接埠 （前端節點） | 
| 2049 年 111 月 | TCP/UDP | 傳出 | NFS （對於前端節點，如果使用 NFS 進行共用儲存） | 
| 443 | TCP | 傳出 | HTTPS 存取 AWS 服務 （如果未使用 VPC 端點） | 

如果您使用的是 EFA （彈性布料轉接器），您還必須允許已啟用 EFA 的運算節點之間的所有流量：
+ 運算節點與 EFA 之間的所有 TCP 和 UDP 流量
+ 具有 EFA 的運算節點之間的 EFA 裝置上所有流量

**注意**  
如果您使用的是 FSx for Lustre、Amazon EFS 或其他儲存解決方案等共用儲存系統，您也需要確保為這些服務開啟適當的連接埠。

## 建立自訂安全群組
<a name="security-groups-configuration-custom"></a>

若要為您的 AWS ParallelCluster 部署建立自訂安全群組，請遵循下列步驟：

1. 使用 AWS 管理主控台、 AWS CLI 或 AWS CloudFormation 為前端節點、運算節點和登入節點 （如適用） 建立安全群組。

1. 設定安全群組規則以僅允許必要的流量，如上一節所述。

1. 參考叢集組態檔案中的這些安全群組。

以下是如何使用 CLI AWS 建立安全群組的範例：

```
# Create security group for head node
aws ec2 create-security-group \
  --group-name pcluster-head-node-sg \
  --description "Security group for ParallelCluster head node" \
  --vpc-id vpc-12345678

# Create security group for compute nodes
aws ec2 create-security-group \
  --group-name pcluster-compute-node-sg \
  --description "Security group for ParallelCluster compute nodes" \
  --vpc-id vpc-12345678

# Add rules to allow necessary traffic between head and compute nodes
# (Add specific rules based on the required ports listed above)
```

## 在叢集組態中設定安全群組
<a name="security-groups-configuration-cluster-config"></a>

建立自訂安全群組之後，您可以在叢集組態檔案中參考這些群組：

```
# Example cluster configuration with custom security groups
HeadNode:
  ...
  Networking:
    SubnetId: subnet-12345678
    SecurityGroups:
      - sg-headnode12345  # Custom security group for head node
    # Or use AdditionalSecurityGroups if you want to keep the default security groups
    # AdditionalSecurityGroups:
    #   - sg-additional12345
  ...

Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue1
      ...
      Networking:
        SubnetIds:
          - subnet-12345678
        SecurityGroups:
          - sg-computenode12345  # Custom security group for compute nodes
        # Or use AdditionalSecurityGroups if you want to keep the default security groups
        # AdditionalSecurityGroups:
        #   - sg-additional12345
      ...

# If using login nodes
LoginNodes:
  Pools:
    - Name: login-pool
      ...
      Networking:
        SubnetIds:
          - subnet-12345678
        SecurityGroups:
          - sg-loginnode12345  # Custom security group for login nodes
        # Or use AdditionalSecurityGroups if you want to keep the default security groups
        # AdditionalSecurityGroups:
        #   - sg-additional12345
      ...
```

使用 時`SecurityGroups`， 只會 AWS ParallelCluster 使用您指定的安全群組，取代預設的安全群組。使用 時`AdditionalSecurityGroups`， AWS ParallelCluster 會使用其建立的預設安全群組，以及您指定的其他安全群組。

**警告**  
如果您為運算執行個體啟用 [Elastic Fabric Adapter (EFA)](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa)，請確定已啟用 EFA 的執行個體是允許所有傳入和傳出流量本身的安全群組成員。這是 EFA 正常運作的必要項目。

## 在受限環境中使用 VPC 端點
<a name="security-groups-configuration-vpc-endpoints"></a>

在高度受限的環境中，您可能想要在沒有網際網路存取的情況下部署在子網路 AWS ParallelCluster 中。在這種情況下，您需要設定 VPC 端點，以允許叢集與 AWS 服務通訊。如需詳細說明，請參閱 [AWS ParallelCluster 在沒有網際網路存取的單一子網路中](aws-parallelcluster-in-a-single-public-subnet-no-internet-v3.md)。

使用 VPC 端點時，請確定您的安全群組允許往返 VPC 端點的流量。您可以將與 VPC 端點相關聯的安全群組新增至頭部節點和運算節點的`AdditionalSecurityGroups`組態，以執行此操作。

```
HeadNode:
  ...
  Networking:
    SubnetId: subnet-1234567890abcdef0
    AdditionalSecurityGroups:
      - sg-abcdef01234567890  # Security group that enables communication with VPC endpoints
  ...

Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - ...
      Networking:
        SubnetIds:
          - subnet-1234567890abcdef0
        AdditionalSecurityGroups:
          - sg-1abcdef01234567890  # Security group that enables communication with VPC endpoints
```

## 安全群組組態的最佳實務
<a name="security-groups-configuration-best-practices"></a>

在受限環境中設定 的安全群組 AWS ParallelCluster 時，請考慮下列最佳實務：
+ **最低權限原則**：僅開啟叢集操作所需的連接埠。
+ **使用安全群組參考**：盡可能使用安全群組參考 （允許來自另一個安全群組的流量），而不是 CIDR 區塊來限制叢集元件之間的流量。
+ **限制 SSH 存取**：將前端節點的 SSH 存取限制為僅使用 [`HeadNode`/ / 組態所需的 IP `Ssh``AllowedIps`](HeadNode-v3.md#yaml-HeadNode-Ssh-AllowedIps) 範圍。
+ **限制 DCV 存取**：如果使用 NICE DCV，請使用 [`HeadNode`/ / 組態僅限制存取需要的 IP `Dcv``AllowedIps`](HeadNode-v3.md#yaml-HeadNode-Dcv-AllowedIps) 範圍。
+ **徹底測試**：設定自訂安全群組之後，請徹底測試所有叢集功能，以確保所有必要的通訊路徑都能正常運作。
+ **記錄您的組態**：維護安全群組組態的文件，包括開啟哪些連接埠，以及為什麼需要這些連接埠。

## 對安全群組問題進行故障診斷
<a name="security-groups-configuration-troubleshooting"></a>

如果您在設定自訂安全群組之後遇到問題，請考慮下列疑難排解步驟：
+ **檢查叢集日誌**：檢閱 CloudWatch Logs 中的叢集日誌是否有任何連線錯誤。
+ **驗證安全群組規則**：確保在適當的節點之間開啟所有必要的連接埠。
+ **測試連線**能力：使用 `telnet`或 等工具`nc`來測試特定連接埠上節點之間的連線能力。
+ **暫時展開規則**：如果您無法識別需要哪些連接埠，請暫時允許叢集節點之間的所有流量，然後在識別所需的連接埠時逐漸限制。
+ **檢查 VPC 端點組態**：如果您使用的是 VPC 端點，請確保它們已正確設定，且安全群組允許進出流量。

如果持續遇到問題，您可以從叢集組態檔案移除`SecurityGroups`組態 AWS ParallelCluster ，以還原為使用 建立的預設安全群組。