Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용해 다른 AWS 계정의 Amazon Simple Storage Service(Amazon S3) 버킷에 액세스하려고 합니다.
해결 방법
EC2 인스턴스에서 S3 버킷으로의 교차 계정 액세스를 허용하려면 두 AWS 계정 간에 신뢰 관계를 설정하십시오. AWS Identity and Access Management(IAM) 역할을 사용하여 관계를 생성합니다. 버킷 소유자 계정에서 S3 권한을 부여하는 역할을 생성합니다. EC2 인스턴스 소유자 계정에서 버킷 소유자의 역할을 맡을 수 있는 역할을 생성하여 버킷에 액세스합니다.
버킷 소유자 계정에서 역할 생성
버킷 소유자 계정에서 Identity and Access Management(IAM) 역할을 생성하려면 다음 단계를 따르십시오.
-
버킷 소유자 계정을 사용하여 AWS Management Console에 로그인합니다.
-
IAM 콘솔을 엽니다.
-
탐색 창에서 역할을 선택하고 역할 생성을 선택합니다.
-
신뢰할 수 있는 엔티티 유형에서 AWS 계정을 선택합니다.
-
다른 AWS 계정을 선택한 다음 EC2 인스턴스 소유자 계정의 계정 ID를 입력합니다.
참고: 보안 요구 사항에 따라 이러한 옵션이 필요한 경우가 아니면 외부 ID 필요 또는 MFA 필요를 선택하지 마십시오.
-
다음을 선택합니다.
-
Amazon S3에 대한 액세스 권한을 위임하는 역할에 IAM 정책을 연결하고 다음을 선택합니다. 예를 들어 다음 IAM 정책의 경우 버킷의 개체에 대한 s3:GetObject 액세스 권한을 부여합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET"
]
}
]
}
참고: DOC-EXAMPLE-BUCKET을 해당 버킷 이름으로 바꾸십시오. 또한 내 사용 사례에 필요한 Amazon S3 버킷 수준 및 개체 수준 권한에 따라 내 IAM 정책을 변경합니다.
-
역할 이름에 역할 이름을 입력합니다.
-
(선택 사항) 역할에 태그를 추가합니다.
-
역할 생성을 선택합니다.
버킷 소유자 계정에서 IAM 역할의 Amazon 리소스 이름(ARN)을 찾습니다.
IAM 역할의 ARN을 찾으려면 다음 단계를 따르십시오.
- IAM 콘솔의 탐색 창에서 역할을 선택합니다.
- 생성한 IAM 역할을 선택합니다.
- 역할 ARN에 표시된 값을 기록해 둡니다.
EC2 인스턴스 소유자 계정에서 다른 역할을 생성하여 인스턴스에 연결합니다.
EC2 인스턴스 소유자 계정에서 다른 인스턴스 프로필을 생성하고 인스턴스에 연결하려면 다음 단계를 따르십시오.
- EC2 인스턴스 소유자 계정을 사용하여 AWS Management Console에 로그인합니다.
- IAM 콘솔을 엽니다.
- 탐색 창에서 역할을 선택하고 역할 생성을 선택합니다.
- 신뢰할 수 있는 엔티티 유형에 AWS 서비스를 선택합니다.
- 서비스 또는 사용 사례에 EC2를 선택하고 내 사용 사례를 선택합니다.
- 다음을 선택합니다.
- 권한 추가 페이지에서 다음을 선택합니다.
- 역할 이름에 역할 이름을 입력합니다.
- (선택 사항) 역할에 태그를 추가합니다.
- 역할 생성을 선택합니다.
- 역할 목록에서 생성한 역할을 선택합니다.
- 권한 추가에서 인라인 정책 생성을 선택합니다.
- 정책 편집기에서 JSON을 선택하고 다음 정책을 입력합니다.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::111111111111:role/ROLENAME"
}]
}
참고: arn:aws:iam::111111111111:role/ROLENAME을 버킷 소유자 계정에서 생성한 IAM 역할의 ARN으로 바꿉니다.
- 다음을 선택합니다.
- 이름에 정책 이름을 입력하고 정책 생성을 선택합니다.
- Amazon S3 버킷에 액세스할 때 사용하는 인스턴스에 IAM 역할을 연결합니다.
Amazon EC2 인스턴스에서 CLI 구성 파일에 역할 프로필을 생성합니다.
참고: SSH와 Session Manager를 사용해 인스턴스에 연결하는 경우 ec2-user와 ssm-user 모두에 다음 단계를 실행해야 합니다. Session Manager는 AWS Systems Manager 내의 도구입니다.
인스턴스에서 CLI 구성 파일 역할 프로필을 생성하려면 다음 단계를 따르십시오.
-
인스턴스에 연결합니다. 자세한 내용은 SSH를 사용하여 Linux 인스턴스에 연결 또는 RDP를 사용하여 Windows 인스턴스에 연결을 참고하십시오.
-
디렉터리에 ~/.aws라는 폴더가 이미 있는지 확인하려면 다음 ls 명령을 실행해 인스턴스 디렉터리를 나열합니다.
ls -l ~/.aws
-
~/.aws 폴더가 있으면 다음 단계로 진행하십시오. ~/.aws 폴더가 없으면 다음 mkdir 명령을 실행해 폴더를 생성하십시오.
mkdir ~/.aws/
-
~/.aws 폴더에서 텍스트 편집기를 사용해 파일을 생성합니다. 파일 이름을 config으로 지정합니다.
-
파일에 다음 텍스트를 입력하여 역할의 프로필을 정의합니다.
[profile enterprofilename]
role_arn = arn:aws:iam::111111111111:role/ROLENAME
credential_source = Ec2InstanceMetadata
참고: enterprofilename을 내 값으로 바꾸십시오. arn:aws:iam::111111111111:role/ROLENAME을 버킷 소유자 계정에서 생성한 역할의 ARN으로 바꿉니다.
-
파일을 저장합니다.
인스턴스 프로필이 역할을 맡을 수 있는지 확인
인스턴스의 역할이 버킷 소유자 계정의 역할을 맡을 수 있는지 확인하려면 인스턴스에 연결한 후 다음 명령을 실행합니다.
aws sts get-caller-identity --profile profilename
참고: profilename을 인스턴스에 연결한 역할의 이름으로 바꿉니다.
이 명령은 다음과 비슷한 출력을 반환합니다.
"Account": "11111111111",
"UserId": "AROAEXAMPLEID:sessionName",
"Arn": "arn:aws:sts::111111111111:assumed-role/ROLENAME/sessionName"
“Arn” 값이 버킷 소유자 계정에서 생성한 역할의 ARN과 일치하는지 확인합니다.
Amazon S3 버킷 액세스 권한 확인
인스턴스가 S3 버킷에 액세스할 수 있는지 확인하려면 인스턴스에 연결한 후 다음 list 명령을 실행합니다.
aws s3 ls s3://DOC-EXAMPLE-BUCKET --profile profilename
참고: DOC-EXAMPLE-BUCKET을 버킷 이름으로 바꾸고 profilename을 구성 파일에 구성한 이름으로 바꿉니다.
인스턴스가 버킷에 성공적으로 액세스할 수 있으면 다음과 같은 응답이 수신됩니다.
PRE Hello/
2018-08-15 16:16:51 89 index.html
관련 정보
IAM 자습서: IAM 역할을 사용해 AWS 계정 전체에 대한 액세스 위임