예제 2: 버킷 소유자가 계정 간 버킷 권한 부여하기
예제 2: 버킷 소유자가 계정 간 버킷 권한 부여하기 (Example 2: Bucket owner granting cross-account bucket permissions)
AWS 계정(예: Account A)은 다른 AWS 계정인 Account B에게 자신의 리소스(버킷, 객체 등)에 접근할 권한을 부여할 수 있어요. Account B는 그 권한을 자신의 계정에 있는 사용자에게 다시 위임할 수도 있어요. 이 예제 시나리오에서는 버킷 소유자가 다른 계정에 특정 버킷 작업을 수행할 수 있는 계정 간(cross-account) 권한을 부여해요.
출처: 문서
본문
중요 — 개별 사용자에게 권한을 부여하는 것보다 IAM 역할에 권한을 부여하는 것이 더 좋은 방법이에요. 방법은 계정 간 권한 이해와 IAM 역할 사용을 참고하세요.
참고 — Account A는 버킷 정책으로 Account B의 사용자에게 직접 권한을 부여할 수도 있어요. 하지만 그 사용자는 자신이 속한 부모 계정인 Account B로부터의 권한도 여전히 필요해요. 설령 Account B가 Account A로부터 권한을 받지 못했어도 마찬가지예요. 사용자가 리소스 소유자와 부모 계정 양쪽에서 권한을 받으면 리소스에 접근할 수 있어요.
이 연습의 단계를 요약하면 다음과 같아요.
- Account A 관리자 사용자가 버킷 정책을 연결해 Account B에게 특정 버킷 작업을 수행할 수 있는 계정 간 권한을 부여해요. Account B의 관리자 사용자는 자동으로 이 권한을 상속받아요.
- Account B 관리자 사용자가 사용자 정책을 연결해 Account A로부터 받은 권한을 사용자에게 위임해요.
- Account B의 사용자가 Account A가 소유한 버킷의 객체에 접근해 권한을 확인해요.
이 예제를 진행하려면 계정이 두 개 필요해요. 다음 표는 이 계정들과 그 안의 관리자 사용자를 어떻게 부를지 보여줘요. IAM 지침(리소스 생성과 권한 부여를 위한 관리자 사용자에 대해)에 따라 이 연습에서는 루트 사용자 자격 증명을 사용하지 않아요. 대신 각 계정에 관리자 사용자를 만들고, 그 자격 증명으로 리소스를 만들고 권한을 부여해요.
| AWS 계정 ID | 계정 표기 | 계정의 관리자 사용자 |
|---|---|---|
| 1111-1111-1111 | Account A | AccountAadmin |
| 2222-2222-2222 | Account B | AccountBadmin |
사용자 생성과 권한 부여의 모든 작업은 AWS Management Console에서 해요. 권한 확인에는 명령줄 도구인 AWS Command Line Interface(AWS CLI)와 AWS Tools for Windows PowerShell을 사용하니까, 코드를 작성할 필요는 없어요.
연습 준비하기
두 개의 AWS 계정이 있고, 앞 절의 표처럼 각 계정에 관리자 사용자가 하나씩 있는지 확인하세요.
- 필요하면 AWS 계정에 가입해요.
- Account A 자격 증명으로 IAM 콘솔에 로그인해서 관리자 사용자를 만들어요.
- 사용자
AccountAadmin을 만들고 보안 자격 증명을 기록해 두세요. 자세한 방법은 IAM User Guide의 AWS 계정에 IAM 사용자 만들기를 참고하세요. - 전체 액세스를 주는 사용자 정책을 연결해
AccountAadmin에게 관리자 권한을 부여해요. 자세한 방법은 IAM User Guide의 정책 작업을 참고하세요. - IAM 콘솔에 있는 동안 대시보드에서 IAM 사용자 로그인 URL(Sign-In URL) 을 기록해 두세요. 계정의 모든 사용자는 AWS Management Console에 로그인할 때 이 URL을 사용해야 해요. 자세한 내용은 IAM User Guide의 사용자가 계정에 로그인하는 방법을 참고하세요.
- 사용자
- Account B 자격 증명으로 앞의 단계를 반복해 관리자 사용자
AccountBadmin을 만들어요. - AWS Command Line Interface(AWS CLI) 또는 AWS Tools for Windows PowerShell을 설정해요. 관리자 사용자 자격 증명을 다음과 같이 저장하세요.
- AWS CLI를 사용한다면 config 파일에
AccountAadmin과AccountBadmin두 개의 프로필을 만들어요. - AWS Tools for Windows PowerShell을 사용한다면 세션에
AccountAadmin과AccountBadmin으로 자격 증명을 저장해요. - 자세한 방법은 연습을 위한 도구 설정을 참고하세요.
- AWS CLI를 사용한다면 config 파일에
- 관리자 사용자 자격 증명(프로필이라고도 함)을 저장해 두세요. 명령마다 자격 증명을 지정하는 대신 프로필 이름을 쓸 수 있어요. 자세한 내용은 연습을 위한 도구 설정을 참고하세요.
- 두 계정의 관리자 사용자
AccountAadmin과AccountBadmin각각에 대해 AWS CLI 자격 증명 파일에 프로필을 추가해요.
[AccountAadmin]
aws_access_key_id = access-key-ID
aws_secret_access_key = secret-access-key
region = us-east-1
[AccountBadmin]
aws_access_key_id = access-key-ID
aws_secret_access_key = secret-access-key
region = us-east-1
- AWS Tools for Windows PowerShell을 사용한다면 다음 명령을 실행해요.
set-awscredentials –AccessKey AcctA-access-key-ID –SecretKey AcctA-secret-access-key –storeas AccountAadmin
set-awscredentials –AccessKey AcctB-access-key-ID –SecretKey AcctB-secret-access-key –storeas AccountBadmin
1단계: Account A 작업 수행하기
1.1단계: AWS Management Console에 로그인하기
Account A의 IAM 사용자 로그인 URL을 사용해 먼저 AWS Management Console에 AccountAadmin 사용자로 로그인해요. 이 사용자가 버킷을 만들고 정책을 연결할 거예요.
1.2단계: 버킷 만들기
Amazon S3 콘솔에서 버킷을 만들어요. 이 연습에서는 버킷이 미국 동부(버지니아 북부) AWS 리전에 만들어졌고 이름이 amzn-s3-demo-bucket이라고 가정해요. 자세한 방법은 일반용 버킷 만들기를 참고하세요.
버킷에 샘플 객체를 업로드해요. 자세한 방법은 2단계: 버킷에 객체 업로드를 참고하세요.
1.3단계: Account B에 계정 간 권한을 부여하는 버킷 정책 연결하기
이 버킷 정책은 Account B에 s3:GetLifecycleConfiguration과 s3:ListBucket 권한을 부여해요. 여전히 AccountAadmin 사용자 자격 증명으로 콘솔에 로그인해 있다고 가정해요.
amzn-s3-demo-bucket에 다음 버킷 정책을 연결하세요. 이 정책은 Account B에s3:GetLifecycleConfiguration과s3:ListBucket작업 권한을 부여해요. 자세한 방법은 Amazon S3 콘솔로 버킷 정책 추가를 참고하세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": [
"s3:GetLifecycleConfiguration",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket"
]
}
]
}
- Account B(따라서 그 관리자 사용자)가 작업을 수행할 수 있는지 확인해요.
AWS CLI로 확인하기
aws s3 ls s3://amzn-s3-demo-bucket --profile AccountBadmin
aws s3api get-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket --profile AccountBadmin
AWS Tools for Windows PowerShell로 확인하기
get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBadmin
get-s3bucketlifecycleconfiguration -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBadmin
2단계: Account B 작업 수행하기
이제 Account B 관리자가 사용자 Dave를 만들고 Account A로부터 받은 권한을 위임해요.
2.1단계: AWS Management Console에 로그인하기
Account B의 IAM 사용자 로그인 URL을 사용해 먼저 AWS Management Console에 AccountBadmin 사용자로 로그인해요.
2.2단계: Account B에 사용자 Dave 만들기
IAM 콘솔에서 사용자 Dave를 만들어요. 자세한 방법은 IAM User Guide의 IAM 사용자 만들기(콘솔)를 참고하세요.
2.3단계: 사용자 Dave에게 권한 위임하기
- 사용자 Dave를 위해 다음 정책으로 인라인 정책을 만들어요. 버킷 이름을 제공하도록 정책을 업데이트해야 해요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "Example",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket"
]
}
]
}
AccountBadmin사용자 자격 증명으로 콘솔에 로그인해 있다고 가정해요. 자세한 방법은 IAM User Guide의 IAM 정책 관리를 참고하세요.
2.4단계: 권한 테스트하기
이제 Account B의 Dave가 Account A가 소유한 amzn-s3-demo-bucket의 내용을 나열할 수 있어요. 다음 절차 중 하나로 권한을 확인해요.
AWS CLI로 권한 테스트하기
- AWS CLI config 파일에
UserDave프로필을 추가해요. config 파일에 대한 자세한 내용은 연습을 위한 도구 설정을 참고하세요.
[profile UserDave]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1
- 명령 프롬프트에서 다음 AWS CLI 명령을 입력해 Dave가 이제 Account A가 소유한
amzn-s3-demo-bucket에서 객체 목록을 가져올 수 있는지 확인해요. 명령이UserDave프로필을 지정하는 점을 주목하세요.
aws s3 ls s3://amzn-s3-demo-bucket --profile UserDave
- Dave에게는 다른 권한이 없어요. 그래서 다른 작업(예: 다음
get-bucket-lifecycle-configuration작업)을 시도하면 Amazon S3가 권한 거부를 반환해요.
aws s3api get-bucket-lifecycle-configuration --bucket amzn-s3-demo-bucket --profile UserDave
AWS Tools for Windows PowerShell로 권한 테스트하기
- Dave의 자격 증명을
AccountBDave로 저장해요.
set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountBDave
- 목록 버킷(List Bucket) 명령을 시도해요.
get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
- Dave에게는 다른 권한이 없어요. 그래서 다른 작업(예: 다음
get-s3bucketlifecycleconfiguration)을 시도하면 Amazon S3가 권한 거부를 반환해요.
get-s3bucketlifecycleconfiguration -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
3단계: (선택) 명시적 거부 시도하기
접근 제어 목록(ACL), 버킷 정책, 사용자 정책으로 권한을 부여할 수 있지만, 버킷 정책이나 사용자 정책으로 명시적 거부가 설정되면 그 명시적 거부가 다른 모든 권한보다 우선해요. 테스트를 위해 버킷 정책을 업데이트해서 Account B에 s3:ListBucket 권한을 명시적으로 거부해 봐요. 정책은 여전히 s3:ListBucket 권한을 부여하지만, 명시적 거부가 우선해서 Account B나 Account B의 사용자들은 amzn-s3-demo-bucket의 객체를 나열할 수 없게 돼요.
Account A의 AccountAadmin 사용자 자격 증명을 사용해 버킷 정책을 다음으로 교체하세요. 이제 AccountBadmin 자격 증명으로 버킷 목록을 얻으려 하면 접근이 거부돼요.
AWS CLI로 다음 명령 실행하기
aws s3 ls s3://amzn-s3-demo-bucket --profile AccountBadmin
AWS Tools for Windows PowerShell로 다음 명령 실행하기
get-s3object -BucketName amzn-s3-demo-bucket -StoredCredentials AccountBDave
4단계: 정리하기
테스트가 끝나면 다음 단계로 정리할 수 있어요.
- Account A 자격 증명으로 AWS Management Console에 로그인해서 다음을 수행하세요.
- Amazon S3 콘솔에서
amzn-s3-demo-bucket에 연결된 버킷 정책을 제거해요. 버킷 속성(Properties) 의 권한(Permissions) 섹션에서 정책을 삭제해요. - 이 연습을 위해 만든 버킷이라면 Amazon S3 콘솔에서 객체를 삭제한 다음 버킷을 삭제해요.
- IAM 콘솔에서
AccountAadmin사용자를 제거해요.
- Amazon S3 콘솔에서
- Account B 자격 증명으로 IAM 콘솔에 로그인해서 사용자
AccountBadmin을 삭제해요. 단계별 안내는 IAM User Guide의 IAM 사용자 삭제를 참고하세요.