튜토리얼: 계정 간에 S3 파일 시스템 마운트하기

튜토리얼: 계정 간에 S3 파일 시스템 마운트하기 (Tutorial: Mount an S3 file system across accounts)

파일 시스템 소유자 계정과 다른 AWS 계정의 컴퓨팅 리소스에서 S3 파일 시스템에 접근할 수 있어요. 이를 교차 계정 접근(cross-account access)이라고 해요. 교차 계정 접근을 통해 서로 다른 계정의 팀이 데이터를 복제하지 않고 같은 파일 시스템을 공유할 수 있어요.

교차 계정 접근에는 다음이 필요해요.

  • 포트 2049에 대한 네트워크 접근
  • 파일 시스템 마운트 대상을 해석하는 DNS
  • 원격 계정의 접근을 허용하는 S3 Files 권한

이 튜토리얼에서는 AWS Management Console을 사용해 Amazon EC2 인스턴스에서 교차 계정 접근을 구성해요. 계정 A가 S3 파일 시스템을 소유하고, 계정 B가 그 파일 시스템에 연결하는 EC2 인스턴스를 소유해요.

사전 요구사항 (Prerequisites)

시작하기 전에 다음을 갖추었는지 확인하세요.

이 튜토리얼에서 사용하는 예시 값 (Example values used in this tutorial)

이 튜토리얼은 다음 예시 값을 사용해요. 여러분의 값으로 바꿔주세요.

항목 (Item) 값 (Value)
계정 A(S3 Files 계정) 111111111111
계정 B(EC2 인스턴스 계정) 222222222222
S3 파일 시스템 ID fs-0123456abcdef0189
리전 (Region) us-east-1
S3 Files DNS 이름 {az_id}.fs-0123456abcdef0189.s3files.us-east-1.on.aws
EC2 인스턴스 역할(계정 B) ec2-instance-role

출처: 문서

본문

1단계: 파일 시스템 네트워크 세부 정보 기록 (Step 1: Record file system network details)

계정 A에서 파일 시스템의 다음 네트워크 세부 정보를 기록해요.

  1. Amazon S3 콘솔을 엽니다: https://console.aws.amazon.com/s3/
  2. General purpose buckets을 선택한 다음 S3 파일 시스템에 연결된 버킷을 선택해요.
  3. File systems 탭을 선택하고 파일 시스템을 선택한 뒤 Mount targets 탭을 선택해요.
  4. 연결하려는 각 가용 영역에 마운트 대상이 있는지 확인해요.
  5. 후속 단계에서 사용할 다음 값을 기록해요.
    • 파일 시스템의 VPC ID
    • AZ ID(예: use1-az1, use1-az2)
    • 각 마운트 대상의 IPv4 주소(각 AZ ID에 매핑)
    • 마운트 대상의 보안 그룹 ID

2단계: VPC peering 연결 만들기 (Step 2: Create a VPC peering connection)

중요: CIDR 범위가 겹치면 안 돼요. VPC peering은 CIDR 범위가 겹치지 않아야 해요. 진행하기 전에 이를 확인하세요.

두 계정 모두에서 VPC에 다음 DNS 설정이 활성화되어 있는지 확인해요. VPC 콘솔에서 VPC를 선택한 뒤 Edit VPC settings을 선택해요.

  • DNS resolution(enableDnsSupport): Enabled
  • DNS hostnames(enableDnsHostnames): Enabled

계정 B에서 VPC 콘솔을 열고 Peering Connections을 선택한 뒤 Create peering connection을 선택하고 다음 값을 입력해요.

  • VPC ID(Request, 요청자): EC2 인스턴스의 VPC(계정 B)
  • Account: Another Account를 선택한 다음 111111111111 입력
  • Region: us-east-1
  • VPC ID(Accepter, 수락자): S3 파일 시스템의 VPC(계정 A)

계정 A에서 VPC 콘솔을 열고 Peering Connections을 선택한 뒤 보류 중인 요청을 찾아 Actions, Accept request를 선택해요. 상태가 Active로 바뀌는지 확인해요.

3단계: 라우트 추가 (Step 3: Add routes)

