본문 바로가기

Infra/AWS

[AWS] Multi Account 전략 사용, Switch Role 을 통해 접근권한 제어하기

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

 

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html

자습서: IAM 역할을 사용한 AWS 계정 간 액세스 권한 위임

docs.aws.amazon.com

위 자습서를 실습한 내용입니다.

 

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 하면

 

와 같은 코멘트를 볼 수 있다.