메뉴
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. Make sure you have two AWS accounts and each account has one administrator user as shown in the table in the preceding section.

    1. Sign up for an AWS account, if needed.

      1. Go to https://aws.amazon.com/s3/ and click Create an AWS Account.

      2. Follow the on-screen instructions. AWS will notify you by email when your account is active and available for you to use.

    2. Using Account A credentials, sign in to the IAM console and do the following to create an administrator user:

      • Create user AccountAadmin and note down security credentials. For more information about adding users, see Creating an IAM User in Your AWS Account in the IAM 사용 설명서.

      • Grant AccountAadmin administrator privileges by attaching a user policy giving full access. For instructions, see Working with Policies in the IAM 사용 설명서.

      • In the IAM console Dashboard, note down the IAM User Sign-In URL. Users in this account must use this URL when signing in to the AWS Management Console. For more information, see How Users Sign in to Your Account in IAM 사용 설명서.

    3. Repeat the preceding step using Account B credentials and create administrator user AccountBadmin.

  2. Set up either the AWS Command Line Interface (CLI) or the AWS Tools for Windows PowerShell. Make sure you save administrator user credentials as follows:

    • If using the AWS CLI, create two profiles, AccountAadmin and AccountBadmin, in the config file.

    • If using the AWS Tools for Windows PowerShell, make sure you store credentials for the session as AccountAadmin and AccountBadmin.

    For instructions, see 예제 안내를 위한 도구 설정.

1단계: 계정 A 작업 수행

1.1단계: AWS Management Console에 로그인

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

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

  1. In the Amazon S3 console, create a bucket. This exercise assumes the bucket is created in the US East (N. Virginia) region and the name is examplebucket.

    For instructions, see How Do I Create an S3 Bucket? in the Amazon Simple Storage Service 콘솔 사용 설명서.

  2. In the IAM console, create a user Dave.

    For instructions, see Creating IAM Users (AWS Management Console) in the IAM 사용 설명서.

  3. Note down the Dave credentials.

  4. In the Amazon S3 console, attach the following bucket policy to examplebucket bucket. For instructions, see How Do I Add an S3 Bucket Policy? in the Amazon Simple Storage Service 콘솔 사용 설명서. Follow steps to add a bucket policy.

    The policy grants Account B the s3:PutObject and s3:ListBucket permissions. The policy also grants user Dave the s3:GetObject permission.

    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에게 모든 권한을 부여하는 허가 추가

Using the AWS CLI

  1. Using the put-object AWS CLI command, upload an object. The --body parameter in the command identifies the source file to upload. For example, if the file is on C: drive of a Windows machine, you would specify c:\HappyFace.jpg. The --key parameter provides the key name for the object.

    Copy
    aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. Add a grant to the object ACL to allow the bucket owner full control of the object.

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

Using the AWS Tools for Windows PowerShell

  1. Using the Write-S3Object AWS Tools for Windows PowerShell command, upload an object.

    Copy
    Write-S3Object -BucketName examplebucket -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
  2. Add a grant to the object ACL to allow the bucket owner full control of the object.

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

3단계: 권한 테스트

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

Using the AWS CLI

  1. Add user Dave credentials to the AWS CLI config file and create a new profile, UserDaveAccountA. For more information, see 예제 안내를 위한 도구 설정.

    Copy
    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. Execute the get-object AWS CLI command to download HappyFace.jpg and save it locally. You provide user Dave credentials by adding the --profile parameter.

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

Using the AWS Tools for Windows PowerShell

  1. Store user Dave AWS credentials, as UserDaveAccountA, to persistent store.

    Copy
    Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
  2. Execute the Read-S3Object command to download the HappyFace.jpg object and save it locally. You provide user Dave credentials by adding the -StoredCredentials parameter.

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

4단계: 정리

  1. After you are done testing, you can do the following to clean up.

    1. Sign in to the AWS Management Console (AWS Management Console) using Account A credentials, and do the following:

      • In the Amazon S3 console, remove the bucket policy attached to examplebucket. In the bucket Properties, delete the policy in the Permissions section.

      • If the bucket is created for this exercise, in the Amazon S3 console, delete the objects and then delete the bucket.

      • In the IAM console, remove the AccountAadmin user.

  2. Sign in to the AWS Management Console (AWS Management Console) using Account B credentials. In the IAM console, delete user AccountBadmin.