

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 의 보안 AWS ParallelCluster
<a name="security"></a>

의 클라우드 보안 AWS 이 최우선 순위입니다. AWS 고객은 보안에 가장 민감한 조직의 요구 사항을 충족하도록 구축된 데이터 센터 및 네트워크 아키텍처의 이점을 누릴 수 있습니다.

보안은 AWS 와 사용자 간의 공동 책임입니다. [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/) 에서는 이를 클라우드 자체**의 보안과 클라우드 내부**의 보안으로 설명합니다.
+ **클라우드 보안 **- AWS 는 AWS 클라우드에서 AWS 서비스를 실행하는 인프라를 보호할 책임이 있습니다. AWS 또한는 안전하게 사용할 수 있는 서비스를 제공합니다. 타사 감사자는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/) 일환으로 보안의 효과를 정기적으로 테스트하고 확인합니다. 에 적용되는 규정 준수 프로그램에 대한 자세한 내용은 규정 준수 프로그램 [AWS 제공 범위 내 서비스규정 준수 프로그램](https://aws.amazon.com/compliance/services-in-scope/) 제공 범위 내 서비스를 AWS ParallelCluster참조하세요.
+ **클라우드의 보안** - 사용자의 책임은 사용하는 특정 AWS 서비스 또는 서비스에 따라 결정됩니다. 또한 귀하는 데이터의 민감도, 회사 요구 사항, 관련 법률 및 규정을 비롯한 기타 여러 관련된 요소에 대해서도 책임이 있습니다.

이 설명서에서는를 사용할 때 공동 책임 모델을 적용하는 방법을 설명합니다 AWS ParallelCluster. 다음 주제에서는 보안 및 규정 준수 목표를 충족하도록 AWS ParallelCluster 를 구성하는 방법을 보여줍니다. 또한 AWS 리소스를 모니터링하고 보호하는 데 도움이 되는 AWS ParallelCluster 방식으로를 사용하는 방법을 알아봅니다.

**Topics**
+ [에서 사용하는 서비스에 대한 보안 정보 AWS ParallelCluster](#security-seealso)
+ [의 데이터 보호 AWS ParallelCluster](data-protection.md)
+ [에 대한 자격 증명 및 액세스 관리 AWS ParallelCluster](security-iam.md)
+ [에 대한 규정 준수 검증 AWS ParallelCluster](security-compliance-validation.md)
+ [TLS 1.2의 최소 버전 적용](security-enforcing-tls.md)
+ [제한된 환경에 대한 보안 그룹 구성](security-groups-configuration.md)

## 에서 사용하는 서비스에 대한 보안 정보 AWS ParallelCluster
<a name="security-seealso"></a>
+ [Amazon EC2의 보안](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security.html)
+ [Amazon API Gateway의 보안](https://docs.aws.amazon.com/apigateway/latest/developerguide/security.html)
+ [의 보안 AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/security.html)
+ [CloudFormation의 보안](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/security.html)
+ [Amazon CloudWatch의 보안](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/security.html)
+ [AWS CodeBuild의 보안](https://docs.aws.amazon.com/codebuild/latest/userguide/security.html)
+ [Amazon DynamoDB의 보안](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/security.html)
+ [Amazon ECR의 보안](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security.html)
+ [Amazon ECS의 보안](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/security.html)
+ [Amazon EFS의 보안](https://docs.aws.amazon.com/efs/latest/ug/security-considerations.html)
+ [FSx for Lustre의 보안](https://docs.aws.amazon.com/fsx/latest/LustreGuide/security.html)
+ [의 보안 AWS Identity and Access Management (IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/security.html)
+ [EC2 Image Builder의 보안](https://docs.aws.amazon.com/imagebuilder/latest/userguide/image-builder-security.html)
+ [의 보안 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-security.html)
+ [Amazon Route 53의 보안](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/security.html)
+ [Amazon SNS의 보안](https://docs.aws.amazon.com/sns/latest/dg/sns-security.html)
+ [Amazon SQS의 보안( AWS ParallelCluster 버전 2.x의 경우)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-security.html)
+ [Amazon S3의 보안](https://docs.aws.amazon.com/AmazonS3/latest/dev/security.html)
+ [Amazon VPC의 보안](https://docs.aws.amazon.com/vpc/latest/userguide/security.html)

# 의 데이터 보호 AWS ParallelCluster
<a name="data-protection"></a>

 AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)의 데이터 보호에 적용됩니다. 이 모델에 설명된 대로 AWS 는 모든를 실행하는 글로벌 인프라를 보호할 책임이 있습니다 AWS 클라우드. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 사용하는 AWS 서비스 의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 관한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 *AWS 보안 블로그*의 [AWS 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터 보호를 위해 자격 증명을 보호하고 AWS 계정 AWS IAM Identity Center 또는 AWS Identity and Access Management (IAM)를 사용하여 개별 사용자를 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 AWS 리소스와 통신합니다. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ 를 사용하여 API 및 사용자 활동 로깅을 설정합니다 AWS CloudTrail. CloudTrail 추적을 사용하여 AWS 활동을 캡처하는 방법에 대한 자세한 내용은 *AWS CloudTrail 사용 설명서*의 [ CloudTrail 추적 작업을 참조하세요](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html).
+ 내부의 모든 기본 보안 제어와 함께 AWS 암호화 솔루션을 사용합니다 AWS 서비스.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.
+ 명령줄 인터페이스 또는 API를 AWS 통해에 액세스할 때 FIPS 140-3 검증 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [연방 정보 처리 표준(FIPS) 140-3](https://aws.amazon.com/compliance/fips/)을 참조하세요.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는 또는 기타 AWS 서비스 에서 콘솔, API AWS CLI또는 AWS SDKs를 사용하여 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명을 URL에 포함해서는 안 됩니다.

## 데이터 암호화
<a name="data-encryption"></a>

보안 서비스의 주요 특징은 정보가 활발히 사용되지 않을 때 암호화된다는 것입니다.

### 저장 중 암호화
<a name="encryption-rest"></a>

AWS ParallelCluster 는 사용자를 대신하여 AWS 서비스와 상호 작용하는 데 필요한 자격 증명 이외의 고객 데이터를 자체적으로 저장하지 않습니다.

클러스터의 노드에 있는 데이터의 경우 저장된 데이터가 암호화될 수 있습니다.

Amazon EBS 볼륨의 경우 [`EbsSettings`](SharedStorage-v3.md#SharedStorage-v3-EbsSettings) 섹션의 [`EbsSettings`](SharedStorage-v3.md#SharedStorage-v3-EbsSettings)/`Encrypted` 및 [`EbsSettings`](SharedStorage-v3.md#SharedStorage-v3-EbsSettings)/`KmsKeyId` 설정을 사용하여 암호화가 구성됩니다. 자세한 내용은 Amazon EC2 사용 설명서의 [Amazon EBS 암호화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html)를 참조하세요.

Amazon EFS 볼륨의 경우 [`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings) 섹션의 [`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings)/`Encrypted` 및 [`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings)/`KmsKeyId` 설정을 사용하여 암호화가 구성됩니다. 자세한 내용은 Amazon Elastic File System 사용 설명서**의 [저장 중 암호화 작동 방식](https://docs.aws.amazon.com/efs/latest/ug/encryption-at-rest.html#howencrypt)을 참조하세요.

FSx for Lustre 파일 시스템의 경우 Amazon FSx 파일 시스템을 생성할 때 저장 데이터의 암호화가 자동으로 활성화됩니다. 자세한 내용을 알아보려면 Amazon FSx for Lustre 사용 설명서**의 [저장 데이터 암호화](https://docs.aws.amazon.com/fsx/latest/LustreGuide/encryption-at-rest.html)를 참조하세요.

NVMe 볼륨이 있는 인스턴스 유형의 경우 NVMe 인스턴스 스토어 볼륨의 데이터는 인스턴스의 하드웨어 모듈에서 구현된 XTS-AES-256 암호를 사용하여 암호화합니다. 하드웨어 모듈을 사용하여 암호화 키를 생성하며, 암호화 키는 각 NVMe 인스턴스 스토리지 디바이스마다 고유합니다. 인스턴스가 중지되거나 종료되면 모든 암호화 키가 손상되어 복구가 불가능해집니다. 이 암호화를 비활성화할 수 없으며, 사용자 자신의 암호화 키를 제공할 수 없습니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [저장된 암호화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html#encryption-rest)를 참조하세요.

 AWS ParallelCluster 를 사용하여 고객 데이터를 로컬 컴퓨터로 전송하여 저장하는 AWS 서비스를 호출하는 경우 해당 데이터의 저장, 보호 및 암호화 방법에 대한 자세한 내용은 해당 서비스 사용 설명서의 보안 및 규정 준수 장을 참조하세요.

### 전송 중 암호화
<a name="encryption-transit"></a>

기본적으로 AWS ParallelCluster 및 AWS 서비스 엔드포인트를 실행하는 클라이언트 컴퓨터에서 전송되는 모든 데이터는 HTTPS/TLS 연결을 통해 모든 데이터를 전송하여 암호화됩니다. 클러스터의 노드 간 트래픽은 선택한 인스턴스 유형에 따라 자동으로 암호화될 수 있습니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [전송 중 암호화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html#encryption-transit)를 참조하세요.

## 다음 사항도 참조하세요.
<a name="security-data-protection-seealso"></a>
+ [Amazon EC2의 데이터 보호](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html)
+ [EC2 Image Builder의 데이터 보호](https://docs.aws.amazon.com/imagebuilder/latest/userguide/data-protection.html)
+ [의 데이터 보호 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/security-data-protection.html)
+ [Amazon EFS의 데이터 보호](https://docs.aws.amazon.com/efs/latest/ug/efs-backup-solutions.html)
+ [Amazon S3의 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/dev/DataDurability.html)
+ [FSx for Lustre의 데이터 보호](https://docs.aws.amazon.com/fsx/latest/LustreGuide/data-protection.html)

# 에 대한 자격 증명 및 액세스 관리 AWS ParallelCluster
<a name="security-iam"></a>

AWS ParallelCluster 는 역할을 사용하여 AWS 리소스와 해당 서비스에 액세스합니다. 가 권한을 부여하는 데 AWS ParallelCluster 사용하는 인스턴스 및 사용자 정책은에 설명되어 있습니다[AWS Identity and Access Management 의 권한 AWS ParallelCluster](iam-roles-in-parallelcluster-v3.md).

유일한 주요 차이점은 표준 사용자와 장기 보안 인증을 사용할 때 인증하는 방법입니다. 사용자가 AWS 서비스의 콘솔에 액세스하려면 암호가 필요하지만 동일한 사용자가를 사용하여 동일한 작업을 수행하려면 액세스 키 페어가 필요합니다 AWS ParallelCluster. 다른 모든 단기 보안 인증은 콘솔에서 사용되는 것과 동일한 방식으로 사용됩니다.

에서 사용하는 자격 증명 AWS ParallelCluster 은 일반 텍스트 파일에 저장되며 암호화***되지 않습니다***.
+ `$HOME/.aws/credentials` 파일은 AWS 리소스에 액세스하는 데 필요한 장기 자격 증명을 저장합니다. 여기에는 계정 액세스 키 ID와 비밀 액세스 키가 포함됩니다.
+ 사용자가 수임하는 역할이나 AWS IAM Identity Center 서비스에 대한 보안 인증 정보와 같은 단기 보안 인증 정보도 각각 `$HOME/.aws/cli/cache` 및 `$HOME/.aws/sso/cache` 폴더에 저장됩니다.

위험 완화****
+ `$HOME/.aws` 폴더와 해당 하위 폴더 및 파일에 대한 파일 시스템 권한을 구성하여 권한 있는 사용자만 액세스할 수 있도록 제한하는 것이 좋습니다.
+ 보안 인증이 손상된 경우, 손상 가능성을 줄이려면 가능한 한 임시 보안 인증이 있는 역할을 사용합니다. 단기 역할 보안 인증을 요청하고 새로 고치는 경우에만 장기 보안 인증을 사용합니다.

# 에 대한 규정 준수 검증 AWS ParallelCluster
<a name="security-compliance-validation"></a>

타사 감사자는 여러 규정 준수 프로그램의 일환으로 AWS 서비스의 보안 및 AWS 규정 준수를 평가합니다. 를 사용하여 서비스에 AWS ParallelCluster 액세스해도 해당 서비스의 규정 준수는 변경되지 않습니다.

특정 규정 준수 프로그램 범위에 속하는 AWS 서비스 목록은 규정 준수 [AWS 프로그램 범위에 속하는 서비스규정 준수](https://aws.amazon.com/compliance/services-in-scope/) . 일반 정보는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/) 참조하세요.

를 사용하여 타사 감사 보고서를 다운로드할 수 있습니다 AWS Artifact. 자세한 정보는 에서 [AWS Artifact에서 보고서 다운로드](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)를 참조하세요.

사용 시 규정 준수 책임은 데이터의 민감도, 회사의 규정 준수 목표 및 관련 법률과 규정에 따라 AWS ParallelCluster 결정됩니다.는 규정 준수를 지원하기 위해 다음 리소스를 AWS 제공합니다.
+ [보안 및 규정 준수 빠른 시작 가이드](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance) -이 배포 가이드에서는 아키텍처 고려 사항에 대해 설명하고 보안 및 규정 준수 중심의 기준 환경을 배포하기 위한 단계를 제공합니다 AWS.
+ [Amazon Web Services의 HIPAA 보안 및 규정 준수를 위한 설계 AWS 백서 ](https://docs.aws.amazon.com/pdfs/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.pdf) -이 백서에서는 기업이를 사용하여 HIPAA 준수 애플리케이션을 AWS 생성하는 방법을 설명합니다.
+ [AWS 규정 준수 리소스](https://aws.amazon.com/compliance/resources/) -이 워크북 및 가이드 모음은 업계 및 위치에 적용될 수 있습니다.
+ *AWS Config 개발자 안내서*의 [규칙을 사용하여 리소스 평가](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html) -이 AWS Config 서비스는 리소스 구성이 내부 관행, 업계 지침 및 규정을 얼마나 잘 준수하는지 평가합니다.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) -이 AWS 서비스는 보안 업계 표준 및 모범 사례 준수를 확인하는 데 도움이 AWS 되는 내 보안 상태에 대한 포괄적인 보기를 제공합니다.

# TLS 1.2의 최소 버전 적용
<a name="security-enforcing-tls"></a>

 AWS 서비스와 통신할 때 보안을 강화하려면 TLS 1.2 이상을 사용하도록를 AWS ParallelCluster 구성해야 합니다. 를 사용하면 AWS ParallelCluster Python이 TLS 버전을 설정하는 데 사용됩니다.

 AWS ParallelCluster 가 TLS 1.2 이전 버전의 TLS를 사용하지 않도록 하려면 OpenSSL을 다시 컴파일하여이 최소값을 적용한 다음 Python을 다시 컴파일하여 새로 빌드된 OpenSSL을 사용해야 할 수 있습니다.

## 현재 지원되는 프로토콜 확인
<a name="enforcing-tls-supported"></a>

먼저 OpenSSL을 사용하여 테스트 서버 및 Python SDK에 사용할 자체 서명된 인증서를 만듭니다.

```
$ openssl req -subj '/CN=localhost' -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365
```

그런 다음 OpenSSL을 사용하여 테스트 서버를 가동합니다.

```
$ openssl s_server -key key.pem -cert cert.pem -www
```

새 터미널 창에서 가상 환경을 만들고 Python SDK를 설치합니다.

```
$ python3 -m venv test-env
source test-env/bin/activate
pip install botocore
```

SDK의 기본 HTTP 라이브러리를 사용하는 `check.py`라는 새로운 Python 스크립트를 만듭니다.

```
$ import urllib3
URL = 'https://localhost:4433/'

http = urllib3.PoolManager(
ca_certs='cert.pem',
cert_reqs='CERT_REQUIRED',
)
r = http.request('GET', URL)
print(r.data.decode('utf-8'))
```

새 스크립트를 실행합니다.

```
$ python check.py
```

그러면 연결에 대한 세부 정보가 표시됩니다. 출력에서 "프로토콜 : "을 검색합니다. 출력이 “TLSv1.2" 이상이면 SDK는 기본적으로 TLS v1.2 이상으로 설정됩니다. 이전 버전인 경우 OpenSSL을 다시 컴파일하고 Python을 다시 컴파일해야 합니다.

그러나 Python이 기본적으로 TLS v1.2 이상으로 설치되더라도 서버가 TLS v1.2 이상을 지원하지 않으면 Python이 TLS v1.2 이전 버전으로 다시 협상할 수 있습니다. Python이 이전 버전으로 자동으로 다시 협상하지 않는지 확인하려면 다음과 같이 테스트 서버를 다시 시작하세요.

```
$ openssl s_server -key key.pem -cert cert.pem -no_tls1_3 -no_tls1_2 -www
```

이전 버전의 OpenSSL을 사용하는 경우 `-no_tls_3` 플래그를 사용할 수 없을 수 있습니다. 이 경우 사용 중인 OpenSSL 버전이 TLS v1.3을 지원하지 않으므로 플래그를 제거합니다. 그런 다음 Python 스크립트를 다시 실행합니다.

```
$ python check.py
```

Python 설치가 TLS 1.2 이전 버전에서 올바르게 다시 협상되지 않으면 SSL 오류가 발생합니다.

```
$ urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='localhost', port=4433): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1108)')))
```

연결할 수 있는 경우 TLS v1.2 이전의 프로토콜 협상을 비활성화하기 위해 OpenSSL과 Python을 다시 컴파일해야 합니다.

## OpenSSL 및 Python 컴파일
<a name="enforcing-tls-compile"></a>

 AWS ParallelCluster 가 TLS 1.2 이전 버전에 대해 협상하지 않도록 하려면 OpenSSL 및 Python을 다시 컴파일해야 합니다. 이렇게 하려면 다음 내용을 복사하여 스크립트를 만들고 실행합니다.

```
#!/usr/bin/env bash
set -e

OPENSSL_VERSION="1.1.1d"
OPENSSL_PREFIX="/opt/openssl-with-min-tls1_2"
PYTHON_VERSION="3.8.1"
PYTHON_PREFIX="/opt/python-with-min-tls1_2"


curl -O "https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz"
tar -xzf "openssl-$OPENSSL_VERSION.tar.gz"
cd openssl-$OPENSSL_VERSION
./config --prefix=$OPENSSL_PREFIX no-ssl3 no-tls1 no-tls1_1 no-shared
make > /dev/null
sudo make install_sw > /dev/null


cd /tmp
curl -O "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz"
tar -xzf "Python-$PYTHON_VERSION.tgz"
cd Python-$PYTHON_VERSION
./configure --prefix=$PYTHON_PREFIX --with-openssl=$OPENSSL_PREFIX --disable-shared > /dev/null
make > /dev/null
sudo make install > /dev/null
```

이것은 TLS 1.2 이전 버전을 자동으로 협상하지 않는 정적으로 연결된 OpenSSL을 가진 Python 버전을 컴파일합니다. 또한 `/opt/openssl-with-min-tls1_2` 디렉터리에 OpenSSL을 설치하고 `/opt/python-with-min-tls1_2` 디렉터리에 Python을 설치합니다. 이 스크립트를 실행한 후 새 버전의 Python 설치를 확인하세요.

```
$ /opt/python-with-min-tls1_2/bin/python3 --version
```

다음 사항이 인쇄되어야 합니다.

```
Python 3.8.1
```

이 새 버전의 Python이 TLS 1.2 이전 버전을 협상하지 않는지 확인하려면 새로 설치된 Python 버전(즉, [현재 지원되는 프로토콜 확인](#enforcing-tls-supported))을 사용하는 `/opt/python-with-min-tls1_2/bin/python3`의 단계를 다시 실행합니다.

# 제한된 환경에 대한 보안 그룹 구성
<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>

사용자 지정 보안 그룹을 구성할 때 적절한 노드 간에 다음 포트가 열려 있는지 확인해야 합니다.


**헤드 노드에 필요한 포트**  

| Port | 프로토콜 | 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 | 아웃바운드 |  AWS 서비스에 대한 HTTPS 액세스(VPC 엔드포인트를 사용하지 않는 경우) | 


**컴퓨팅 노드에 필요한 포트**  

| Port | 프로토콜 | Direction | 용도 | 
| --- | --- | --- | --- | 
| 22 | TCP | 인바운드 | SSH 액세스(헤드 노드 및 로그인 노드에서) | 
| 6818 | TCP | 인바운드 | Slurm 데몬 포트(헤드 노드에서) | 
| 6817-6819 | TCP | 아웃바운드 | Slurm 컨트롤러 포트(헤드 노드로) | 
| 111, 2049 | TCP/UDP | 아웃바운드 | NFS(공유 스토리지에 NFS를 사용하는 경우 헤드 노드로) | 
| 443 | TCP | 아웃바운드 |  AWS 서비스에 대한 HTTPS 액세스(VPC 엔드포인트를 사용하지 않는 경우) | 

EFA(Elastic Fabric Adapter)를 사용하는 경우 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. 클러스터 구성 파일에서 이러한 보안 그룹을 참조합니다.

다음은 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 는 생성하는 기본 보안 그룹과 지정한 추가 보안 그룹을 모두 사용합니다.

**주의**  
컴퓨팅 인스턴스에 대해 [EFA(Elastic Fabric Adapter)](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa)를 활성화하는 경우 EFA 지원 인스턴스가 모든 인바운드 및 아웃바운드 트래픽을 허용하는 보안 그룹의 멤버인지 확인합니다. 이는 EFA가 제대로 작동하는 데 필요합니다.

## 제한된 환경에서 VPC 엔드포인트 사용
<a name="security-groups-configuration-vpc-endpoints"></a>

매우 제한된 환경에서는 인터넷 액세스 없이 서브넷 AWS ParallelCluster 에 배포할 수 있습니다. 이 경우 클러스터가 AWS 서비스와 통신할 수 있도록 VPC 엔드포인트를 구성해야 합니다. 자세한 지침은 [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 Logs의 클러스터 로그에서 연결 오류를 검토합니다.
+ **보안 그룹 규칙 확인**: 필요한 모든 포트가 적절한 노드 간에 열려 있는지 확인합니다.
+ **연결 테스트**: `telnet` 또는와 같은 도구를 사용하여 특정 포트의 노드 간 연결을 테스트`nc`합니다.
+ **일시적으로 규칙 확장**: 필요한 포트를 식별하는 데 문제가 있는 경우 클러스터 노드 간의 모든 트래픽을 일시적으로 허용한 다음 필요한 포트를 식별할 때 점진적으로 제한합니다.
+ **VPC 엔드포인트 구성 확인**: VPC 엔드포인트를 사용하는 경우 엔드포인트가 올바르게 구성되었는지, 보안 그룹이 엔드포인트와 주고받는 트래픽을 허용하는지 확인합니다.

문제가 계속 발생하면 클러스터 구성 파일에서 `SecurityGroups` 구성을 제거하여에서 생성한 기본 보안 그룹을 사용하여 AWS ParallelCluster 로 되돌릴 수 있습니다.