

# S3 Files의 사전 조건
<a name="s3-files-prereq-policies"></a>

S3 Files 사용을 시작하기 전에 다음 사전 조건을 완료했는지 확인합니다.

## AWS 계정 및 컴퓨팅 설정
<a name="s3-files-prereq-account-setup"></a>
+ AWS 계정이 있습니다.
+ 파일 시스템을 생성하려는 원하는 AWS 리전에 컴퓨팅 리소스와 S3 범용 버킷이 있습니다. 자세한 내용은 [범용 버킷 생성](create-bucket-overview.md) 섹션을 참조하세요.
+ S3 버킷에 버전 관리가 활성화되어 있습니다. S3 Files는 파일 시스템과 S3 버킷 간의 변경 사항을 동기화하려면 S3 버전 관리가 필요합니다. 자세한 내용은 [버킷에 버전 관리 사용 설정](manage-versioning-examples.md) 섹션을 참조하세요.
+ S3 버킷은 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 또는 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS) 중 하나를 사용해야 합니다.

## S3 Files 클라이언트
<a name="s3-files-prereq-client"></a>

Amazon EC2에서 S3 Files를 사용하려면 Amazon EFS 및 Amazon S3 Files를 위한 공유 오픈 소스 도구 모음인 `amazon-efs-utils` 클라이언트를 설치해야 합니다. S3 Files를 사용하려면 `amazon-efs-utils` 버전 3.0.0 이상이 필요합니다. 클라이언트에는 S3 파일 시스템 탑재를 간소화하고 파일 시스템의 탑재 상태를 모니터링하기 위한 Amazon CloudWatch 지표를 활성화하는 탑재 도우미 프로그램이 포함되어 있습니다.

### 1단계: 클라이언트 설치
<a name="s3-files-prereq-client-install"></a>
+ Secure Shell(SSH)를 통해 Amazon EC2 인스턴스의 터미널에 액세스하고, 적절한 사용자 이름으로 로그인합니다. 자세한 내용은 *Amazon Elastic Compute Cloud 사용 설명서*의 [EC2 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)을 참조하세요.
+ Amazon Linux를 사용하는 사용자의 경우 다음을 수행하여 Amazon 리포지토리에서 efs-utils를 설치합니다.

  ```
  sudo yum -y install amazon-efs-utils
  ```
+ 지원되는 다른 Linux 배포판을 사용하는 경우 다음을 수행할 수 있습니다.

  ```
  curl https://amazon-efs-utils.aws.com/efs-utils-installer.sh | sudo sh -s -- --install
  ```
