예제 2: 버킷 소유자가 교차 계정 버킷 권한 부여
중요
IAM 역할에 권한을 부여하는 것이 개별 사용자에게 권한을 부여하는 것보다 더 좋습니다. 이 작업을 수행하는 방법은 크로스 계정 권한과 IAM 역할 사용에 대한 이해 단원을 참조하십시오.
AWS 계정(예: 계정 A)은 다른 AWS 계정(계정 B)에 버킷 및 객체와 같은 해당 리소스에 대한 액세스 권한을 부여할 수 있습니다. 그런 다음 계정 B는 해당 권한을 자신의 계정에 속한 사용자에게 위임할 수 있습니다. 이 시나리오 예제에서는 버킷 소유자가 특정 버킷 작업을 수행할 수 있도록 다른 계정에 교차 계정 권한을 부여합니다.
참고
계정 A는 버킷 정책을 사용하여 계정 B에 속한 사용자에게 직접 권한을 부여할 수도 있습니다. 그러나 해당 사용자는 여전히 자신이 속하는 상위 계정인 계정 B로부터 권한을 받아야 합니다. 이는 계정 B가 계정 A로부터 권한을 받지 못했더라도 마찬가지입니다. 사용자가 두 리소스 소유자 모두와 상위 계정으로부터 권한을 받은 이상 해당 사용자는 리소스에 액세스할 수 있습니다.
다음은 연습 단계 의 요약입니다.

