Copy & Run

AWS 콘솔에서 EC2에 IAM 역할을 연결해 액세스 키 없이 S3 읽기 권한 주기

IAM 콘솔에서 EC2용 역할 cr-demo-ec2-s3-read-role을 만들고 AmazonS3ReadOnlyAccess를 붙인 뒤, EC2 시작 화면의 고급 세부 정보에서 인스턴스에 연결합니다. 신뢰 정책과 권한 정책의 역할을 읽고, 인스턴스와 역할을 삭제해 정리합니다.

실습 노트 · 2026-10-19 발행 · 6분 · 2026-10 확인

EC2 인스턴스 안의 프로그램이 S3나 다른 AWS 서비스를 호출해야 할 때, 액세스 키를 인스턴스에 저장하지 않고 IAM 역할을 연결하는 방법이 있습니다. 이 글에서는 IAM 콘솔에서 역할을 만들고, EC2 시작 화면에서 그 역할을 연결하고, 결과를 읽은 뒤 모두 삭제합니다.

준비물

항목 내용
AWS 계정 실습용 IAM 사용자. IAM 역할 생성과 삭제, EC2 시작과 종료 권한 필요
리전 아시아 태평양(서울) ap-northeast-2. IAM은 리전과 무관한 글로벌 서비스
인스턴스 t3.micro 한 대
예상 소요 시간 약 20분

이 글은 인스턴스에 접속하지 않습니다. 키 페어는 만들지 않았고, 보안 그룹의 인바운드는 모두 닫았습니다. 화면의 계정 ID와 사용자 이름, ARN은 가렸습니다.

입력할 값

화면 항목 입력값
역할 생성 1단계 신뢰할 수 있는 엔터티 유형 AWS 서비스
역할 생성 1단계 서비스 또는 사용 사례 EC2
역할 생성 2단계 권한 정책 AmazonS3ReadOnlyAccess
역할 생성 3단계 역할 이름 cr-demo-ec2-s3-read-role
EC2 시작 이름 cr-demo-role-ec2
EC2 시작 키 페어 목록을 열어 키 페어 없이 계속 진행을 직접 선택
EC2 시작 네트워크와 서브넷 이 글은 이 계정의 비공개 서브넷을 썼습니다. 퍼블릭 IP 자동 할당은 비활성이었습니다
EC2 시작 방화벽(보안 그룹) 보안 그룹 생성, SSH 트래픽 허용 해제
EC2 시작 고급 세부 정보의 IAM 인스턴스 프로파일 cr-demo-ec2-s3-read-role

1. 신뢰할 수 있는 엔터티 선택

IAM 콘솔 왼쪽 메뉴의 역할에서 역할 생성을 누릅니다. 1단계에서 엔터티 유형은 AWS 서비스가 기본으로 선택돼 있습니다. 아래 서비스 또는 사용 사례 칸을 열고 EC2를 입력해 고릅니다.

신뢰할 수 있는 엔터티 유형이 AWS 서비스이고 서비스 또는 사용 사례가 EC2로 선택돼 있으며 사용 사례 목록에 EC2가 선택된 것을 확인합니다.
신뢰할 수 있는 엔터티 유형이 AWS 서비스이고 서비스 또는 사용 사례가 EC2로 선택돼 있으며 사용 사례 목록에 EC2가 선택된 것을 확인합니다.

EC2를 고르면 사용 사례 목록이 나오고, EC2(EC2 인스턴스가 사용자를 대신해 AWS 서비스를 호출하도록 허용)가 기본으로 선택됩니다. 다음을 누릅니다.

2. 권한 정책 붙이기

2단계 권한 추가에서는 기존 정책 사용이 기본입니다. 검색 칸에 AmazonS3ReadOnlyAccess를 입력하고 Enter를 누르면 한 건이 나옵니다. 체크박스를 선택하고 왼쪽의 +를 누르면 정책 JSON이 펼쳐집니다.

