

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为受限环境配置安全组
<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 范围） | 
| 111、2049 | TCP/UDP | 入站 | NFS（如果使用 NFS 作为共享存储，则来自计算和登录节点） | 
| 443 | TCP | 出站 | 通过 HTTPS 访问 AWS 服务（如果不使用 VPC 终端节点） | 


**计算节点所需的端口**  

| 端口 | 协议 | Direction | 用途 | 
| --- | --- | --- | --- | 
| 22 | TCP | 入站 | SSH 访问（从头节点和登录节点） | 
| 6818 | TCP | 入站 | Slurm 守护程序端口（来自头节点） | 
| 6817-6819 | TCP | 出站 | Slurm 控制器端口（到头节点） | 
| 111、2049 | TCP/UDP | 出站 | NFS（如果使用 NFS 作为共享存储，则用于头节点） | 
| 443 | TCP | 出站 | 通过 HTTPS 访问 AWS 服务（如果不使用 VPC 终端节点） | 

如果您使用的是 EFA（弹性结构适配器），则还必须允许启用 EFA 的计算节点之间的所有流量：
+ 使用 EFA 的计算节点之间的所有 TCP 和 UDP 流量
+ 使用 EFA 的计算节点之间的 EFA 设备上的所有流量

**注意**  
如果您使用共享存储系统（ FSx 例如 Lustre、Amazon EFS 或其他存储解决方案），则还需要确保为这些服务开放相应的端口。

## 创建自定义安全组
<a name="security-groups-configuration-custom"></a>

要为您的 AWS ParallelCluster 部署创建自定义安全组，请执行以下步骤：

1. 使用 AWS 管理控制台、 AWS CLI 或，为头节点、计算节点和登录节点（如果适用）创建安全组 AWS CloudFormation。

1. 按照上一节所述，将安全组规则配置为仅允许必要的流量。

1. 在集群配置文件中引用这些安全组。

以下是如何使用 AWS CLI 创建安全组的示例：

```
# 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 将同时使用它创建的默认安全组和您指定的其他安全组。

**警告**  
如果您为计算实例启用 Ela [stic Fabric Adapter (](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa)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 访问**：使用 [`HeadNode`/`Ssh`/`AllowedIps`](HeadNode-v3.md#yaml-HeadNode-Ssh-AllowedIps)配置将对头节点的 SSH 访问限制为仅需要它的 IP 范围。
+ **限制 DCV 访问**：如果使用 NICE DCV，请使用 [`HeadNode``Dcv`//`AllowedIps`](HeadNode-v3.md#yaml-HeadNode-Dcv-AllowedIps)配置将访问限制为仅需要访问的 IP 范围。
+ **彻底测试**：配置自定义安全组后，彻底测试所有集群功能，确保所有必需的通信路径均正常运行。
+ **记录您的配置**：保留安全组配置的文档，包括哪些端口已打开以及为什么需要这些端口。

## 对安全组问题进行故障排除
<a name="security-groups-configuration-troubleshooting"></a>

如果您在配置自定义安全组后遇到问题，请考虑以下故障排除步骤：
+ **检查集群日志**：在 “日志” 中查看集群 CloudWatch 日志中是否存在任何连接错误。
+ **验证安全组规则**：确保在相应节点之间打开所有必需的端口。
+ **测试连接**：使用`telnet`或之类的工具`nc`来测试特定端口上节点之间的连通性。
+ **临时扩展规则**：如果您在确定需要哪些端口时遇到问题，请暂时允许集群节点之间的所有流量，然后在确定所需端口时逐渐对其进行限制。
+ **检查 VPC 终端节点配置**：如果您使用的是 VPC 终端节点，请确保它们配置正确，并且安全组允许进出它们的流量。

如果您继续遇到问题，则可以通过从集群配置文件中删除`SecurityGroups`配置来恢复使用创建的默认安全组。 AWS ParallelCluster 