https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html
위 자습서를 실습한 내용입니다.
MultiAccount의 필요성
- 보안 및 관리의 용이성
- Policy와 Role을 제한하여 불필요하게 다른 자원에 접근하는 것을 막음
- 한 계정에 문제가 생겨도 다른 계정에는 문제가 발생하지 않음
- 기준에 따라 자원을 분리함으로써 관리가 용이해짐. (ex: 개발계, 로깅계, 상용계 등등)
- 비용
- 결제 계정을 분리하여 모든 계정의 비용을 통합 관리
실습내용
Production 계정의 자원에 Developer계정의 David User(Developer group)가 Role Switch를 통해 접근할 수 있도록 한다.
David는 Production 계정에 로그인하지 않고 제공받은 계정 ID와 Role name만으로 해당 자원에 접근할 수 있다.
사전조건
- 최소 2개의 계정 필요
- Production 계정
- Development 계정
- Development 계정에 2개의 IAM User 생성
- David - developer group
- Theresa - Tester group
결과
1단계: 접근제한 할 자원 생성
- Production 계정에 test용 S3 bucket 생성
2단계: 해당 버킷에 접근가능한 Policy 생성
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::bucket-name"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
3단계: 생성한 Policy를 적용받는 UpdateApp Role 생성
이 role은 현 production 계정 사용자가 아닌, development 계정에 부여할 role이기 때문에
Create role > Select type of trusted entity 에서
Another AWS account를 선택하고 development account ID를 입력한다.
그 후, Attach permissions policies 단계에서 방금 생성한 Policy를 적용한다.
4단계: Development 계정에서 developer group의 권한 설정
IAM > Group > developer > Permission > Inline Policies tap > create Group Policy
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::production계정아이디:role/role name(UpdateApp)"
}
}
(선택)
Tester group에 production S3 bucket에 접근 권한을 받는 것을 거부하는 policy 생성
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::PRODUCTION-ACCOUNT-ID:role/UpdateApp"
}
}
결과: David 계정 로그인 후 UpdateApp Role Change
로그인 후, 우측 상단 Davic @ account id 선택 후 "Switch Role" 클릭
로 변경되고, Production의 S3에 접근가능한 것을 확인 할 수 있다.
마찬가지 방법으로 Theresa(Tester group User)로 접속한 뒤, 다시 Switch role 하면
와 같은 코멘트를 볼 수 있다.