검색 결과의 AmazonS3ReadOnlyAccess가 체크됐고 펼쳐진 JSON에 Effect가 Allow, Action에 s3:Get*, s3:List*, s3:Describe*, s3-object-lambda:Get*, s3-object-lambda:List*가 보이는 것을 확인합니다.
검색 결과의 AmazonS3ReadOnlyAccess가 체크됐고 펼쳐진 JSON에 Effect가 Allow, Action에 s3:Get*, s3:List*, s3:Describe*, s3-object-lambda:Get*, s3-object-lambda:List*가 보이는 것을 확인합니다.

이 관리형 정책의 설명은 콘솔에서 모든 버킷을 읽기 전용으로 접근하도록 허용한다는 내용입니다. 허용 동작은 s3:Get*, s3:List*, s3:Describe*와 s3-object-lambda의 Get*, List*입니다. 쓰기 동작(s3:Put*, s3:Delete*)은 포함돼 있지 않습니다. 화면에는 JSON의 앞부분만 보이고, 대상(Resource)이 모든 리소스(*)라는 점과 허용 동작 목록은 AWS 문서의 정책 설명(AmazonS3ReadOnlyAccess 관리형 정책 참조 페이지)을 근거로 적었습니다. 설명 문구는 콘솔이라고 되어 있지만 권한은 API 호출에도 적용됩니다. 대상이 계정의 모든 버킷이므로, 운영 환경에서는 특정 버킷으로 좁힌 정책을 따로 만드는 편이 안전합니다. 다음을 누릅니다.

3. 이름 지정과 신뢰 정책 읽기

3단계에서 역할 이름에 cr-demo-ec2-s3-read-role을 입력합니다. 설명 칸에는 Allows EC2 instances to call AWS services on your behalf.가 미리 들어 있었고 그대로 두었습니다.

역할 이름 칸에 cr-demo-ec2-s3-read-role이 입력돼 있고 설명 칸에 기본 문구가 있으며 아래 신뢰 정책 JSON의 Effect가 Allow, Action이 sts:AssumeRole인 것을 확인합니다.
역할 이름 칸에 cr-demo-ec2-s3-read-role이 입력돼 있고 설명 칸에 기본 문구가 있으며 아래 신뢰 정책 JSON의 Effect가 Allow, Action이 sts:AssumeRole인 것을 확인합니다.

아래로 내려가면 신뢰 정책이 있습니다. 이 정책은 누가 역할을 맡을 수 있는지를 정합니다.

필드 값 의미
Effect Allow 허용
Action sts:AssumeRole 역할을 맡는 동작
Principal.Service ec2.amazonaws.com EC2 서비스가 이 역할을 맡을 수 있음

신뢰 정책은 누가 역할을 맡을지, 권한 정책은 맡은 뒤 무엇을 할 수 있는지를 정합니다. 신뢰 정책만 있으면 역할을 맡을 수는 있어도 할 수 있는 일이 없습니다. 화면 맨 아래에서 역할 생성을 누릅니다.

역할 이름 아래 요약에 생성 날짜, ARN, 인스턴스 프로파일 ARN이 표시되며 권한 정책에 AmazonS3ReadOnlyAccess가 하나 연결돼 있는 것을 확인합니다.
역할 이름 아래 요약에 생성 날짜, ARN, 인스턴스 프로파일 ARN이 표시되며 권한 정책에 AmazonS3ReadOnlyAccess가 하나 연결돼 있는 것을 확인합니다.

생성 직후 역할 요약에는 ARN과 함께 인스턴스 프로파일 ARN이 있습니다. 콘솔에서 EC2용 역할을 만들면 같은 이름의 인스턴스 프로파일이 함께 만들어졌습니다. 인스턴스에는 역할이 아니라 이 인스턴스 프로파일이 연결됩니다. 권한 정책 열에는 AmazonS3ReadOnlyAccess 한 줄이 있습니다.

4. 인스턴스에 역할 연결

