안녕하세요.
오늘은 AWS의 교차 계정 액세스에 대해 알아보겠습니다.
# 교차 계정 액세스란?
보통 테스트 환경에서는 하나의 AWS Account만을 사용하지만 실무에서는 그렇지 않습니다.
관리의 효율성 및 격리 등의 이유로 여러 Account로 분리하여 사용하는 것이 일반적인데요.
만약 한 명의 개발자가 모든 Account에 접근이 필요하다면 총 Account의 개수만큼 접근 권한이 필요할 것입니다.

이는 굉장히 비효율적이며 관리가 불편합니다.
이때 사용 가능한 것이 교차 계정 액세스입니다.
교차 계정 액세스는 서로 다른 AWS 계정 간에 리소스에 접근하거나 작업을 수행할 수 있도록 권한을 부여하는 메커니즘입니다. 일반적으로 한 계정의 사용자가 다른 계정의 리소스를 관리해야 할 때, 각 계정마다 별도의 IAM 사용자를 생성하는 대신 IAM Role(역할)을 전환(AssumeRole)하는 방식을 사용합니다.

위와 같이 개발자는 Account A의 IAM User 하나로 Account A 및 Account B를 동시에 접근 가능합니다.
# 테스트
테스트를 위해 2개의 Account가 필요합니다.
Organization을 사용해도 좋고 그냥 생으로 Account를 두개 만들어도 상관없습니다.
아니면 그냥 본 블로그를 보기만 하셔도 무방한 수준의 간단한 테스트입니다.
테스트는 IAM_Account의 User로 교차 계정 액세스를 통해 Resource_Account의 EC2를 관리하는 테스트를 해보겠습니다.
먼저 Resource_Account(EC2가 배포되어 있는 Account) 에서 Role(역할)을 생성하겠습니다.

IAM 역할에 들어와서 "역할 생성"을 클릭합니다.

신뢰할 수 있는 엔터티 유형을 AWS 계정을 선택합니다.
쉽게 말하면 이 역할을 사용할 주체를 선택하는 것 입니다.

테스트를 위해 EC2 Full Access 권한을 주겠습니다.

이제 간단히 이름만 설정하고 생성하겠습니다.

역할이 제대로 생성되어 있는 것을 확인가능합니다.
해당 역할은 IAM_Account에서 사용할 수 있고 EC2에 대한 Full Access 권한이 있는 역할입니다.
이제 IAM_Account(사용자 Account)에 와서 IAM User 및 정책을 생성하겠습니다.
IAM User에는 Resource Account의 역할을 사용할 수 있는 정책이 필요합니다.

IAM 정책에 들어와 정책 생성을 클릭합니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::[Account_ID]:role/[Role_Name]"
}
]
}
위 JSON에서 Account ID와 Role Name을 변경 후 복붙합니다.

이름 설정 후 정책 생성합니다.

정책이 정상적으로 생성된 것을 확인 가능합니다.

이제는 사용자를 생성하겠습니다.

Console에 접속이 필요하므로 Console 사용자 액세스를 체크합니다.
암호는 편하신대로 선택하시면 됩니다.
저는 자동 생성된 암호를 선택했습니다.

아까 생성한 정책을 선택 후 사용자 생성을 선택합니다.

암호를 저장해두고 해당 정보로 로그인해 보겠습니다.

로그인 후 "역할 전환"을 클릭합니다.

Resource Account의 ID와 아까 생성한 IAM role name을 입력 후 Switch Role을 클릭합니다.

정상적으로 접근된 것을 확인 가능합니다.

미리 생성해둔 EC2도 정상적으로 보입니다.

EC2 Full Access 권한도 있기 때문에 삭제도 가능합니다.

S3 Bucket를 생성하려 하였으나 권한이 없어 생성이 되지 않습니다.
감사합니다.