본문으로 건너뛰기

[S3] AWS 크로스 계정 S3 데이터 접근 가이드

Prerequisite

본 가이드를 진행하기 전에 다음 항목이 준비되어 있어야 합니다:

  • 두 개의 AWS 계정 접근 권한: 소스 계정(데이터 소유)과 대상 계정(데이터 접근)의 관리자 권한이 필요합니다
  • 계정 ID 확인: 각 계정의 AWS 계정 ID를 알고 있어야 합니다 (예: 123456789012)
  • IAM 권한: 두 계정 모두에서 IAM Role, IAM Policy, S3 Bucket Policy를 수정할 수 있는 권한이 필요합니다
  • S3 버킷 정보: 소스 계정의 S3 버킷 이름과 대상 데이터의 경로를 알고 있어야 합니다

Process

1단계: 계정 정보 확인 및 정리

크로스 계정 작업을 시작하기 전에 필요한 정보를 정리합니다.

소스 계정 정보 확인

  1. 소스 계정(데이터 소유)의 AWS 콘솔에 접속합니다
  2. 우측 상단의 계정 이름을 클릭하고 계정 또는 My Account 메뉴를 선택합니다
  3. 계정 ID (12자리 숫자)를 확인하고 메모합니다 (예: 123456789123)
  4. S3 콘솔로 이동하여 데이터가 있는 버킷 이름을 확인합니다 (예: company-data-bucket)
  5. 버킷 내 데이터의 경로(Prefix)를 확인합니다 (예: data/images/)

대상 계정 정보 확인

  1. 대상 계정(데이터 접근)의 AWS 콘솔에 접속합니다
  2. 계정 ID를 확인하고 메모합니다 (예: 088646600584)
  3. 필요하면 데이터를 복사할 목적지 S3 버킷 이름을 확인합니다

정보 정리 예시

소스 계정 (Source Account):

  • 계정 ID: 123123123123
  • 계정 이름: source-account
  • 버킷 이름: source-account-bucket
  • 데이터 경로: data/training-data/

대상 계정 (Destination Account):

  • 계정 ID: 321321321321
  • 계정 이름: destination-account
  • 버킷 이름: destination-account-bucket

2단계: 소스 계정 설정 (Bucket Policy 수정)

소스 계정에서 S3 버킷 정책을 수정하여 대상 계정에 접근 권한을 부여합니다.