EC2 콘솔의 인스턴스 시작을 엽니다. 이름에 cr-demo-role-ec2를 입력하고, AMI와 인스턴스 유형은 기본값(Amazon Linux, t3.micro)으로 둡니다. 키 페어는 목록에서 키 페어 없이 계속 진행을 직접 고릅니다. 보안 그룹은 새로 만들고 SSH 허용 체크를 해제했습니다. 이 단계의 자세한 입력은 EC2 글과 같습니다.

화면 아래의 고급 세부 정보를 펼치면 IAM 인스턴스 프로파일 칸이 있습니다. 목록을 열면 방금 만든 cr-demo-ec2-s3-read-role 하나가 나옵니다.

고급 세부 정보의 IAM 인스턴스 프로파일 칸에 cr-demo-ec2-s3-read-role이 선택돼 있고 오른쪽에 새 IAM 프로파일 생성 링크가 있는 것을 확인합니다.
고급 세부 정보의 IAM 인스턴스 프로파일 칸에 cr-demo-ec2-s3-read-role이 선택돼 있고 오른쪽에 새 IAM 프로파일 생성 링크가 있는 것을 확인합니다.

선택하고 인스턴스 시작을 누릅니다.

5. 연결 결과 읽기

인스턴스 요약 화면에서 IAM 역할 항목을 찾습니다.

인스턴스 요약에 IAM 역할이 cr-demo-ec2-s3-read-role로 표시되고 IMDSv2가 Required, 인스턴스 상태가 실행 중인 것을 확인합니다.
인스턴스 요약에 IAM 역할이 cr-demo-ec2-s3-read-role로 표시되고 IMDSv2가 Required, 인스턴스 상태가 실행 중인 것을 확인합니다.

IAM 역할에 만든 역할 이름이 표시됐고 IMDSv2는 Required였습니다. IMDSv2 값은 AMI 기본값에 따라 다를 수 있습니다. 보안 탭에서도 같은 역할을 볼 수 있습니다.

보안 탭의 보안 세부 정보에 IAM 역할 cr-demo-ec2-s3-read-role과 보안 그룹 launch-wizard-1이 있고 인바운드 규칙은 표시할 규칙이 없으며 아웃바운드는 모든 트래픽인 것을 확인합니다.
보안 탭의 보안 세부 정보에 IAM 역할 cr-demo-ec2-s3-read-role과 보안 그룹 launch-wizard-1이 있고 인바운드 규칙은 표시할 규칙이 없으며 아웃바운드는 모든 트래픽인 것을 확인합니다.

이 글은 인스턴스에 접속하지 않아 역할로 실제 S3를 읽는 것까지는 확인하지 않았습니다. AWS 문서 기준으로 인스턴스 안의 프로그램은 인스턴스 메타데이터 서비스에서 이 역할의 임시 자격 증명을 받아 쓰며, 액세스 키를 파일에 저장하지 않아도 됩니다.

6. 정리: 인스턴스, 역할, 보안 그룹 삭제

이 글에서는 인스턴스 종료, 역할 삭제, 보안 그룹 삭제 순서로 진행했습니다. 보안 그룹은 인스턴스를 종료한 뒤에 삭제했고, 역할 삭제에는 순서 제약을 겪지 않았습니다.

인스턴스 종료

인스턴스 상태 메뉴에서 인스턴스 종료(삭제)를 엽니다.

종료 대화상자에 대상이 cr-demo-role-ec2 하나이고 종료 방지가 비활성이며 루트 EBS 볼륨이 삭제된다는 경고가 있는 것을 확인합니다.
종료 대화상자에 대상이 cr-demo-role-ec2 하나이고 종료 방지가 비활성이며 루트 EBS 볼륨이 삭제된다는 경고가 있는 것을 확인합니다.

대상이 이 글에서 만든 인스턴스 하나인지 확인하고 종료(삭제)를 누릅니다. 약 1분 뒤 인스턴스 목록에서 상태가 종료됨으로 바뀐 것을 확인했습니다.

역할 삭제

IAM 콘솔에서 역할 이름을 열고 오른쪽 위의 삭제를 누릅니다.

