IAM 역할
IAM 역할
IAM *역할(role)*은 계정에서 만들 수 있는 특정 권한을 가진 IAM 자격 증명입니다. IAM 역할은 IAM 사용자와 비슷합니다. 둘 다 AWS에서 무엇을 할 수 있고 무엇을 할 수 없는지를 결정하는 권한 정책을 가진 AWS 자격 증명이기 때문이에요. 하지만 역할은 한 사람과 고유하게 연결되는 대신, 필요로 하는 누구든 수임할 수 있도록 설계되었어요. 또한 역할에는 비밀번호나 액세스 키 같은 표준 장기 자격 증명이 연결되어 있지 않아요. 대신 역할을 수임하면 역할 세션에 대한 임시 보안 자격 증명이 제공돼요.
출처: 문서
본문
역할을 사용해 일반적으로 AWS 리소스에 접근할 수 없는 사용자, 애플리케이션, 서비스에 접근을 위임할 수 있어요. 예를 들어 계정의 사용자에게 평소에는 없는 리소스 접근을 부여하거나, 한 AWS 계정의 사용자에게 다른 계정의 리소스 접근을 부여하고 싶을 수 있어요. 또는 모바일 앱이 AWS 리소스를 사용하도록 허용하되, 앱 안에 AWS 키를 임베드하고 싶지 않을 수 있어요(임베드하면 업데이트가 어렵고 사용자가 추출할 수도 있음). 때로는 기업 디렉토리처럼 AWS 외부에 이미 정의된 자격 증명을 가진 사용자에게 AWS 접근을 주고 싶을 수도 있어요. 또는 리소스 감사를 수행하도록 계정 접근을 써드파티에 부여하고 싶을 수도 있어요.
이런 시나리오에서 IAM 역할을 사용해 AWS 리소스에 대한 접근을 위임할 수 있어요. 이 섹션에서는 역할과 사용할 수 있는 다양한 방법, 접근 방식 중에서 언제 어떻게 선택할지, 역할을 만들고 관리하고 전환(수임)하고 삭제하는 방법을 소개합니다.
계정 접근 관리자(Account access manager)는 조직의 계정 전반에 걸쳐 IAM Identity Center 사용자와 그룹에 IAM 역할을 중앙에서 할당할 수 있게 해주는 IAM 기능입니다. 계정 접근 관리자는 IAM 역할을 통해 직원에게 전체 기능 세트로 접근 권한을 부여합니다. IAM Identity Center 권한 세트와 함께 사용하거나 단독으로 사용할 수 있어요.
참고 AWS 계정을 처음 만들 때 기본적으로 역할이 생성되지 않아요. 계정에 서비스를 추가하면 해당 서비스가 사용 사례를 지원하기 위해 서비스 연결 역할을 추가할 수 있어요.
서비스 연결 역할(service-linked role)은 AWS 서비스에 연결된 서비스 역할의 한 유형입니다. 서비스는 이 역할을 수임해 사용자를 대신해 작업을 수행할 수 있어요. 서비스 연결 역할은 AWS 계정에 나타나며 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 보고, 편집할 수 없어요.
서비스 연결 역할을 삭제하려면 먼저 관련 리소스를 삭제해야 해요. 이렇게 하면 리소스 접근 권한을 실수로 제거하는 것을 방지해 리소스를 보호합니다.
서비스 연결 역할 사용을 지원하는 서비스는 IAM과 함께 작동하는 AWS 서비스 문서에서 서비스 연결 역할(Service-Linked Role) 열에 Yes가 있는 서비스를 찾아 확인하세요. 링크가 있는 Yes를 선택해 해당 서비스의 서비스 연결 역할 문서를 확인할 수 있어요.
이번 강의에서 다룰 내용은 다음과 같아요.
- IAM 사용자 생성 시기 (역할 대신)
- 역할 용어와 개념
- 추가 리소스
- 혼란스러운 대리인(confused deputy) 문제
- IAM 역할의 일반적인 시나리오
- IAM 역할 생성
- IAM 역할 관리
- 역할 수임 방법
IAM 사용자 생성 시기 (역할 대신)
자격 증명 페더레이션이 지원하지 않는 사용 사례에만 IAM 사용자를 사용할 것을 권장해요. 그런 사용 사례 중 일부는 다음과 같습니다.
- IAM 역할을 사용할 수 없는 워크로드 – AWS에 접근해야 하는 위치에서 워크로드를 실행할 수 있어요. WordPress 플러그인처럼 어떤 상황에서는 IAM 역할로 임시 자격 증명을 제공할 수 없어요. 이런 상황에서는 IAM 사용자 장기 액세스 키를 그 워크로드에 사용해 AWS에 인증하세요.
- 써드파티 AWS 클라이언트 – IAM Identity Center로 접근을 지원하지 않는 도구(IAM Identity Center에 호스팅되지 않은 써드파티 AWS 클라이언트나 공급업체 등)를 사용한다면 IAM 사용자 장기 액세스 키를 사용하세요.
- AWS CodeCommit 접근 – 코드를 저장하기 위해 CodeCommit을 사용한다면, SSH 키나 CodeCommit용 서비스별 자격 증명을 가진 IAM 사용자로 저장소에 인증할 수 있어요. 정상적인 인증을 위해 IAM Identity Center 사용자를 사용하는 것과 더불어 이렇게 할 것을 권장해요. IAM Identity Center의 사용자는 AWS 계정이나 클라우드 애플리케이션에 접근해야 하는 직원이에요. IAM 사용자를 구성하지 않고 CodeCommit 저장소에 접근 권한을 부여하려면 git-remote-codecommit 유틸리티를 구성할 수 있어요. IAM과 CodeCommit에 대한 자세한 내용은 CodeCommit용 IAM 자격 증명: Git 자격 증명, SSH 키, AWS 액세스 키 문서를 참고하세요. git-remote-codecommit 유틸리티 구성에 대한 자세한 내용은 AWS CodeCommit 사용자 가이드의 회전 자격 증명으로 AWS CodeCommit 저장소에 연결을 참고하세요.
- Amazon Keyspaces (for Apache Cassandra) 접근 – Cassandra 호환성 테스트 같은 상황에서 IAM Identity Center 사용자를 사용할 수 없을 때, 서비스별 자격 증명을 가진 IAM 사용자로 Amazon Keyspaces에 인증할 수 있어요. IAM Identity Center의 사용자는 AWS 계정이나 클라우드 애플리케이션에 접근해야 하는 직원이에요. 임시 자격 증명으로 Amazon Keyspaces에 연결할 수도 있어요. 자세한 내용은 Amazon Keyspaces (for Apache Cassandra) 개발자 가이드의 IAM 역할과 SigV4 플러그인을 사용한 임시 자격 증명으로 Amazon Keyspaces에 연결을 참고하세요.
- 긴급 접근(Emergency access) – ID 공급자에 접근할 수 없고 AWS 계정에서 작업을 수행해야 하는 상황. 긴급 접근 IAM 사용자를 설정하는 것은 복원력 계획의 일부가 될 수 있어요. 긴급 사용자 자격 증명은 다중 인증(MFA)으로 엄격히 통제되고 보호할 것을 권장해요.
역할 용어와 개념
역할을 시작하는 데 도움이 되는 몇 가지 기본 용어입니다.
역할(Role) 계정에서 만들 수 있는 특정 권한을 가진 IAM 자격 증명. IAM 역할은 IAM 사용자와 유사한 점이 있습니다. 역할과 사용자는 둘 다 AWS에서 무엇을 할 수 있고 없는지를 결정하는 권한 정책을 가진 AWS 자격 증명입니다. 하지만 역할은 한 사람과 고유하게 연결되는 대신, 필요로 하는 누구든 수임할 수 있도록 설계되었습니다. 또한 역할에는 비밀번호나 액세스 키 같은 표준 장기 자격 증명이 연결되어 있지 않습니다. 대신 역할을 수임하면 역할 세션에 대한 임시 보안 자격 증명이 제공됩니다.
역할은 다음이 수임할 수 있어요.
- 같은 AWS 계정이나 다른 AWS 계정의 IAM 사용자
- 같은 계정의 IAM 역할
- AWS 서비스 및 기능과 함께 사용하기 위한 서비스 주체(service principal). 예: Amazon EC2나 AWS Lambda 같은 컴퓨팅 서비스에서 코드를 실행할 수 있는 서비스, Amazon S3 객체 복제처럼 리소스에서 사용자를 대신해 작업을 수행하는 기능, IAM Roles Anywhere나 Amazon ECS Anywhere처럼 AWS 외부에서 실행되는 애플리케이션에 임시 보안 자격 증명을 전달하는 서비스
- SAML 2.0 또는 OpenID Connect와 호환되는 외부 ID 공급자(IdP) 서비스가 인증한 외부 사용자
AWS 서비스 역할(AWS service role) 서비스 역할은 서비스가 사용자를 대신해 작업을 수행하기 위해 수임하는 IAM 역할입니다. IAM 관리자는 IAM 내에서 서비스 역할을 만들고, 수정하고, 삭제할 수 있어요. 자세한 내용은 IAM 사용자 가이드의 AWS 서비스에 권한을 위임할 역할 생성을 참고하세요.
AWS 서비스 연결 역할(AWS service-linked role) 서비스 연결 역할은 AWS 서비스에 연결된 서비스 역할의 한 유형입니다. 서비스는 이 역할을 수임해 사용자를 대신해 작업을 수행할 수 있어요. 서비스 연결 역할은 AWS 계정에 나타나며 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 보고, 편집할 수 없어요.
참고 서비스가 서비스 연결 역할을 지원하기 시작할 때 이미 그 서비스를 사용 중이라면 계정에 새 역할이 생겼다는 이메일을 받을 수 있어요. 이 경우 서비스가 계정에 서비스 연결 역할을 자동으로 생성한 것입니다. 이 역할을 지원하기 위해 어떤 조치도 취할 필요 없고, 수동으로 삭제해서도 안 됩니다. 자세한 내용은 AWS 계정에 새 역할이 나타났습니다 문서를 참고하세요.
서비스 연결 역할 사용을 지원하는 서비스는 IAM과 함께 작동하는 AWS 서비스 문서에서 서비스 연결 역할(Service-Linked Role) 열에 Yes가 있는 서비스를 찾아 확인하세요. 링크가 있는 Yes를 선택해 해당 서비스의 서비스 연결 역할 문서를 확인할 수 있어요. 자세한 내용은 서비스 연결 역할 생성 문서를 참고하세요.
역할 체이닝(Role chaining)
역할 체이닝은 역할을 사용해 두 번째 역할을 수임하는 것입니다. AWS Management Console에서 역할 전환, AWS CLI, API로 역할 체이닝을 수행할 수 있어요. 예를 들어 RoleA가 RoleB를 수임할 권한이 있다고 가정해 보겠습니다. 사용자1(User1)이 AssumeRole API 작업에서 장기 사용자 자격 증명을 사용해 RoleA를 수임하도록 활성화할 수 있어요. 그러면 RoleA 단기 자격 증명이 반환됩니다. 역할 체이닝을 사용하면 RoleA의 단기 자격 증명으로 사용자1이 RoleB를 수임할 수 있게 할 수 있어요.
역할을 수임할 때 세션 태그를 전달하고 태그를 전이(transitive)로 설정할 수 있어요. 전이 세션 태그는 역할 체인의 모든 후속 세션에 전달됩니다. 세션 태그에 대해 더 알아보려면 AWS STS에서 세션 태그 전달 문서를 참고하세요.
역할 체이닝은 AWS Management Console, AWS CLI, AWS API 역할 세션을 최대 1시간으로 제한합니다. 이는 개별 역할에 구성된 최대 세션 기간과 관계없이 적용됩니다. AssumeRole API 작업으로 역할을 수임할 때 DurationSeconds 파라미터로 역할 세션 기간을 지정할 수 있어요. 역할의 최대 세션 기간 설정에 따라 최대 43200초(12시간)까지 파라미터 값을 지정할 수 있어요. 하지만 역할 체이닝으로 역할을 수임하면서 1시간보다 큰 DurationSeconds 파라미터 값을 제공하면 작업이 실패합니다.
AWS Management Console에서 역할로 전환하는 방법은 사용자에서 IAM 역할로 전환 (콘솔) 문서를 참고하세요.
위임(Delegation) 당신이 통제하는 리소스에 접근할 수 있도록 누군가에게 권한을 부여하는 것. 위임은 두 계정 사이에 신뢰를 설정하는 것과 관련됩니다. 첫 번째는 리소스를 소유한 계정(신뢰하는 계정, trusting account)입니다. 두 번째는 리소스에 접근해야 하는 사용자가 있는 계정(신뢰받는 계정, trusted account)입니다. 신뢰받는 계정과 신뢰하는 계정은 다음 중 아무거나 될 수 있어요.
- 같은 계정.
- 둘 다 조직의 통제 하에 있는 별도의 계정.
- 서로 다른 조직이 소유한 두 계정.
리소스 접근 권한을 위임하려면 두 개의 정책이 연결된 IAM 역할을 신뢰하는 계정에 만듭니다. *권한 정책(permissions policy)*은 역할의 사용자에게 리소스에서 의도한 작업을 수행하는 데 필요한 권한을 부여합니다. *신뢰 정책(trust policy)*은 어떤 신뢰받는 계정 멤버가 역할을 수임할 수 있는지 지정합니다.
신뢰 정책을 만들 때 주체(principal) 요소의 ARN 일부로 와일드카드(*)를 지정할 수 없어요. 신뢰 정책은 신뢰하는 계정의 역할에 연결되며, 권한의 절반입니다. 나머지 절반은 신뢰받는 계정의 사용자에게 연결되어 사용자가 그 역할로 전환하거나 수임할 수 있게 해주는 권한 정책입니다. 역할을 수임한 사용자는 일시적으로 자신의 권한을 내려놓고 역할의 권한을 대신 갖습니다. 사용자가 역할에서 나가거나 역할 사용을 중단하면 원래 사용자 권한이 복원됩니다. 외부 ID(external ID)라는 추가 파라미터는 같은 조직이 통제하지 않는 계정 간 역할의 안전한 사용을 보장하는 데 도움이 됩니다.
신뢰 정책(Trust policy) 역할을 수임할 수 있다고 신뢰하는 주체를 정의하는 JSON 정책 문서입니다. 역할 신뢰 정책은 IAM의 역할에 연결되는 필수 리소스 기반 정책입니다. 신뢰 정책에 지정할 수 있는 주체에는 사용자, 역할, 계정, 서비스가 포함됩니다. 자세한 내용은 AWS Security Blog의 IAM 역할에서 신뢰 정책 사용 방법을 참고하세요.
교차 계정 접근용 역할(Role for cross-account access) 한 계정의 리소스에 대해 다른 계정의 신뢰받는 주체에게 접근을 부여하는 역할입니다. 역할은 교차 계정 접근을 부여하는 주요 방법입니다. 그러나 일부 AWS 서비스는 (역할을 프록시로 사용하는 대신) 정책을 리소스에 직접 연결하는 것을 허용합니다. 이를 리소스 기반 정책이라 하며, 다른 AWS 계정의 주체에게 리소스 접근을 부여하는 데 사용할 수 있습니다. 이러한 리소스에는 Amazon Simple Storage Service(S3) 버킷, Amazon Glacier 볼트, Amazon Simple Notification Service(SNS) 토픽, Amazon Simple Queue Service(SQS) 큐가 포함됩니다. 리소스 기반 정책을 지원하는 서비스는 IAM과 함께 작동하는 AWS 서비스 문서를 참고하세요. 리소스 기반 정책에 대한 자세한 내용은 IAM의 교차 계정 리소스 접근 문서를 참고하세요.
추가 리소스
다음 리소스가 IAM 역할과 관련된 IAM 용어를 더 배우는 데 도움이 돼요.
- **주체(Principals)**는 AWS에서 작업을 수행하고 리소스에 접근할 수 있는 개체입니다. 주체는 AWS 계정 루트 사용자, IAM 사용자, 역할이 될 수 있어요. AWS 서비스의 자격 증명을 나타내는 주체는 서비스 주체(service principal)입니다. 역할 신뢰 정책의 Principal 요소를 사용해 역할을 수임할 수 있다고 신뢰하는 주체를 정의하세요. 역할을 수임할 수 있는 주체의 예와 자세한 내용은 AWS JSON 정책 요소: Principal 문서를 참고하세요.
- **자격 증명 페더레이션(Identity federation)**은 외부 ID 공급자와 AWS 사이에 신뢰 관계를 만듭니다. 기존 OpenID Connect(OIDC) 또는 Security Assertion Markup Language(SAML) 2.0 공급자로 AWS 리소스에 접근할 수 있는 사람을 관리할 수 있어요. OIDC와 SAML 2.0으로 외부 ID 공급자와 AWS 사이에 신뢰 관계를 구성하면 사용자에게 IAM 역할이 할당됩니다. 사용자는 AWS 리소스에 접근할 수 있게 해주는 임시 자격 증명도 받습니다. 페더레이션 주체에 대한 자세한 내용은 ID 공급자와 AWS로의 페더레이션 문서를 참고하세요.
- **페더레이션 주체(Federated principals)**는 Directory Service, 기업 사용자 디렉토리, OIDC 공급자의 기존 자격 증명입니다. AWS는 ID 공급자를 통해 접근이 요청되면 페더레이션 주체에 역할을 할당합니다. SAML 및 OIDC 페더레이션 주체에 대한 자세한 내용은 페더레이션 사용자 세션과 역할 문서를 참고하세요.
- **권한 정책(Permissions policies)**은 역할이 사용할 수 있는 작업과 리소스를 정의하는 자격 증명 기반 정책입니다. 문서는 IAM 정책 언어의 규칙에 따라 작성됩니다. 자세한 내용은 IAM JSON 정책 참조 문서를 참고하세요.
- **권한 경계(Permissions boundaries)**는 정책을 사용해 자격 증명 기반 정책이 역할에 부여할 수 있는 최대 권한을 제한하는 고급 기능입니다. 서비스 연결 역할에는 권한 경계를 적용할 수 없어요. 자세한 내용은 IAM 개체의 권한 경계 문서를 참고하세요.