-
계정 A의 관리자 사용자가 특정 버킷 작업을 수행할 수 있도록 계정 B에 교차 계정 권한을 부여하는 버킷 정책을 연결합니다.
계정 B에 속하는 관리자 사용자는 자동으로 권한을 상속합니다.
-
계정 B의 관리자 사용자가 계정 A로부터 받은 권한을 위임하는 사용자 정책을 사용자에게 연결합니다.
-
그런 다음 계정 B에 속한 사용자가 계정 A 소유의 버킷에 있는 객체에 액세스하여 권한을 확인합니다.
이 예제에서는 두 계정이 필요합니다. 다음 표에서는 이러한 계정과 해당 계정에 속하는 관리자 사용자를 나타내는 방법을 보여 줍니다. IAM 지침(관리자 사용자를 사용하여 리소스를 만들고 권한을 부여하는 것에 대한 소개 참조)에 따라 본 연습에서는 루트 사용자 자격 증명을 사용하지 않습니다. 대신 각 계정에서 관리자 사용자를 만들고 리소스를 만들고 권한을 부여할 때 해당 자격 증명을 사용합니다.
AWS 계정 ID | 계정 이름 | 계정의 관리자 사용자 |
---|---|---|
|
계정 A |
AccountAadmin |
|
계정 B |
AccountBadmin |
사용자를 만들고 권한을 부여하는 모든 작업은 AWS Management Console에서 수행됩니다. 권한을 확인하기 위해 본 시연에서는 명령줄 도구, AWS Command Line Interface(CLI) 및 AWS Tools for Windows PowerShell을 사용합니다. 따라서 사용자가 코드를 작성할 필요가 없습니다.
연습 준비
-
AWS 계정이 두 개 있으며 각 계정에 이전 섹션의 표에 나와 있는 것과 같이 관리자 사용자가 한 명 있는지 확인합니다.
-
필요한 경우 AWS 계정에 가입합니다.
-
계정 A의 자격 증명을 사용하여 IAM 콘솔
에 로그인하여 관리자 사용자를 만듭니다. -
AccountAadmin
사용자를 생성하고 보안 자격 증명을 적어 둡니다. 지침은 IAM 사용 설명서의 AWS 계정에서 IAM 사용자 생성을 참조하십시오. -
모든 권한을 제공하는 사용자 정책을 연결하여 AccountAadmin에 관리자 권한을 부여합니다. 지침은 IAM 사용 설명서의 정책 작업 섹션을 참조하십시오.
-
-
IAM 콘솔의 대시보드에서 IAM 사용자 로그인 URL을 적어 둡니다. 계정에 속한 모든 사용자가 AWS Management Console에 로그인할 때 이 URL을 사용해야 합니다.
자세한 내용은 IAM 사용 설명서의 사용자의 계정 로그인 방법 단원을 참조하십시오.
-
계정 B의 자격 증명을 사용하여 이전 단계를 반복하고 관리자 사용자인
AccountBadmin
을 만듭니다.
-
-
AWS Command Line Interface(AWS CLI) 또는 AWS Tools for Windows PowerShell을 설정합니다. 관리자 사용자 자격 증명은 다음과 같이 저장합니다.
-
AWS CLI를 사용하는 경우 구성 파일에
AccountAadmin
및AccountBadmin
의 프로파일 2개를 생성합니다. -
AWS Tools for Windows PowerShell을 사용하는 경우 세션의 자격 증명을
AccountAadmin
및AccountBadmin
으로 저장해야 합니다.
지침은 연습을 위한 도구 설정 단원을 참조하십시오.
-
-
프로파일이라고도 하는 관리자 사용자 자격 증명을 저장합니다. 입력하는 각 명령에 대해 자격 증명을 지정하는 대신 프로파일 이름을 사용할 수 있습니다. 자세한 내용은 연습을 위한 도구 설정 단원을 참조하십시오.
-
두 계정의 AWS CLI 자격 증명 파일에서 각 관리자 사용자,
AccountAadmin
및AccountBadmin
에 대해 프로파일을 추가합니다.[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
–SecretKeyAcctA-secret-access-key
–storeas AccountAadmin set-awscredentials –AccessKeyAcctB-access-key-ID
–SecretKeyAcctB-secret-access-key
–storeas AccountBadmin
-
1단계: 계정 A 태스크 수행
1.1단계: AWS Management Console에 로그인
우선 계정 A의 IAM 사용자 로그인 URL을 사용해 AccountAadmin 사용자로 AWS Management Console에 로그인합니다. 이 사용자가 버킷을 만들고 버킷에 정책을 연결합니다.
1.2단계: 버킷 만들기
-
Amazon S3 콘솔에서 버킷을 생성합니다. 이 연습에서는 버킷이 미국 동부(버지니아 북부) AWS 리전에서 생성되었으며 이름이
이라고 가정합니다.amzn-s3-demo-bucket
지침은 버킷 생성 단원을 참조하십시오.
-
버킷에 샘플 객체를 업로드합니다.
지침은 2단계: 버킷에 객체 업로드을 참조하십시오.
1.3단계: 계정 B에 교차 계정 권한을 부여하기 위해 버킷 정책 연결
버킷 정책을 사용하면 계정 B에 s3:GetLifecycleConfiguration
및 s3:ListBucket
권한이 부여됩니다. AccountAadmin 사용자 자격 증명을 사용하여 여전히 콘솔에 로그인된 상태라고 가정합니다.
-
에 다음 버킷 정책을 연결합니다. 이 정책은 계정 B에게amzn-s3-demo-bucket
s3:GetLifecycleConfiguration
및s3:ListBucket
작업에 대한 권한을 부여합니다.지침은 Amazon S3 콘솔을 사용하여 버킷 정책 추가 단원을 참조하십시오.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:root" }, "Action": [ "s3:GetLifecycleConfiguration", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] } ] } -
계정 B와 해당 관리자 사용자가 작업을 수행할 수 있는지 확인합니다.
-
AWS CLI를 사용하여 확인
aws s3 ls s3://
amzn-s3-demo-bucket
--profile AccountBadmin aws s3api get-bucket-lifecycle-configuration --bucketamzn-s3-demo-bucket
--profile AccountBadmin -
AWS Tools for Windows PowerShell을 사용하여 확인
get-s3object -BucketName
amzn-s3-demo-bucket
-StoredCredentials AccountBadmin get-s3bucketlifecycleconfiguration -BucketNameamzn-s3-demo-bucket
-StoredCredentials AccountBadmin
-
2단계: 계정 B 태스크 수행
이제 계정 B의 관리자가 사용자 Dave를 만들고 계정 A로부터 받은 권한을 위임합니다.
2.1단계: AWS Management Console에 로그인
계정 B의 IAM 사용자 로그인 URL을 사용하여 먼저 AccountBadmin 사용자로 AWS Management Console에 로그인합니다.
2.2단계: 계정 B에서 사용자 Dave 만들기
IAM 콘솔Dave
를 만듭니다.
지침은 IAM 사용 설명서에서 IAM 사용자 생성(콘솔)을 참조하십시오.
2.3단계: 사용자 Dave에게 권한 위임
다음 정책을 사용하여 사용자 Dave에 대한 인라인 정책을 만듭니다. 버킷 이름을 제공하여 정책을 업데이트해야 합니다.
AccountBadmin 사용자 자격 증명을 사용하여 콘솔에 로그인했다고 가정합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
" ] } ] }
지침은 IAM 사용 설명서에서 IAM 정책 관리를 참조하십시오.
2.4단계: 권한 테스트
이제 계정 B에 속한 Dave는 계정 A가 소유하는
의 콘텐츠를 나열할 수 있습니다. 다음 절차 중 하나를 사용하여 권한을 확인할 수 있습니다.amzn-s3-demo-bucket
AWS CLI를 사용하여 권한 테스트
-
AWS CLI 구성 파일에
UserDave
프로파일을 추가합니다. 구성 파일에 대한 자세한 내용은 연습을 위한 도구 설정을 참조하십시오.[profile UserDave] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
명령 프롬프트에서 다음 AWS CLI 명령을 입력하여 이제 Dave가 계정 A 소유의
에서 객체 목록을 가져올 수 있는지 확인합니다. 명령에amzn-s3-demo-bucket
UserDave
프로파일이 지정된 것을 확인합니다.aws s3 ls s3://
--profile UserDaveamzn-s3-demo-bucket
Dave에게는 다른 권한이 없습니다. 따라서 다른 작업(예: 다음
get-bucket-lifecycle
구성)을 시도하면 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 AccountBDaveDave에게는 다른 권한이 없습니다. 따라서 다른 작업(예: 다음
get-s3bucketlifecycleconfiguration
)을 시도할 경우 Amazon S3는 권한 거부를 반환합니다.get-s3bucketlifecycleconfiguration -BucketName
amzn-s3-demo-bucket
-StoredCredentials AccountBDave
3단계: (선택 사항) 명시적 거부 시도
액세스 제어 목록 (ACL), 버킷 정책 또는 사용자 정책을 사용하여 권한을 부여할 수 있습니다. 그러나 버킷 정책 또는 사용자 정책을 통해 설정된 명시적 거부가 있을 경우 명시적 거부가 다른 모든 권한보다 우선 적용됩니다. 테스트를 위해 버킷 정책을 업데이트하고 계정 B의 s3:ListBucket
권한을 명시적으로 거부합니다. 또한 이 정책은 s3:ListBucket
권한을 부여합니다. 그러나 명시적 거부가 우선 적용되어 계정 B 또는 계정 B에 속한 사용자가
의 객체를 나열할 수 없습니다.amzn-s3-demo-bucket
-
계정 A에 속한 사용자
AccountAadmin
의 자격 증명을 사용하여 버킷 정책을 다음으로 대체합니다.{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:root" }, "Action": [ "s3:GetLifecycleConfiguration", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] }, { "Sid": "Deny permission", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID
:root" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] } ] } -
이제
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단계: 정리
-
테스트를 완료한 후, 다음과 같이 수행해 정리합니다.
-
계정 A의 자격 증명을 사용하여 AWS Management Console(AWS Management Console
)에 로그인하고 다음을 수행합니다. -
Amazon S3 콘솔에서
에 연결된 버킷 정책을 제거합니다. 버킷 속성의 권한 섹션에서 정책을 삭제합니다.amzn-s3-demo-bucket
-
이 연습을 위해 버킷을 만들었다면 Amazon S3 콘솔에서 객체를 삭제한 뒤 버킷을 삭제합니다.
-
IAM 콘솔
에서 AccountAadmin
사용자를 제거합니다.
-
-
-
계정 B의 자격 증명을 사용하여 IAM 콘솔
에 로그인합니다. AccountBadmin
사용자를 삭제합니다. 단계별 지침은 IAM 사용 설명서의 IAM 사용자 삭제를 참조하세요.