역할 삭제 대화상자에 대상이 cr-demo-ec2-s3-read-role 하나이고 인라인 정책과 연결된 인스턴스 프로파일도 모두 삭제된다는 안내와 역할 이름을 입력하는 확인 칸이 있는 것을 확인합니다.
역할 삭제 대화상자에 대상이 cr-demo-ec2-s3-read-role 하나이고 인라인 정책과 연결된 인스턴스 프로파일도 모두 삭제된다는 안내와 역할 이름을 입력하는 확인 칸이 있는 것을 확인합니다.

대화상자는 역할을 삭제하면 인라인 정책과 연결된 인스턴스 프로파일도 삭제된다고 안내합니다. 확인 칸에 역할 이름을 입력해야 삭제 단추가 켜집니다.

역할 삭제 완료 배너가 있고 역할 목록의 역할 수가 40으로 표시된 것을 확인합니다.
역할 삭제 완료 배너가 있고 역할 목록의 역할 수가 40으로 표시된 것을 확인합니다.

보안 그룹 삭제

EC2 시작 화면이 만든 launch-wizard-1 보안 그룹은 인스턴스를 종료해도 남습니다. 보안 그룹 화면에서 삭제 대화상자의 대상이 이 그룹 하나인지 확인하고 삭제합니다. 이 글에서는 삭제 뒤 목록에 default만 남았습니다.

자주 막히는 곳

증상 확인할 것
IAM 인스턴스 프로파일 목록에 역할이 없음 목록 옆 새로고침을 누릅니다. 이 글에서는 역할을 만든 뒤 시작 화면을 열었을 때 목록에 있었습니다
역할 삭제 대화상자의 삭제가 비활성임 확인 칸에 역할 이름을 정확히 입력해야 켜집니다
사용 사례에 EC2가 여러 개 보임 EC2 한 줄과 EC2 Role for AWS Systems Manager 등이 따로 있습니다. 이 글은 첫 번째 EC2를 골랐습니다
보안 그룹이 남아 있음 시작 화면이 만든 launch-wizard-1은 인스턴스 종료로 지워지지 않았습니다. 따로 삭제합니다

이어서 해 볼 것

  • 정책을 계정의 모든 버킷이 아니라 특정 버킷 하나만 읽도록 직접 JSON으로 만들어 보기
  • 실행 중인 인스턴스에서 역할을 바꾸거나 떼어 보기(요금과 권한 변경이 있으니 실습 계정에서만)
  • AWS IAM 정책 시뮬레이터 글로 이 역할의 권한이 허용하는 동작 확인하기

확인 범위

  • 확인한 것: 서울 리전 콘솔(한국어 화면)에서 위 설정으로 EC2용 역할을 만들고, 인스턴스에 연결하고, 요약과 보안 탭에서 역할을 읽고, 인스턴스, 역할, 보안 그룹을 삭제하는 과정을 실제로 수행했습니다. 역할을 만든 뒤 목록은 41개였고(화면 캡처는 첨부하지 않았습니다) 삭제 뒤 40개로 돌아왔으며 보안 그룹 목록에는 default만 남았습니다.
  • 확인하지 못한 것: 인스턴스에 접속하지 않아 역할의 임시 자격 증명으로 S3를 읽는 동작은 확인하지 않았습니다. 인스턴스 프로파일이 삭제된 것은 대화상자 안내와 역할 삭제 뒤 동작으로만 확인했고, IAM의 인스턴스 프로파일 목록은 따로 열지 않았습니다.
  • 화면 구성과 기본값은 콘솔 업데이트와 계정 설정에 따라 달라질 수 있습니다.

이 글의 다음 단계

클라우드 보안 실무 과정의 일부입니다

이 실습은 교육에서 참가자마다 독립된 환경으로 진행합니다. 원하는 일정을 고르면 문의 양식에 미리 채워집니다.

과정 보기

교육 진행 순서와 자주 묻는 질문 보기

같은 카테고리의 글