예제 3: 버킷 소유자가 자신이 소유하지 않는 객체에 대한 권한 부여 - Amazon Simple Storage Service

예제 3: 버킷 소유자가 자신이 소유하지 않는 객체에 대한 권한 부여

중요

IAM 역할에 권한을 부여하는 것이 개별 사용자에게 권한을 부여하는 것보다 더 좋습니다. 이 작업을 수행하는 방법은 배경: 교차 계정 권한과 IAM 역할 사용 단원을 참조하십시오.

이 예제의 시나리오는 버킷 소유자가 객체 액세스를 위해 권한을 부여하고자 하지만 버킷 소유자가 버킷의 일부 객체를 소유하지 않는다는 것입니다. 이 예제에서 버킷 소유자는 자신의 계정에 속한 사용자에게 권한을 부여하려고 합니다.

버킷 소유자는 객체를 업로드하기 위해 다른 AWS 계정을 사용할 수 있습니다. 기본적으로 버킷 소유자는 다른 AWS 계정이 버킷에 작성된 객체를 소유하지 않습니다. 객체를 S3 버킷에 작성하는 계정이 객체를 소유합니다. 버킷 소유자가 버킷의 객체를 소유하지 않는 경우 객체 소유자는 먼저 객체 ACL을 사용하여 버킷 소유자에게 권한을 부여해야 합니다. 그러면 버킷 소유자는 자신이 소유하지 않은 객체에 권한을 부여할 수 있습니다. 자세한 내용은 Amazon S3 버킷 및 객체 소유권 섹션을 참조하십시오.

버킷 소유자가 버킷의 S3 객체 소유권에 대해 버킷 소유자 시행 설정을 적용하는 경우 버킷 소유자는 다른 AWS 계정이 작성한 객체를 포함하여 버킷의 모든 객체를 소유하게 됩니다. 이렇게 하면 버킷 소유자가 객체를 소유하지 않는 문제가 해결됩니다. 그런 다음 자신의 계정에 있는 사용자나 다른 AWS 계정에 권한을 위임할 수 있습니다.

참고

S3 객체 소유권은 버킷에 업로드되는 객체의 소유권을 제어하고 ACL을 비활성화 또는 활성화하는 데 사용할 수 있는 Amazon S3 버킷 수준 설정입니다. 기본적으로 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 모든 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 액세스 관리 정책을 사용하여 객체에 대한 액세스를 독점적으로 관리합니다.

Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다. 각 객체에 대해 액세스를 개별적으로 제어할 필요가 있는 드문 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다. ACL을 비활성화하면 누가 객체를 버킷에 업로드했는지에 관계없이 정책을 사용하여 버킷의 모든 객체에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 단원을 참조하십시오.

이 예에서는 버킷 소유자가 객체 소유권에 대해 버킷 소유자 시행 설정을 적용하지 않았다고 가정합니다. 버킷 소유자가 자신의 계정에 속한 사용자에게 권한을 위임합니다. 각 연습 단계는 다음과 같이 간략히 설명할 수 있습니다.

  1. 계정 A의 관리자 사용자가 두 설명문이 포함된 버킷 정책을 연결합니다.

    • 객체 업로드를 위해 계정 B에게 교차 계정 권한을 허용합니다.

    • 자신의 계정에 속한 사용자가 버킷의 객체에 액세스할 수 있게 허용합니다.

  2. 계정 B의 관리자 사용자가 계정 A가 소유하는 버킷에 객체를 업로드합니다.

  3. 계정 B의 관리자가 버킷 소유자에게 객체에 대한 모든 권한을 부여하는 허가를 추가하며 객체 ACL을 업데이트합니다.

  4. 계정 A에 속한 사용자가 소유자에 관계없이 버킷의 객체에 액세스하여 이를 확인합니다.

이 예제에서는 두 계정이 필요합니다. 다음 표는 세 계정과 해당 계정의 관리자 사용자를 나타내는 방법을 보여 줍니다. IAM 권장 지침에 따라 이 연습에서는 계정 루트 사용자 자격 증명을 사용하지 않습니다. 자세한 내용은 관리자 사용자를 사용하여 리소스를 만들고 권한을 부여하는 것에 대한 소개 단원을 참조하십시오. 대신 사용자가 각 계정에서 관리자를 생성한 후 해당 자격 증명을 사용하여 리소스를 생성하고 해당 리소스에 대한 권한을 부여합니다.

AWS 계정 ID 계정 이름 계정의 관리자

1111-1111-1111

계정 A

AccountAadmin

2222-2222-2222

계정 B

AccountBadmin

사용자를 만들고 권한을 부여하는 모든 작업은 AWS Management Console에서 수행됩니다. 권한을 확인하기 위해 본 시연에서는 명령줄 도구, AWS Command Line Interface(AWS CLI) 및 AWS Tools for Windows PowerShell을 사용합니다. 따라서 사용자가 코드를 작성할 필요가 없습니다.

0단계: 시연 준비

  1. AWS 계정이 두 개 있으며 각 계정에 이전 섹션의 표에 나와 있는 것과 같이 관리자가 한 명 있는지 확인합니다.

    1. 필요한 경우 AWS 계정에 가입합니다.

    2. 계정 A 보안 인증 정보를 사용하여 IAM 콘솔에 로그인하고 다음을 수행하여 관리자 사용자를 만듭니다.

      • AccountAadmin이라는 사용자를 생성하고 보안 자격 증명을 적어 둡니다. 사용자 추가에 대한 자세한 내용은 IAM 사용 설명서AWS 계정에서 IAM 사용자 생성을 참조하십시오.

      • 모든 권한을 제공하는 사용자 정책을 연결하여 AccountAadmin 관리자에게 권한을 부여합니다. 지침은 IAM 사용 설명서에서 IAM 정책 관리를 참조하십시오.

      • IAM 콘솔 대시보드에서 IAM 사용자 로그인 URL을 적어 둡니다. 해당 계정 사용자는 AWS Management Console에 로그인할 때 이 URL을 사용해야 합니다. 자세한 내용은 IAM 사용 설명서에서 사용자의 계정 로그인 방법을 참조하십시오.

    3. 계정 B의 자격 증명을 사용하여 이전 단계를 반복하고 관리자 사용자인 AccountBadmin을 생성합니다.

  2. AWS CLI 또는 Tools for Windows PowerShell을 설정합니다. 관리자 자격 증명을 다음과 같이 저장해야 합니다.

    • AWS CLI를 사용하는 경우 구성 파일에 AccountAadminAccountBadmin의 프로파일 2개를 생성합니다.

    • Tools for Windows PowerShell을 사용하는 경우 세션의 자격 증명을 AccountAadminAccountBadmin으로 저장해야 합니다.

    지침은 예제 안내를 위한 도구 설정을(을) 참조하십시오.

1단계: 계정 A 태스크 수행

계정 A에 대해 다음 단계를 수행합니다.

1.1단계: 콘솔에 로그인

계정 A의 IAM 사용자 로그인 URL을 사용하여 AccountAadmin 사용자로 AWS Management Console에 로그인합니다. 이 사용자가 버킷을 만들고 버킷에 정책을 연결합니다.

1.2단계: 버킷 및 사용자를 생성하고 사용자 권한을 부여하는 버킷 정책 추가

  1. Amazon S3 콘솔에서 버킷을 생성합니다. 이 연습에서는 버킷이 미국 동부(버지니아 북부) 리전에 생성되고 이름이 DOC-EXAMPLE-BUCKET1이라고 가정합니다.

    지침은 버킷 생성을(을) 참조하십시오.

  2. IAM 콘솔에서 사용자 Dave를 만듭니다.

    단계별 지침은 IAM 사용 설명서의 IAM 사용자 생성(콘솔)을 참조하세요.

  3. Dave의 자격 증명을 적어 둡니다.

  4. Amazon S3 콘솔에서 DOC-EXAMPLE-BUCKET1 버킷에 다음 버킷 정책을 연결합니다. 지침은 Amazon S3 콘솔을 사용하여 버킷 정책 추가을(을) 참조하십시오. 단계를 따라 버킷 정책을 추가합니다. 계정 ID를 찾는 방법에 대한 자세한 내용은 AWS 계정 ID 찾기를 참조하십시오.

    이 정책은 계정 B에게 s3:PutObjects3: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:::DOC-EXAMPLE-BUCKET1/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

