메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

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

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

버킷 소유자는 객체를 업로드하기 위해 다른 AWS 계정을 활성화할 수 있습니다. 이러한 객체는 해당 객체를 만든 계정이 소유합니다. 버킷 소유자는 자신이 만들지 않은 객체를 소유하지 않습니다. 따라서 버킷 소유자가 이러한 객체에 대한 액세스 권한을 부여하려면 먼저 객체 소유자가 객체 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 명령줄 인터페이스 및 Windows PowerShell용 AWS 도구를 사용합니다. 따라서 사용자가 코드를 작성할 필요가 없습니다.

0단계: 연습 준비

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

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

      1. http://aws.amazon.com/s3로 이동하여 Sign Up을 클릭합니다.

      2. 화면에 표시되는 지시 사항을 따릅니다. 계정이 활성화되고 사용 가능한 상태가 되면 AWS에서 사용자에게 이메일로 알립니다.

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

      • 사용자 AccountAadmin을 만들고 보안 자격 증명을 적어 둡니다. 사용자 추가에 대한 자세한 내용은 IAM 사용 설명서Creating an IAM User in Your AWS Account를 참조하십시오.

      • 전적인 권한을 부여하는 사용자 정책에 연결해 AccountAadmin 관리자에게 권한을 위임합니다. 지침은 IAM 사용 설명서Managing Policies (AWS Management Console)를 참조하십시오.

      • IAM 콘솔의 [Dashboard]에서 [IAM User Sign-In URL]을 적어 둡니다. 해당 계정 사용자는 AWS Management Console에 로그인할 때 이 URL을 사용해야 합니다. 자세한 내용은 IAM 사용 설명서How IAM Users Sign in to Your AWS Account를 참조하십시오.

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

  2. AWS 명령행 인터페이스(CLI)나 Windows PowerShell용 AWS 도구를 설정합니다. 관리자 사용자 자격 증명은 다음과 같이 저장합니다.

    • AWS CLI를 사용하는 경우 구성 파일에서 AccountAadmin과 AccountBadmin이라는 두 프로파일을 만듭니다.

    • Windows PowerShell용 AWS 툴을 사용하는 경우, 세션의 자격 증명을 AccountAadmin과 AccountBadmin으로 저장해야 합니다.

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

1단계: 계정 A 작업 수행

1.1단계: AWS Management Console에 로그인

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

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

  1. Amazon S3 콘솔에서 버킷을 만듭니다. 이 연습에서는 버킷이 미국 표준 리전에서 생성되며 이름이 examplebucket이라고 가정합니다.

    이에 관한 지침은 Amazon Simple Storage Service 콘솔 사용 설명서버킷 생성을 참조하십시오.

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

    지침은 IAM 사용 설명서Adding an IAM User (AWS Management Console)를 참조하십시오.

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

  4. Amazon S3 콘솔에서 examplebucket 버킷에 다음 버킷 정책을 연결합니다. 지침은 Amazon Simple Storage Service 콘솔 사용 설명서버킷 권한 편집을 참조하십시오. 단계를 따라 버킷 정책을 추가합니다.

    이 정책은 계정 B에게 s3:PutObjects3:ListBucket 권한을 부여합니다. 또한 이 정책은 사용자 Dave에게 s3:GetObject 권한을 부여합니다.

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::examplebucket/*" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/*" ] } ] }

2단계: 계정 B 작업 수행

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

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

  • 객체 ACL에서 버킷 소유자인 계정 A에게 모든 권한을 부여하는 허가 추가

AWS CLI 사용

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

    Copy
    aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. 객체 ACL에서 버킷 소유자에게 객체에 대한 모든 권한을 부여하는 허가를 추가합니다.

    Copy
    aws s3api put-object-acl --bucket examplebucket --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin

Windows PowerShell용 AWS 도구 사용

  1. Windows PowerShell용 AWS 도구의 Write-S3Object 명령을 사용하여 객체를 업로드합니다.

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

    Copy
    Set-S3ACL -BucketName examplebucket -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden

3단계: 권한 테스트

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

AWS CLI 사용

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

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

    Copy
    aws s3api get-object --bucket examplebucket --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA

Windows PowerShell용 AWS 도구 사용

  1. 사용자 Dave의 AWS 자격 증명을 UserDaveAccountA로 영구 스토어에 저장합니다.

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

    Copy
    Read-S3Object -BucketName examplebucket -Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA

4단계: 정리

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

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

      • Amazon S3 콘솔에서 examplebucket에 연결된 버킷 정책을 제거합니다. 버킷 [Properties]의 [Permissions] 섹션에서 정책을 삭제합니다.

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

      • IAM 콘솔에서 AccountAadmin 사용자를 삭제합니다.

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