예제 3: 버킷 소유자가 자신이 소유하지 않는 객체에 대한 권한 부여
중요
IAM 역할에 권한을 부여하는 것이 개별 사용자에게 권한을 부여하는 것보다 더 좋습니다. 이 작업을 수행하는 방법은 크로스 계정 권한과 IAM 역할 사용에 대한 이해 단원을 참조하십시오.
이 예시의 시나리오에서는 버킷 소유자가 객체 액세스를 위해 권한을 부여하고자 하지만 버킷 소유자가 버킷의 일부 객체를 소유하지 않습니다. 이 예제에서 버킷 소유자는 자신의 계정에 속한 사용자에게 권한을 부여하려고 합니다.
버킷 소유자는 객체를 업로드하기 위해 다른 AWS 계정을 사용할 수 있습니다. 기본적으로 버킷 소유자는 다른 AWS 계정이 버킷에 작성된 객체를 소유하지 않습니다. 객체를 S3 버킷에 작성하는 계정이 객체를 소유합니다. 버킷 소유자가 버킷의 객체를 소유하지 않은 경우 객체 소유자가 먼저 객체 액세스 제어 목록(ACL)을 사용하여 버킷 소유자에게 권한을 부여해야 합니다. 그러면 버킷 소유자는 자신이 소유하지 않은 객체에 대한 권한을 부여할 수 있습니다. 자세한 내용은 Amazon S3 버킷 및 객체 소유권 단원을 참조하십시오.
버킷 소유자가 버킷의 S3 객체 소유권에 대해 버킷 소유자 시행 설정을 적용하는 경우 버킷 소유자는 다른 AWS 계정이 작성한 객체를 포함하여 버킷의 모든 객체를 소유하게 됩니다. 이렇게 하면 버킷 소유자가 객체를 소유하지 않은 문제가 해결됩니다. 그런 다음 자신의 계정에 있는 사용자나 다른 AWS 계정에 권한을 위임할 수 있습니다.
참고
S3 객체 소유권은 버킷에 업로드되는 객체의 소유권을 제어하고 ACL을 비활성화 또는 활성화하는 데 사용할 수 있는 Amazon S3 버킷 수준 설정입니다. 기본적으로 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 모든 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 액세스 관리 정책을 사용하여 객체에 대한 액세스를 독점적으로 관리합니다.
Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다. 각 객체에 대해 액세스를 개별적으로 제어할 필요가 있는 드문 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다. ACL을 비활성화하면 누가 객체를 버킷에 업로드했는지에 관계없이 정책을 사용하여 버킷의 모든 객체에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 단원을 참조하십시오.
이 예에서는 버킷 소유자가 객체 소유권에 대해 버킷 소유자 시행 설정을 적용하지 않았다고 가정합니다. 버킷 소유자가 자신의 계정에 속한 사용자에게 권한을 위임합니다. 다음은 연습 단계 의 요약입니다.
-
계정 A의 관리자 사용자가 두 설명문이 포함된 버킷 정책을 연결합니다.
-
객체 업로드를 위해 계정 B에게 교차 계정 권한을 허용합니다.
-
자신의 계정에 속한 사용자가 버킷의 객체에 액세스할 수 있게 허용합니다.
-
-
계정 B의 관리자 사용자가 계정 A가 소유하는 버킷에 객체를 업로드합니다.
-
계정 B의 관리자가 버킷 소유자에게 객체에 대한 모든 권한을 부여하는 허가를 추가하며 객체 ACL을 업데이트합니다.
-
계정 A에 속한 사용자가 소유자에 관계없이 버킷의 객체에 액세스하여 이를 확인합니다.
이 예제에서는 두 계정이 필요합니다. 다음 표는 세 계정과 해당 계정의 관리자 사용자를 나타내는 방법을 보여 줍니다. IAM 권장 지침에 따라 이 연습에서는 계정 루트 사용자 자격 증명을 사용하지 않습니다. 자세한 내용은 관리자 사용자를 사용하여 리소스를 만들고 권한을 부여하는 것에 대한 소개 단원을 참조하십시오. 대신 사용자가 각 계정에서 관리자를 생성한 후 해당 자격 증명을 사용하여 리소스를 생성하고 해당 리소스에 대한 권한을 부여합니다.
AWS 계정 ID | 계정 이름 | 계정의 관리자 |
---|---|---|
|
계정 A |
AccountAadmin |
|
계정 B |
AccountBadmin |
사용자를 만들고 권한을 부여하는 모든 작업은 AWS Management Console에서 수행됩니다. 권한을 확인하기 위해 본 시연에서는 명령줄 도구, AWS Command Line Interface(AWS CLI) 및 AWS Tools for Windows PowerShell을 사용합니다. 따라서 사용자가 코드를 작성할 필요가 없습니다.
0단계: 시연 준비
-
AWS 계정이 두 개 있으며 각 계정에 이전 섹션의 표에 나와 있는 것과 같이 관리자가 한 명 있는지 확인합니다.
-
필요한 경우 AWS 계정에 가입합니다.
-
계정 A 보안 인증 정보를 사용하여 IAM 콘솔
에 로그인하고 다음을 수행하여 관리자 사용자를 만듭니다. -
AccountAadmin
사용자를 생성하고 사용자 보안 자격 증명을 적어 둡니다. 사용자 추가에 대한 자세한 내용은 IAM 사용 설명서의 AWS 계정에서 IAM 사용자 생성을 참조하십시오. -
모든 액세스 권한을 제공하는 사용자 정책을 연결하여 AccountAadmin에 관리자 권한을 부여합니다. 지침은 IAM 사용 설명서에서 IAM 정책 관리를 참조하십시오.
-
IAM 콘솔
대시보드에서 IAM 사용자 로그인 URL을 적어 둡니다. 해당 계정 사용자는 AWS Management Console에 로그인할 때 이 URL을 사용해야 합니다. 자세한 내용은 IAM 사용 설명서에서 사용자의 계정 로그인 방법을 참조하십시오.
-
-
계정 B의 자격 증명을 사용하여 이전 단계를 반복하고 관리자 사용자인
AccountBadmin
을 만듭니다.
-
-
AWS CLI 또는 Tools for Windows PowerShell을 설정합니다. 관리자 자격 증명을 다음과 같이 저장해야 합니다.
-
AWS CLI를 사용하는 경우 구성 파일에
AccountAadmin
및AccountBadmin
의 프로파일 2개를 생성합니다. -
Tools for Windows PowerShell을 사용하는 경우 세션의 자격 증명을
AccountAadmin
및AccountBadmin
으로 저장해야 합니다.
지침은 연습을 위한 도구 설정 단원을 참조하십시오.
-
1단계: 계정 A 태스크 수행
계정 A에 대해 다음 단계를 수행합니다.
1.1단계: 콘솔에 로그인
계정 A의 IAM 사용자 로그인 URL을 사용하여 AccountAadmin
사용자로 AWS Management Console에 로그인합니다. 이 사용자가 버킷을 만들고 버킷에 정책을 연결합니다.
1.2단계: 버킷 및 사용자를 생성하고 사용자 권한을 부여하는 버킷 정책 추가
-
Amazon S3 콘솔에서 버킷을 생성합니다. 이 연습에서는 버킷이 미국 동부(버지니아 북부) AWS 리전에서 생성되었으며 이름이
이라고 가정합니다.amzn-s3-demo-bucket1
지침은 버킷 생성 단원을 참조하십시오.
-
IAM 콘솔
에서 사용자 Dave
를 만듭니다.단계별 지침은 IAM 사용 설명서의 IAM 사용자 생성(콘솔)을 참조하세요.
-
사용자 Dave의 자격 증명을 적어 둡니다.
-
Amazon S3 콘솔에서
버킷에 다음 버킷 정책을 연결합니다. 지침은 Amazon S3 콘솔을 사용하여 버킷 정책 추가 단원을 참조하십시오. 단계를 따라 버킷 정책을 추가합니다. 계정 ID를 찾는 방법에 대한 자세한 내용은 AWS 계정 ID 찾기를 참조하십시오.amzn-s3-demo-bucket1
이 정책은 계정 B에게
s3:PutObject
및s3:ListBucket
권한을 부여합니다. 또한 이 정책은 사용자Dave
에게s3:GetObject
권한을 부여합니다.{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:root" }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1
/*", "arn:aws:s3:::amzn-s3-demo-bucket1
" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID
:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1
/*" ] } ] }
2단계: 계정 B 태스크 수행
이제 계정 B가 계정 A의 버킷에 대한 작업을 수행할 수 있는 권한을 가지므로 계정 B의 관리자가 다음을 수행합니다.
-
계정 A의 버킷에 객체 업로드
-
객체 ACL에서 버킷 소유자인 계정 A에 전체 제어 권한을 부여하는 권한 부여를 추가합니다.
AWS CLI 사용
-
put-object
AWS CLI 명령을 사용하여 객체를 업로드합니다. 명령의--body
파라미터를 통해 업로드할 원본 파일이 식별됩니다. 예를 들어, 해당 파일이 Windows 시스템의C:
드라이브에 있는 경우c:\HappyFace.jpg
를 지정합니다.--key
파라미터는 객체의 키 이름을 제공합니다.aws s3api put-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin -
객체 ACL에서 버킷 소유자에게 객체에 대한 모든 권한을 부여하는 허가를 추가합니다. 표준 사용자 ID를 찾는 방법에 대한 자세한 내용은 AWS 계정 관리 참조 안내서의 AWS 계정의 표준 사용자 ID 찾기를 참조하세요.
aws s3api put-object-acl --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
Tools for Windows PowerShell 사용
-
Write-S3Object
명령을 사용하여 객체를 업로드합니다.Write-S3Object -BucketName
amzn-s3-demo-bucket1
-key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin -
객체 ACL에서 버킷 소유자에게 객체에 대한 모든 권한을 부여하는 허가를 추가합니다.
Set-S3ACL -BucketName
amzn-s3-demo-bucket1
-Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden
3단계: 권한 테스트
이제 계정 A에 속한 사용자 Dave가 계정 B가 소유하는 객체에 액세스할 수 있는지 확인합니다.
AWS CLI 사용
-
AWS CLI 구성 파일에 사용자 Dave의 자격 증명을 추가하고 새로운 프로파일인
UserDaveAccountA
를 만듭니다. 자세한 내용은 연습을 위한 도구 설정 단원을 참조하십시오.[profile UserDaveAccountA] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
get-object
CLI 명령을 실행하여HappyFace.jpg
를 다운로드하고 로컬에 저장합니다. 사용자 Dave의 자격 증명은--profile
파라미터를 추가하여 제공합니다.aws s3api get-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpgOutputfile.jpg
--profile UserDaveAccountA
Tools for Windows PowerShell 사용
-
사용자 Dave의 AWS 자격 증명을
UserDaveAccountA
로 영구 스토어에 저장합니다.Set-AWSCredentials -AccessKey
UserDave-AccessKey
-SecretKeyUserDave-SecretAccessKey
-storeas UserDaveAccountA -
Read-S3Object
명령을 실행하여HappyFace.jpg
객체를 다운로드하고 로컬에 저장합니다. 사용자 Dave의 자격 증명은-StoredCredentials
파라미터를 추가하여 제공합니다.Read-S3Object -BucketName
amzn-s3-demo-bucket1
-Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA
4단계: 정리
-
테스트를 완료한 후, 다음과 같이 수행해 정리합니다.
-
계정 A의 자격 증명을 사용하여 AWS Management Console
에 로그인하고 다음을 수행합니다. -
Amazon S3 콘솔에서
amzn-s3-demo-bucket1
에 연결된 버킷 정책을 제거합니다. 버킷 속성의 권한 섹션에서 정책을 삭제합니다. -
이 연습을 위해 버킷을 만들었다면 Amazon S3 콘솔에서 객체를 삭제한 뒤 버킷을 삭제합니다.
-
IAM 콘솔
에서 AccountAadmin 사용자를 제거합니다. 단계별 지침은 IAM 사용 설명서의 IAM 사용자 삭제를 참조하세요.
-
-
-
계정 B의 자격 증명을 사용하여 AWS Management Console
에 로그인합니다. IAM 콘솔 에서 AccountBadmin 사용자를 삭제합니다.