2단계: 계정 B 태스크 수행

이제 계정 B에게 계정 A의 버킷에 대한 작업을 수행할 수 있는 권한이 있으므로 계정 B의 관리자가 다음을 수행합니다.

  • 계정 A의 버킷에 객체 업로드

  • 객체 ACL에서 버킷 소유자인 계정 A에게 전체 제어 권한을 부여하는 허용을 추가합니다.

AWS CLI 사용
  1. put-object CLI 명령을 사용하여 객체를 업로드합니다. 명령의 --body 파라미터를 통해 업로드할 원본 파일이 식별됩니다. 예를 들어, 해당 파일이 Windows 시스템의 C: 드라이브에 있는 경우 c:\HappyFace.jpg를 지정합니다. --key 파라미터는 객체의 키 이름을 제공합니다.

    aws s3api put-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. 객체 ACL에서 버킷 소유자에게 객체에 대한 모든 권한을 부여하는 허가를 추가합니다. 정식 사용자 ID를 찾는 방법에 대한 자세한 내용은 AWS 계정의 정식 사용자 ID 찾기 섹션을 참조하십시오.

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
Tools for Windows PowerShell 사용
  1. Write-S3Object Tools for Windows PowerShell의 명령을 사용하여 객체를 업로드합니다.

    Write-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
  2. 객체 ACL에서 버킷 소유자에게 객체에 대한 모든 권한을 부여하는 허가를 추가합니다.

    Set-S3ACL -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden

3단계: 권한 테스트

이제 계정 A에 속한 사용자 Dave가 계정 B가 소유하는 객체에 액세스할 수 있는지 확인합니다.

AWS CLI 사용
  1. AWS CLI 구성 파일에 사용자 Dave의 자격 증명을 추가하고 새로운 프로파일인 UserDaveAccountA를 만듭니다. 자세한 내용은 예제 안내를 위한 도구 설정 단원을 참조하십시오.

    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. get-object CLI 명령을 실행하여 HappyFace.jpg를 다운로드하고 로컬에 저장합니다. 사용자 Dave의 자격 증명은 --profile 파라미터를 추가하여 제공합니다.

    aws s3api get-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA
Tools for Windows PowerShell 사용
  1. 사용자 Dave의 AWS 자격 증명을 UserDaveAccountA로 영구 스토어에 저장합니다.

    Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
  2. Read-S3Object 명령을 실행하여 HappyFace.jpg 객체를 다운로드하고 로컬에 저장합니다. 사용자 Dave의 자격 증명은 -StoredCredentials 파라미터를 추가하여 제공합니다.

    Read-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA

4단계: 정리

  1. 시험을 완료한 후, 다음과 같이 수행해 정리합니다.

    1. 계정 A의 자격 증명을 사용하여 AWS Management Console에 로그인하고 다음을 수행합니다.

      • Amazon S3 콘솔에서 DOC-EXAMPLE-BUCKET1에 연결된 버킷 정책을 제거합니다. 버킷 속성권한 섹션에서 정책을 삭제합니다.

      • 이 연습을 위해 버킷을 만들었다면 Amazon S3 콘솔에서 객체를 삭제한 뒤 버킷을 삭제합니다.

      • IAM 콘솔에서 AccountAadmin 사용자를 제거합니다. 단계별 지침은 IAM 사용 설명서IAM 사용자 삭제를 참조하십시오.

  2. 계정 B의 자격 증명을 사용하여 AWS Management Console에 로그인합니다. IAM 콘솔에서 AccountBadmin 사용자를 삭제합니다.