brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Dec 03. 2020

512. 보안-교차 계정으로 다른 계정 인스턴스 관리

회사에서 여러 AWS Account를 사용 중이다.

다른 Account  EC2를 관리해보자.


구성

111  Account EC2   --------------------222 Account  EC2


이론

111 EC2에서 222  EC2   확인하기

111에서 222를 관리하기 위해  키가 필요하다.

111에서 키를 요청한다.

111에서 CLI 권한이 필요하다. Role을 만들고  EC2, ssm 정책을 만든다. EC2에 부여한다.(admin이라면 무관)

222에서는 111에서 키 요청을 하면 허락해줘야 한다.


작업

<1> 222에 role을 만들고  트러스트 릴레이션 쉽에서   1111 account와 릴레이션 쉽을 맺는다.

<2> 111에서 222에 STS와 임시키를 요청한다. 릴레이션 쉽이 맺어져 있어 가능하다.

<3> 111 EC2에서 222  EC2   확인해본다.

<4> 다른 실습 



<1> 222에 role을 만들고  트러스트 릴레이션 쉽에서   1111 account와 릴레이션 쉽을 맺는다.


1

222 accoud id 에서 작업

크로스 어카운트 롤

 IAM > Roles > Create role  > Another account   (111 acccoud id입력)

권한을 준다 - seo-remote-role



2

보안을 위해 트러스트에 제약 설정하기


seo-remote-role  > 신뢰관계 탭 >  수정 (제약하는 것이라 반드시 해야 하는 것은 아니다.)


{

        "Version": "2012-10-17",

        "Statement": [

            {

                "Effect": "Allow",

                "Principal": {

                    "AWS": [

                    "arn:aws:sts::PARTNER_ACCOUNT_NUMBER:assumed-role/CLIAssumeRole/PARTNER_INSTANCE_ID",

                    "arn:aws:iam::PARTNER_ACCOUNT_NUMBER:root"

                    ]

                },

                "Action": "sts:AssumeRole"

            }

        ]

}




<2> 111에서 222에 STS와 임시키를 요청한다. 릴레이션 쉽이 맺어져 있어 가능하다.


1

111에서 권한이 있어야 한다. 

sts assume 권한

ec2 권한


111에서 access-key 하나 만든다.

111이 admin이라면  상관없다.



2

111에서 권한


policy


{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": "sts:AssumeRole",

            "Resource": "arn:aws:iam::*:role/Rxxxxxxxxx"

        },

        {

            "Effect": "Allow",

            "Action": [ "ec2:describe*"

                      ],

            "Resource": "*"

        }

    ]

}



policy name 

Mxxxxxxxxxx


role

Cxxxxxxxx


ec2에 롤 부여

Cxxxxxxxxxxx



<3> 111 EC2에서 222  EC2   확인해본다.


1

1111 ec2 접속


2

aws configure

111에 대한 access key 필요. 권한도 있어야 한다.


3

자기 자신 ec2나 s3 확인하기


aws ec2 describe-instances --output table --query 'Reservations[].Instances[].[Tags[?Key==`Name`] | [0].Value,InstanceId,InstanceType]'


aws s3 ls


4

222 계정 접속을 위해 임시 자격증명 생성


PARTNER_ACCOUNT_NUMBER  확인  3 xxxxxxxxxx

role 확인


aws sts assume-role --role-arn arn:aws:iam::3xxxxxxxxxx:role/seo-remote-role --role-session-name seo-remote-role


값들이 나온다.


5

나온 값들을 

222 계정의 임시키를 입력

export AWS_ACCESS_KEY_ID=ACCESS_KEY_ID

export AWS_SECRET_ACCESS_KEY=SECRET_ACCESS_KEY

export AWS_SESSION_TOKEN=SESSION_TOKEN


export AWS_ACCESS_KEY_ID=ASIAxxxxxxxxxxxxx

export AWS_SECRET_ACCESS_KEY=4PlTxxxxxxxxxxxxxxxx

export AWS_SESSION_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



6

222에 있는 s3와 인스턴스 정보 확인


aws s3 ls


aws ec2 describe-instances --output table --query 'Reservations[].Instances[].[Tags[?Key==`Name`] | [0].Value,InstanceId,InstanceType]'



<4> 다른 실습 


https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html


감사합니다.






브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari