S3 Files 사전 요구사항
S3 Files 사전 요구사항 (Prerequisites for S3 Files)
S3 Files 사용을 시작하기 전에 다음 사전 요구사항을 완료했는지 확인하세요.
출처: 문서
본문
AWS 계정 및 컴퓨팅 설정 (AWS account and compute setup)
- AWS 계정이 있어요.
- 파일 시스템을 만들고 싶은 AWS 리전에 컴퓨팅 리소스와 S3 범용 버킷(general purpose bucket)이 있어요. 자세한 내용은 범용 버킷 만들기를 참고하세요.
- S3 버킷에서 버전 관리(versioning)가 활성화되어 있어요. S3 Files는 파일 시스템과 S3 버킷 사이의 변경 사항을 동기화하려면 S3 버전 관리를 필요로 해요. 자세한 내용은 버킷에서 버전 관리 활성화를 참고하세요.
- S3 버킷이 다음 암호화 타입 중 하나를 사용해야 해요: Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 또는 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS).
S3 Files 클라이언트 (S3 Files client)
Amazon EC2에서 S3 Files를 사용하려면 Amazon EFS와 Amazon S3 Files용 공유 오픈소스 도구 모음인 amazon-efs-utils 클라이언트를 설치해야 해요. S3 Files로 작업하려면 버전 3.0.0 이상의 amazon-efs-utils가 필요해요. 이 클라이언트에는 S3 파일 시스템 마운트를 단순화하고 파일 시스템 마운트 상태를 모니터링하기 위한 Amazon CloudWatch 지표를 활성화하는 마운트 헬퍼 프로그램이 포함돼 있어요.
1단계: 클라이언트 설치 (Step 1: Install the client)
- Secure Shell(SSH)로 Amazon EC2 인스턴스의 터미널에 접속하고 적절한 사용자 이름으로 로그인해요. 자세한 내용은 Amazon Elastic Compute Cloud User Guide의 Connect to your EC2 instance를 참고하세요.
- 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의 On other Linux distributions를 참고하세요.
2단계: botocore 설치 (Step 2: Install botocore)
amazon-efs-utils 클라이언트는 다른 AWS 서비스와 상호 작용하려면 botocore를 사용해요. 예를 들어 파일 시스템을 모니터링하기 위해 Amazon CloudWatch를 사용하려면 botocore를 설치해야 해요. botocore 설치 및 업그레이드 지침은 GitHub의 amazon-efs-utils README의 Installing botocore를 참고하세요.
S3 Files의 FIPS 모드 활성화 (Enabling FIPS mode for S3 Files)
연방 정보 처리 표준(Federal Information Processing Standards, FIPS)을 준수해야 한다면 클라이언트에서 FIPS 모드를 활성화해야 해요. FIPS 모드를 활성화하려면 운영 체제의 s3files-utils.conf 파일을 수정해야 해요.
클라이언트에서 S3 Files의 FIPS 모드를 활성화하려면 다음 단계를 따르세요.
- 원하는 텍스트 편집기로
/etc/amazon/efs/s3files-utils.conf파일을 열어요. - 다음 텍스트가 포함된 줄을 찾아요.
fips_mode_enabled = false
- 텍스트를 다음과 같이 변경해요.
fips_mode_enabled = true
- 변경 사항을 저장해요.
IAM 역할 및 정책 (IAM roles and policies)
S3 Files를 사용하려면 두 가지 목적으로 IAM 역할과 연결된 정책을 구성해야 해요.
- 파일 시스템에서 버킷에 접근하기(Accessing your bucket from the file system)
- 파일 시스템을 AWS 컴퓨팅 리소스에 연결하기(Attaching your file system to AWS compute resources)
파일 시스템에서 버킷에 접근하기 위한 IAM 역할 (IAM role for accessing your bucket from the file system)
S3 Files 파일 시스템을 만들 때 S3 Files가 S3 버킷에서 읽고 쓰기 위해 수임(assume)하는 IAM 역할을 지정해요. 이 역할은 S3 Files에 파일 시스템과 버킷 사이의 변경 사항을 동기화할 권한을 부여하며, 동기화를 트리거하는 Amazon EventBridge 규칙도 포함돼요. 또한 S3 버킷 정책이 컴퓨팅 리소스의 접근을 거부하지 않는지 확인해야 해요.
S3 Files는 버킷에 S3 버전 관리가 필요해요. s3:GetObject 외에도 s3:GetObjectVersion 및 s3:GetObjectVersionTagging 같은 버전별 API 작업을 사용해요. 다음 정책은 버전 관리된 작업과 버전 관리되지 않은 작업을 모두 다루기 위해 와일드카드(예: s3:GetObject 대신 s3:GetObject*)를 사용해요.
참고: AWS Management Console로 파일 시스템을 만들면 S3 Files가 필요한 권한과 함께 이 IAM 역할을 자동으로 만들어요.
이 IAM 역할에는 다음이 필요해요.
인라인 정책 (inline policy)은 다음과 같아요.
{
"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/*"
]
}
]
}
자리표시자(placeholder) 값을 여러분의 값으로 바꿔주세요.
| # | 자리표시자 (Placeholder) | 설명 (Description) | 예시 (Example) |
|---|---|---|---|
| 1 | bucket |
S3 버킷 이름 | my-bucket |
| 2 | region |
버킷의 AWS 리전 | us-east-1 |
| 3 | accountId |
AWS 계정 ID | 123456789012 |
S3 Files가 IAM 역할을 수임하도록 허용하는 신뢰 정책(trust policy) — 다음 신뢰 정책을 IAM 역할에 추가해 S3 Files 서비스가 역할을 수임하도록 허용해요. 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 역할 (IAM role for attaching your file system to AWS compute resources)
S3 파일 시스템을 마운트하는 컴퓨팅 리소스에는 컴퓨팅 리소스가 S3 파일 시스템 및 소스 S3 버킷과 상호 작용할 수 있도록 허용하는 정책이 있는 IAM 역할(예: EC2 인스턴스 프로파일)이 연결되어 있어야 해요. 또한 소스 버킷의 버킷 정책이 컴퓨팅 리소스의 접근을 거부하지 않는지 확인해야 해요.
컴퓨팅 리소스에 연결된 IAM 역할에 다음 두 정책을 추가해요.
컴퓨팅 리소스가 S3 파일 시스템에 연결하고 상호 작용할 수 있는 권한 (Permissions for the compute resource to connect to and interact with S3 file systems)
IAM 역할에는 마운트 헬퍼가 S3 파일 시스템에 연결하고 상호 작용할 수 있는 권한이 포함되어야 해요. 컴퓨팅 리소스에 S3 파일 시스템에 대한 전체 읽기·쓰기 접근을 부여하려면 AmazonS3FilesClientFullAccess 같은 AWS 관리형 정책을, 읽기 전용 접근을 위해 AmazonS3FilesClientReadOnlyAccess를 연결할 수 있어요. Amazon CloudWatch 모니터링을 활성화하려면 AmazonElasticFileSystemsUtils 관리형 정책을 연결할 수도 있어요. 자세한 내용과 S3 Files에 사용할 수 있는 관리형 정책의 전체 목록은 Amazon S3 Files용 AWS 관리형 정책을 참고하세요. 또한 컴퓨팅 리소스의 IAM 역할에 s3files:ClientMount 또는 s3files:ClientWrite(읽기 전용 연결에는 필요하지 않음) 같은 개별 IAM 권한을 추가해 이 권한을 제공할 수도 있어요.
컴퓨팅 리소스에 S3 객체에 대한 읽기 접근을 부여하는 인라인 정책 (An inline policy that grants the compute resource read access to S3 objects)
IAM 역할에 다음 인라인 정책을 추가해요. 이 정책은 컴퓨팅 리소스가 같은 계정의 연결된 S3 버킷에서 객체를 직접 읽을 수 있게 해 줘요. 이는 큰 I/O 작업의 읽기 성능을 개선해요. bucket을 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"
}
]
}
참고: POSIX 권한은 직접 S3 접근에는 적용되지 않아요. 이 정책은 버킷에 대한 직접
s3:GetObject접근을 부여해요. Amazon S3에 직접 이루어지는 읽기는 POSIX 권한이 아니라 IAM 및 버킷 정책에 의해 관리돼요. 자세한 내용은 POSIX 권한 및 직접 S3 접근을 참고하세요.
보안 그룹 (Security groups)
파일 시스템과 마운트 대상이 생성되면 시작하려면 올바른 보안 그룹을 구성해야 해요. 컴퓨팅 리소스와 마운트 대상 모두의 보안 그룹이 아래 표와 같이 필요한 트래픽을 허용해야 해요.
| 보안 그룹 (Security group) | 규칙 유형 (Rule type) | 프로토콜 (Protocol) | 포트 (Port) | 소스/대상 (Source/destination) |
|---|---|---|---|---|
| EC2 인스턴스 | 아웃바운드 (Outbound) | TCP | 2049 | 마운트 대상 보안 그룹 |
| 마운트 대상 | 인바운드 (Inbound) | TCP | 2049 | EC2 인스턴스 보안 그룹 |