계정 B(EC2 인스턴스 계정)에서:

  1. VPC 콘솔을 열고 Route Tables을 선택한 뒤 EC2 인스턴스 서브넷의 라우트 테이블을 선택해요.
  2. Edit routes을 선택한 다음 Add route을 선택해요.
    • Destination: 계정 A의 S3 Files VPC CIDR
    • Target: Peering Connection을 선택한 다음 2단계에서 만든 peering 연결 선택

계정 A(S3 Files 계정)에서:

  1. VPC 콘솔을 열고 Route Tables을 선택한 뒤 S3 Files VPC의 라우트 테이블을 선택해요.
  2. Edit routes을 선택한 다음 Add route을 선택해요.
    • Destination: 계정 B의 EC2 인스턴스 VPC CIDR
    • Target: Peering Connection을 선택한 다음 2단계에서 만든 peering 연결 선택

4단계: 보안 그룹 구성 (Step 4: Configure security groups)

계정 A의 마운트 대상 보안 그룹은 계정 B의 EC2 인스턴스에서 인바운드 NFS 트래픽을 허용해야 해요. 계정 B의 EC2 인스턴스 보안 그룹은 마운트 대상에 아웃바운드 NFS 트래픽을 허용해야 해요.

VPC 콘솔에서 Security Groups을 선택한 다음 1단계에서 기록한 마운트 대상 보안 그룹을 선택해요.

Edit inbound rules을 선택하고 다음 규칙을 추가해요.

  • Type: NFS
  • Port: 2049
  • Source: Custom을 선택한 다음 계정 B의 EC2 보안 그룹 ID 입력

계정 B의 EC2 인스턴스 보안 그룹이 포트 2049에 대한 아웃바운드 TCP를 허용하는지 확인해요.

보안 그룹 (Security Group) 규칙 유형 (Rule Type) 프로토콜 (Protocol) 포트 (Port) 소스/대상 (Source/Destination)
EC2 인스턴스(계정 B) 아웃바운드 (Outbound) TCP 2049 마운트 대상 보안 그룹(계정 A)
마운트 대상(계정 A) 인바운드 (Inbound) TCP 2049 EC2 인스턴스 보안 그룹(계정 B)

5단계: 파일 시스템 정책 추가 (Step 5: Add a file system policy)

계정 A에서 계정 B 역할에 마운트 권한을 부여하는 파일 시스템 정책을 추가해요. S3 Files는 모든 마운트 요청에서 이 정책을 평가해요. 이 정책이 없으면 네트워크나 DNS 구성과 관계없이 마운트가 실패해요.

  1. Amazon S3 콘솔을 열고 버킷을 선택한 다음 File systems 탭을 선택해요.
  2. 파일 시스템을 선택한 다음 Edit file system policy을 선택해요.
  3. 계정 B 역할에 마운트 권한을 부여하는 정책을 추가해요. 다음 예시 정책은 계정 B의 EC2 인스턴스 역할에 s3files:ClientMount와 s3files:ClientWrite를 부여해요.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCrossAccountMount",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::222222222222:role/ec2-instance-role" },
            "Action": [
                "s3files:ClientMount",
                "s3files:ClientWrite"
            ],
            "Resource": "arn:aws:s3files:us-east-1:111111111111:file-system/fs-0123456abcdef0189"
        }
    ]
}

6단계: Route 53 호스팅 영역 만들기 (Step 6: Create Route 53 hosted zones)

계정 B에서 EC2 인스턴스가 파일 시스템 DNS 이름을 해석할 수 있도록 프라이빗 호스팅 영역을 만들어요. S3 Files는 마운트 요청을 올바른 가용 영역으로 라우팅하기 위해 다음 형식의 DNS 이름을 사용해요.

{az_id}.{fs_id}.s3files.{region}.on.aws