S3 Bucket Policy 추가

  1. 소스 계정으로 AWS 콘솔에 접속합니다
  2. S3 서비스로 이동하고 대상 버킷(예: company-data-bucket)을 선택합니다
  3. Permissions(권한) 탭을 클릭합니다
  4. Bucket Policy(버킷 정책) 섹션에서 Edit(편집) 버튼을 클릭합니다
  5. 다음 정책 문서를 기존 정책에 추가합니다 (기존 정책이 있으면 Statement 배열에 추가):

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountRead", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[Destination Account ID]:root" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::source-data-bucket", "arn:aws:s3:::source-data-bucket/*" ] } ] }

정책 설명

  • Principal: 대상 계정의 AWS 계정 ARN
    • 321321321321를 실제 대상 계정 ID로 변경합니다
  • Action: 허용하는 작업 (사용 사례별로 다음 항목 중 선택)
    • 읽기 관련 작업
      • s3:GetObject: 객체(파일) 다운로드 및 읽기
      • s3:GetObjectVersion: 객체의 특정 버전 다운로드 (버전 관리 활성화 시)
      • s3:ListBucket: 버킷의 객체 목록 조회
      • s3:GetBucketVersioning: 버킷의 버전 관리 설정 확인
      • s3:GetBucketLocation: 버킷의 리전 정보 확인
    • 메타데이터 관련 작업
      • s3:GetObjectTagging: 객체의 태그 정보 조회
      • s3:GetObjectMetadata: 객체의 메타데이터 확인
      • s3:HeadObject: 객체의 존재 여부 및 기본 정보 확인 (다운로드 없이)
      • s3:HeadBucket: 버킷의 존재 여부 및 접근 권한 확인
    • 쓰기 관련 작업 (필요한 경우만 추가)
      • s3:PutObject: 객체 업로드 또는 생성
      • s3:PutObjectTagging: 객체에 태그 추가
      • s3:DeleteObject: 객체 삭제
      • s3:DeleteObjectVersion: 객체의 특정 버전 삭제
    • 대량 작업 관련
      • s3:ListBucketVersions: 버킷의 모든 버전 목록 조회
      • s3:GetObjectAcl: 객체의 접근 제어 목록 확인
      • s3:ListBucketMultipartUploads: 진행 중인
  • Resource: 권한이 적용되는 S3 리소스
    • 버킷 자체와 버킷 내 모든 객체에 권한을 부여합니다
  1. 정책 입력을 확인하고 Save changes 버튼을 클릭합니다
     

3단계: 대상 계정 IAM 역할 생성 (Cross-Account IAM Role)

대상 계정에서 EC2 인스턴스나 로컬 환경이 소스 계정의 S3에 접근할 수 있도록 IAM Role을 생성합니다.

IAM Role 생성

  1. 대상 계정의 AWS 콘솔에 접속합니다

  2. IAM 서비스로 이동합니다

  3. 왼쪽 메뉴에서 Roles을 클릭합니다

  4. Create role 버튼을 클릭합니다

  5. 신뢰할 수 있는 엔티티 선택:

    • AWS Service를 선택합니다
    • 사용 사례에서 EC2 (EC2 인스턴스에서 사용할 경우) 또는 Lambda (Lambda 함수에서 사용할 경우)를 선택합니다
  6. Next 버튼을 클릭합니다

  7. 이 단계에서는 Role이 S3에 접근하기 위한 권한을 부여합니다.

    Permissions policie 페이지에서 검색창을 사용하여 기존 정책을 찾거나, 새로운 정책을 생성할 수 있습니다

    1. 옵션 A: 기존 AWS 관리 정책 사용 (빠른 방법)
      1. 이미 AWS에서 제공하는 정책을 사용하려면:
    2. 검색창에서 정책명을 입력합니다
      1. 읽기 전용: AmazonS3ReadOnlyAccess
      2. 전체 접근: AmazonS3FullAccess
      3. 체크박스를 클릭하여 정책을 선택합니다
  8. 역할의 이름을 입력하고 역할을 생성합니다.

  9. 방금 생성한 권한을 선택후 권한 추가인라인정책 생성을  클릭합니다.

  10. JSON 탭을 선택하고 다음 정책을 입력합니다:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadFromSourceBucket", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::source-data-bucket", "arn:aws:s3:::source-data-bucket/*" ] } ] }

  1. 다음을 클릭후 정책 이름을 입력합니다 (예: CrossAccountS3ReadPolicy)

  2. Create policy 버튼을 클릭합니다

     

     

4단계 : EC2 IAM 수정

  1. AWS Console에 로그인하고 EC2 서비스로 이동합니다.

  2. 좌측 메뉴에서 인스턴스(Instances)를 클릭합니다.

  3. 인스턴스 목록에서 IAM 역할을 변경할 대상 인스턴스를 찾아 체크하고 작업->보안->IAM 역할 수정을 클릭합니다.

     

  4. 3단계에서 만들었든 IAM Role을 찾아 IAM 역할 업데이트를 클릭합니다.

5단계 : 크로스 리전 S3 연결 확인

  1. 대상 계정에 인스턴스에 SSH로 접속을 위해 아래 명령어로 입력합니다. •

    ssh -i [다운로드한 키 경로/내키이름.pem] ec2-user@서버아이피

예시 : 

ssh -i /Users/bradkim/Downloads/test-brad-kim.pem [ubuntu@54.180.31.115](<mailto:ubuntu@54.180.31.115>)


 

2. 연결 확인을 합니다.

source 계정의 s3 버킷 내용이 보이면 성공입니다.
aws s3 ls s3://source-account-s3

3. CLI 명령어로 데이터 사용 (내 S3처럼 접근)

별도의 비밀번호나 키 입력은 필요 없습니다. Source 계정의 S3를 다룰 때와 똑같은 명령어로, 버킷 이름만 지정해서 사용하면 됩니다.
 


또 다른 질문이 있으십니까? 문의 등록