+ 다른 Linux 배포판의 경우 GitHub의 amazon-efs-utils README의 [다른 Linux 배포판](https://github.com/aws/efs-utils/?tab=readme-ov-file#on-other-linux-distributions)을 참조하세요.

### 2단계: botocore 설치
<a name="s3-files-prereq-client-botocore"></a>

`amazon-efs-utils` 클라이언트는 다른 AWS 서비스와 상호 작용하기 위해 botocore를 사용합니다. 예를 들어 Amazon CloudWatch를 사용하여 파일 시스템을 모니터링하려면 botocore를 설치해야 합니다. botocore 설치 및 업그레이드에 대한 지침은 GitHub의 amazon-efs-utils README에 있는 [botocore 설치](https://github.com/aws/efs-utils#install-botocore) 섹션을 참조하세요.

### S3 Files에 대한 FIPS 모드 활성화
<a name="s3-files-prereq-client-fips"></a>

FIPS(연방 정보 처리 표준)를 준수해야 하는 경우 클라이언트에서 FIPS 모드를 활성화해야 합니다. FIPS 모드를 활성화하려면 운영 체제에서 `s3files-utils.conf` 파일을 수정해야 합니다.

다음 단계에 따라 S3 Files에 대해 클라이언트에서 FIPS 모드를 활성화합니다.

1. 선택한 텍스트 편집기를 사용해 `/etc/amazon/efs/s3files-utils.conf` 파일을 엽니다.

1. 다음 텍스트가 포함된 줄을 찾습니다.

   ```
   fips_mode_enabled = false
   ```

1. 텍스트를 다음으로 변경합니다.

   ```
   fips_mode_enabled = true
   ```

1. 변경 내용을 저장합니다.

## IAM 역할 및 정책
<a name="s3-files-prereq-iam"></a>

S3 Files를 사용하려면 다음 두 가지 목적으로 IAM 역할과 연결된 정책을 구성해야 합니다.
+ 파일 시스템에서 버킷에 액세스
+ AWS 컴퓨팅 리소스에 파일 시스템 연결

### 파일 시스템에서 버킷에 액세스하기 위한 IAM 역할
<a name="s3-files-prereq-iam-creation-role"></a>

S3 파일 시스템을 생성할 때 S3 버킷에서 읽고 쓰기 위해 S3 Files가 수임하는 IAM 역할을 지정해야 합니다. 이 역할을 사용하면 S3 Files가 파일 시스템과 S3 버킷 간의 변경 사항을 동기화할 수 있습니다. 또한 역할은 S3 Files가 S3 버킷의 변경 사항을 감지하고 동기화를 트리거하는 데 사용하는 Amazon EventBridge 규칙을 관리할 수 있는 권한을 부여합니다. 또한 소스 버킷의 버킷 정책이 컴퓨팅 리소스의 액세스를 거부하지 않는지 확인해야 합니다.

**참고**  
AWS Management Console을 사용하여 파일 시스템을 생성하면 S3 Files가 필요한 권한으로 이 IAM 역할을 자동으로 생성합니다.

이 IAM 역할에는 다음이 필요합니다.
+ 인라인 정책은 다음과 같습니다.

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "S3BucketPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket",
                  "s3:ListBucketVersions"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}",
              "Condition": {
                  "StringEquals": {
                      "aws:ResourceAccount": "{{accountId}}"
                  }
              }
          },
          {
              "Sid": "S3ObjectPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:AbortMultipartUpload",
                  "s3:DeleteObject*",
                  "s3:GetObject*",
                  "s3:List*",
                  "s3:PutObject*"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}/*",
              "Condition": {
                  "StringEquals": {
                      "aws:ResourceAccount": "{{accountId}}"
                  }
              }
          },
          {
              "Sid": "UseKmsKeyWithS3Files",
              "Effect": "Allow",
              "Action": [
                  "kms:GenerateDataKey",
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo"
              ],
              "Condition": {
                  "StringLike": {
                      "kms:ViaService": "s3.{{region}}.amazonaws.com",
                      "kms:EncryptionContext:aws:s3:arn": [
                          "arn:aws:s3:::{{bucket}}",
                          "arn:aws:s3:::{{bucket}}/*"
                      ]
                  }
              },
              "Resource": "arn:aws:kms:{{region}}:{{accountId}}:*"
          },
          {
              "Sid": "EventBridgeManage",
              "Effect": "Allow",
              "Action": [
                  "events:DeleteRule",
                  "events:DisableRule",
                  "events:EnableRule",
                  "events:PutRule",
                  "events:PutTargets",
                  "events:RemoveTargets"
              ],
              "Condition": {
                  "StringEquals": {
                      "events:ManagedBy": "elasticfilesystem.amazonaws.com"
                  }
              },
              "Resource": [
                  "arn:aws:events:*:*:rule/DO-NOT-DELETE-S3-Files*"
              ]
          },
          {
              "Sid": "EventBridgeRead",
              "Effect": "Allow",
              "Action": [
                  "events:DescribeRule",
                  "events:ListRuleNamesByTarget",
                  "events:ListRules",
                  "events:ListTargetsByRule"
              ],
              "Resource": [
                  "arn:aws:events:*:*:rule/*"
              ]
          }
      ]
  }
  ```

  자리 표시자 값을 해당 값으로 바꿉니다.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/s3-files-prereq-policies.html)
+ S3 Files가 IAM 역할을 수임하도록 허용하는 신뢰 정책입니다. S3 Files 서비스가 수임할 수 있도록 다음 신뢰 정책을 IAM 역할에 추가합니다. {{accountId}}와 {{region}}을 해당 값으로 바꿉니다.

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowS3FilesAssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "Service": "elasticfilesystem.amazonaws.com"
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceAccount": "{{accountId}}"
                  },
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:s3files:{{region}}:{{accountId}}:file-system/*"
                  }
              }
          }
      ]
  }
  ```

### 파일 시스템을 AWS 컴퓨팅 리소스에 연결하기 위한 IAM 역할
<a name="s3-files-prereq-iam-compute-role"></a>

S3 파일 시스템을 탑재하는 컴퓨팅 리소스에는 컴퓨팅 리소스가 S3 파일 시스템 및 소스 S3 버킷과 상호 작용할 수 있도록 허용하는 정책과 함께 IAM 역할(예: EC2 인스턴스 프로파일)이 연결되어 있어야 합니다. 또한 소스 버킷의 버킷 정책이 컴퓨팅 리소스의 액세스를 거부하지 않는지 확인해야 합니다.

컴퓨팅 리소스에 연결된 IAM 역할에 다음 두 가지 정책을 추가합니다.
+ **컴퓨팅 리소스가 S3 파일 시스템에 연결하고 상호 작용할 수 있는 권한**

  IAM 역할에는 탑재 도우미가 S3 파일 시스템에 연결하고 상호 작용할 수 있는 권한이 포함되어야 합니다. 컴퓨팅 리소스에 S3 파일 시스템에 대한 전체 읽기 및 쓰기 권한을 부여하려면 `AmazonS3FilesClientFullAccess` 관리형 정책과 같은 AWS 관리형 정책을 연결할 수 있으며, 읽기 전용 권한의 경우에는 `AmazonS3FilesClientReadOnlyAccess`를 연결할 수 있습니다. Amazon CloudWatch 모니터링을 활성화하려는 경우 `AmazonElasticFileSystemUtils` 관리형 정책을 연결할 수도 있습니다. S3 Files에 사용할 수 있는 관리형 정책의 전체 목록과 자세한 내용은 [Amazon S3 Files에 대한 AWS 관리형 정책](s3-files-security-iam-awsmanpol.md)을 참조하세요. 컴퓨팅 리소스의 IAM 역할에 `s3files:ClientMount` 또는 `s3files:ClientWrite`(읽기 전용 연결에는 필요하지 않음)와 같은 개별 IAM 권한을 추가하여 이러한 권한을 제공할 수도 있습니다.
+ **컴퓨팅 리소스에 S3 객체에 대한 읽기 액세스 권한을 부여하는 인라인 정책**

  다음 인라인 정책을 IAM 역할에 추가합니다. 이 정책은 동일한 계정의 연결된 S3 버킷에서 객체를 직접 읽을 수 있는 컴퓨팅 리소스 권한을 부여하여 읽기 성능을 최적화합니다. {{버킷}}을 S3 버킷 이름으로 바꾸거나 버킷 이름을 접두사로 바꿉니다.

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "S3ObjectReadAccess",
              "Effect": "Allow",
              "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}/*"
          },
          {
              "Sid": "S3BucketListAccess",
              "Effect": "Allow",
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::{{bucket}}"
          }
      ]
  }
  ```

## 보안 그룹
<a name="s3-files-prereq-security-groups"></a>

파일 시스템 및 탑재 대상이 생성되면 파일 시스템 사용을 시작하도록 올바른 보안 그룹을 구성해야 합니다. 컴퓨팅 리소스와 탑재 대상의 보안 그룹은 아래 표와 같이 필요한 트래픽을 허용해야 합니다.


| 보안 그룹 | 규칙 타입 | 프로토콜 | Port | 소스/대상 | 
| --- | --- | --- | --- | --- | 
| EC2 인스턴스 | 아웃바운드 | TCP | 2049 | 탑재 대상 보안 그룹 | 
| 탑재 대상 | 인바운드 | TCP | 2049 | EC2 인스턴스 보안 그룹 | 