마운트 대상이 있는 각 AZ ID에 대해 프라이빗 호스팅 영역 하나씩을 만들어요. 각 AZ ID에 대해:

  1. Route 53 콘솔을 열고 Hosted Zones을 선택한 다음 Create hosted zone을 선택해요. 다음 값을 입력해요.
    • Domain name: {az_id}.fs-0123456abcdef0189.s3files.us-east-1.on.aws
    • Type: Private hosted zone
    • Region: us-east-1
    • VPC ID: 계정 B의 EC2 인스턴스 VPC
  2. Create hosted zone을 선택해요.
  3. Create record을 선택하고 다음 값을 입력해요.
    • Record name: 비워 둠
    • Record type: A
    • Value: 해당 AZ ID의 마운트 대상 IPv4 주소(1단계에서 기록)
  4. Create records을 선택해요.
  5. 연결하려는 모든 AZ ID에 대해 반복해요.

예시:

호스팅 영역 도메인 이름 (Hosted Zone Domain Name) A 레코드 값 (A Record Value)
use1-az1.fs-0123456abcdef0189.s3files.us-east-1.on.aws use1-az1의 마운트 대상 IP
use1-az2.fs-0123456abcdef0189.s3files.us-east-1.on.aws use1-az2의 마운트 대상 IP
use1-az4.fs-0123456abcdef0189.s3files.us-east-1.on.aws use1-az4의 마운트 대상 IP

7단계: IAM 권한 구성 (Step 7: Configure IAM permissions)

계정 B의 EC2 인스턴스에 IAM 역할을 연결해요. 역할에는 파일 시스템을 마운트하고 접근하기 위한 다음 권한이 포함되어야 해요.

  • AmazonS3FilesClientFullAccess 관리형 정책(또는 동등한 정책) — 이 정책은 EC2 인스턴스가 S3 Files 파일 시스템에 연결하고 상호 작용할 권한을 부여해요.
  • 교차 계정 버킷에 대한 S3 객체 접근을 부여하는 인라인 정책 — 이 정책은 EC2 인스턴스가 계정 A의 S3 버킷에서 객체를 직접 읽을 권한을 부여해요.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3ObjectReadAccess",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::BUCKET_NAME_ACCOUNT_A/*"
        },
        {
            "Sid": "S3BucketListAccess",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::BUCKET_NAME_ACCOUNT_A"
        }
    ]
}

BUCKET_NAME_ACCOUNT_A를 계정 A의 S3 버킷 이름으로 바꿔주세요.

참고: 컴퓨팅 리소스에 필요한 기본 정책의 전체 목록은 파일 시스템을 AWS 컴퓨팅 리소스에 연결하기 위한 IAM 역할을 참고하세요.

8단계: 파일 시스템 마운트 (Step 8: Mount the file system)

계정 B의 EC2 인스턴스에 연결한 뒤 다음 명령을 실행해요.

마운트 지점을 만들어요.

sudo mkdir /mnt/s3files

파일 시스템을 마운트해요.

sudo mount -t s3files fs-0123456abcdef0189 /mnt/s3files

마운트를 확인해요.

df -h /mnt/s3files
ls /mnt/s3files

문제 해결 (Troubleshooting)

계정 간에 S3 파일 시스템을 마운트할 때 흔한 문제를 해결하려면 다음 정보를 사용하세요.

  • DNS 해석 오류로 마운트 실패 — 두 VPC 모두에서 enableDnsSupport와 enableDnsHostnames가 활성화되어 있는지 확인해요. Route 53 프라이빗 호스팅 영역이 계정 B의 올바른 VPC와 연결되어 있고, A 레코드가 올바른 마운트 대상 IP 주소를 가리키는지 확인해요.
  • 마운트가 멈추거나 시간 초과 — VPC peering 연결 상태가 Active인지 확인해요. 두 계정의 라우트 테이블에 peering 연결을 가리키는 피어 VPC CIDR 항목이 있는지 확인해요. 마운트 대상 보안 그룹이 EC2 인스턴스 보안 그룹의 포트 2049 인바운드 TCP를 허용하는지 확인해요.
  • 파일 작업 시 권한 거부 — EC2 인스턴스 IAM 역할에 AmazonS3FilesClientFullAccess 관리형 정책과 인라인 S3 객체 접근 정책이 모두 연결되어 있는지 확인해요. 계정 A의 파일 시스템 정책이 계정 B 역할에 s3files:ClientMount와 s3files:ClientWrite를 부여하는지 확인해요.

더 알아보기 (Learn more)