주메뉴 바로가기 본문 바로가기

알림

콘솔 이동 시 로그인이 필요합니다.

로그인하시겠습니까?

아니요

닫기

주문 불가 알림

주문권한이 없습니다.

콘솔에 접근할 수 없는 계정입니다.

확인

닫기

알림

신용카드 등록이 필요합니다.

신용카드 등록 페이지로 이동하시겠습니까?

아니요

닫기
C&C Tech
img

IAM Role을 이용한 계정간 S3 Bucket 엑세스

img Dongwoo Lee(이동우)
| 2024.09.25
  • Bucket Policy
  • 교차계정
  • EC2
  • S3
  • IAM Role
  • Bucket

IAM Role을 이용한 계정간 S3 Bucket 엑세스

이번 블로그에서는 IAM Role을 이용하여 타 계정 S3 Bucket 을 접근하는 간단한 방법에서 알아보겠습니다.

대형 프로젝트의 경우 일반적으로 DEV, STG, PRD 등 총 3개 환경을 각각 다른 계정으로 분리하여 Cloud 시스템을 구축합니다.  시스템 구축 중 STG 계정에 있는 특정 S3 버킷으로 DEV, PRD 계정에 있는 EC2가  파일을 업로드, 다운로드 를 요청하는 사례가 종종 있습니다.  이런 경우 계정간 IAM Role 설정을 통하여 손쉽게 S3 버킷을 공유할 수 있습니다.

IAM Role을 사용하여 아래 구성도처럼 A계정에 있는 EC2 로 B계정에 있는 S3 Bucket 에 접속하는 방법을 알아보고 접속이 잘되는 지 테스트해보겠습니다.

이번에 진행할 내용을 대략적으로 말씀드리면

1. A 계정에서 B계정의 S3 Bucket (s3-leedw416) 에 접근 가능한  Role 을 생성한 다음 EC2 생성하여 해당 Role을 맵핑합니다.  

2. 공유대상 S3 Bucket의 Bucket Policy에 1번에서 생성한 IAM Role 을 Principal로 지정하고 해당 Role이 공유대상 S3 버킷을 사용할 수 있도록 Policy를 작성합니다.

3. 1번에서 구성한 EC2가 파일을 B 계정의 S3 Bucket에 업로드할 수 있는 테스트를 진행합니다. 

참고로 EC2는 일반적으로 보안적 이유로 Private Subnet 에 구성하시는 걸 권장드립니다. 이번 블로그에서는 손쉬운 테스트를 위해서 Public Subnet에 EC2를 구성하였습니다.


 

이제 부터 테스트를 위하여 S3, EC2, IAM Role 등을 구성 해보겠습니다.


 

1. B 계정에 S3 버킷을 디폴트 설정으로 생성 합니다.

디폴트 설정으로 되어있긴 하지만 보안을 위해서 S3가 모든 퍼블릭 엑세스 차단이 되어있는지 더블 체크합니다.



 

2. A 계정에 생성할 EC2에 맵핑할 Role, Policy를 구성합니다.

먼저 Policy를 생성하기 위해 IAM 서비스에 들어가사 정책 생성을 클릭합니다.
 




 

B계정의 공유대상 S3 Bucket인 s3-leedw416에 대한 Admin 권한을 가진 Policy를 구성합니다. Policy 명은 s3-leedw416-admin-policy 로 명명하였습니다.





 

다음은 해당 policy에 맵핑할 Role을 생성하기 위하여 역할 생성을 클릭합니다. 

우리는 EC2가 사용할 Role을 구성할 것 이기 때문에 신뢰할수 있는 엔티티를 EC2로 선택하고

위에서 생성한 s3-leedw416-admin-policy 를 해당 Role에 권한 추가합니다. EC2 Role 명은 ec2-instance-role로 명명하였습니다. 
 



 



 



 




 

3. A 계정에서 EC2를 생성합니다. 

이제 EC2를 구성하면 됩니다.  EC2를 기동할 대역대를 Public Subnet 으로 선택하고 퍼블릭 IP 를 활성화 합니다. 

그리고 위에서 생성한 IAM Role을 EC2에 맵핑한 다음, Amazon linux 기반 EC2를 생성합니다. 


Public Subnet에서 EC2를 구성하였기 때문에 보안에 좀더 신경을 써야합니다. 

콘솔에서 EC2에 접속하기 위해서 아래 처럼 EC2 인스턴스 연결 탭을 선택하여 아래 그림에 표시된 EC2 인스턴스 연결 서비스 IP  대역대 및 포트를 확인 합니다.

 



 

이제 해당 EC2의 보안그룹에서 위에서 보았던 1. 대역대 및 포트 (18.206.107.24/29, 22 Port) 와 2. 내 기기기의 공인 IP 주소 , 22 포트 총 2개를 Inbound Rule에 등록합니다. 내 기기의 공인 IP 주소는 구글에 내아이피를 검색하면 쉽게 알 수 있습니다.
 


 

Outbound Rule은 B계정의 S3에 Https 통신을 사용하여 접근하기 때문에 443 포트, 0.0.0.0 대역대로 등록합니다. 




3. B 계정 S3의 버킷 정책에 Policy 를 정의합니다.

버킷의 권한 탭에서 버킷 정책 편집을 클릭합니다.
 



위에서 생성한 B계정의 Role 의 Arn 정보를 정의하고 해당 Role이 s3-leedw416에 대한 Admin 권한을 갖는 정책을 아래 처처럼 Json 형식으로 작성합니다. 




 

4. A계정의 EC2에서 B 계정의 S3에 접근 테스트를 합니다. 

A 계정에 로그인 한 후 위에서 생성한 EC2 를 콘솔에서 연결합니다. 
 


 


 

EC2 로 접속한 뒤  B계정의 S3에 보낼 테스트 파일을 vim test.txt 명령어를 사용하여 생성합니다.

aws s3 cp ${S3에보낼 파일명} ls ${S3 버킷명}

위의 명령어로 text .txt 파일을 B계정의 S3 버킷에 업로드 되는지 테스트를 합니다.

아래 그림을 보면 정상적으로 test.txt가 B계정의 S3 버킷에 업로드가 되었다는 것을 확인 할 수 있습니다. 

 


B계정의 S3 버킷에서도 실제로 text.txt 저장된 것을 콘솔상으로 확인이 가능합니다.
 


 

이상으로  IAM 권한을 사용하여 교차 계정간 S3 접근이 가능한 방법에 대하여 알아보았습니다.

EC2 구성 및 S3 생성에 대한 설명까지 있어 내용이 길어졌지만 1.  A계정의 EC2 에 S3 에 대한 접근 권한을 가진 IAM Role을 맵핑 2. B계정의 S3의 Bucket Policy에 A계정에서 생성한 IAM Role이 S3 버킷에 접근할 수 있는 권한 부여 이 두개만 설정하면 간단하게 교차 계정간 S3 접근이 가능합니다. 

감사합니다. 

img
Dongwoo Lee(이동우) | Cloud Architect Team

안녕하세요 Cloud Architect 팀에서 Cloud 설계, 구축, 기술지원을 하고 있습니다.