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

예제 2: 버킷 소유자가 교차 계정 버킷 권한 부여

AWS 계정(예: 계정 A)은 다른 AWS 계정(계정 B)에 버킷 및 객체와 같은 해당 리소스에 대한 액세스 권한을 부여할 수 있습니다. 그런 다음 계정 B는 해당 권한을 자신의 계정에 속한 사용자에게 위임할 수 있습니다. 이 시나리오 예제에서는 버킷 소유자가 특정 버킷 작업을 수행할 수 있도록 다른 계정에 교차 계정 권한을 부여합니다.

참고

계정 A는 버킷 정책을 사용하여 계정 B에 속한 사용자에게 직접 권한을 부여할 수도 있습니다. 그러나 해당 사용자는 여전히 자신이 속하는 상위 계정인 계정 B로부터 허가를 받아야 합니다. 이는 계정 B가 계정 A로부터 허가를 받지 못했더라도 마찬가지입니다. 사용자가 두 리소스 소유자 모두와 상위 계정으로부터 허가를 받는 한 해당 사용자는 리소스에 액세스할 수 있습니다.

각 연습 단계는 다음과 같이 간략히 설명할 수 있습니다.

  1. 계정 A의 관리자 사용자가 특정 버킷 작업을 수행할 수 있도록 계정 B에 교차 계정 권한을 부여하는 버킷 정책을 연결합니다.

    계정 B에 속하는 관리자 사용자는 자동으로 권한을 상속합니다.

  2. 계정 B의 관리자 사용자가 계정 A로부터 받은 권한을 위임하는 사용자 정책을 사용자에게 연결합니다.

  3. 그런 다음 계정 B에 속한 사용자가 계정 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 that 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 to create the administrator user:

      1. Create user AccountAadmin and note down the security credentials. For instructions, see Creating an IAM User in Your AWS Account in the IAM 사용 설명서.

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

    3. While you are in the IAM console, note down the IAM User Sign-In URL on the Dashboard. All users in the 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 사용 설명서.

    4. 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 예제 안내를 위한 도구 설정.

  3. Save the administrator user credentials, also referred to as profiles. You can use the profile name instead of specifying credentials for each command you enter. For more information, see 예제 안내를 위한 도구 설정.

    1. Add profiles in the AWS CLI config file for each of the administrator users in the two accounts.

      Copy
      [profile AccountAadmin] aws_access_key_id = access-key-ID aws_secret_access_key = secret-access-key region = us-east-1 [profile AccountBadmin] aws_access_key_id = access-key-ID aws_secret_access_key = secret-access-key region = us-east-1
    2. If you are using the AWS Tools for Windows PowerShell

      Copy
      set-awscredentials –AccessKey AcctA-access-key-ID –SecretKey AcctA-secret-access-key –storeas AccountAadmin set-awscredentials –AccessKey AcctB-access-key-ID –SecretKey AcctB-secret-access-key –storeas AccountBadmin

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 is named examplebucket.

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

  2. Upload a sample object to the bucket.

    For instructions, go to Add an Object to a Bucket in the Amazon Simple Storage Service 시작 안내서.

1.3단계: 계정 B에 교차 계정 권한을 부여하기 위해 버킷 정책 연결

버킷 정책을 사용하면 계정 B에 s3:GetBucketLocations3:ListBucket 권한이 부여됩니다. AccountAadmin 사용자 자격 증명을 사용하여 여전히 콘솔에 로그인된 상태라고 가정됩니다.

  1. Attach the following bucket policy to examplebucket. The policy grants Account B permission for the s3:GetBucketLocation and s3:ListBucket actions.

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

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }
  2. Verify Account B (and thus its administrator user) can perform the operations.

    • Using the AWS CLI

      Copy
      aws s3 ls s3://examplebucket --profile AccountBadmin aws s3api get-bucket-location --bucket examplebucket --profile AccountBadmin
    • Using the AWS Tools for Windows PowerShell

      Copy
      get-s3object -BucketName example2bucket -StoredCredentials AccountBadmin get-s3bucketlocation -BucketName example2bucket -StoredCredentials AccountBadmin

2단계: 계정 B 작업 수행

이제 계정 B의 관리자가 사용자 Dave를 만들고 Dave에게 계정 A로부터 받은 권한을 위임합니다.

2.1단계: AWS Management Console에 로그인

계정 B의 IAM 사용자 로그인 URL을 사용하여 먼저 AccountBadmin 사용자로 AWS Management Console에 로그인합니다.

2.2단계: 계정 B에서 사용자 Dave 만들기

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

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

  2. Note down the UserDave credentials.

2.3단계: 사용자 Dave에게 권한 위임

  • Create an inline policy for the user Dave by using the following policy. You will need to update the policy by providing your bucket name.

    It is assumed you are signed in to the console using AccountBadmin user credentials.

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

    For instructions, see Working with Inline Policies in the IAM 사용 설명서.

2.4단계: 권한 테스트

이제 계정 B에 속한 Dave는 계정 A가 소유하는 examplebucket의 콘텐츠를 나열할 수 있습니다. 다음 절차 중 하나를 사용하여 권한을 확인할 수 있습니다.

Test Using the AWS CLI

  1. Add the UserDave profile to the AWS CLI config file. For more information about the config file, see 예제 안내를 위한 도구 설정.

    Copy
    [profile UserDave] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. At the command prompt, enter the following AWS CLI command to verify Dave can now get an object list from the examplebucket owned by Account A. Note the command specifies the UserDave profile.

    Copy
    aws s3 ls s3://examplebucket --profile UserDave

    Dave does not have any other permissions. So if he tries any other operation—for example, the following get bucket location—Amazon S3 returns permission denied.

    Copy
    aws s3api get-bucket-location --bucket examplebucket --profile UserDave

Test Using AWS Tools for Windows PowerShell

  1. Store Dave's credentials as AccountBDave.

    Copy
    set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountBDave
  2. Try the List Bucket command.

    Copy
    get-s3object -BucketName example2bucket -StoredCredentials AccountBDave

    Dave does not have any other permissions. So if he tries any other operation—for example, the following get bucket location—Amazon S3 returns permission denied.

    Copy
    get-s3bucketlocation -BucketName example2bucket -StoredCredentials AccountBDave

3단계: 추가 작업: 명시적 거부 시도

ACL, 버킷 정책 및 사용자 정책을 통해 권한을 부여 받을 수 있습니다. 그러나 버킷 정책 또는 사용자 정책을 통해 설정된 명시적 거부가 있을 경우 명시적 거부가 다른 모든 권한보다 우선 적용됩니다. 테스트를 위해 버킷 정책을 업데이트하고 계정 B의 s3:ListBucket 권한을 명시적으로 거부해 보겠습니다. 이 정책은 s3:ListBucket 권한도 부여하지만 명시적 거부가 우선 적용되어 계정 B 또는 계정 B에 속한 사용자가 examplebucket의 객체를 나열할 수 없습니다.

  1. 계정 A에 속한 사용자 AccountAadmin의 자격 증명을 사용하여 버킷 정책을 다음으로 대체합니다.

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] }, { "Sid": "Deny permission", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:root" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }
  2. 이제 AccountBadmin 자격 증명을 사용하여 버킷 목록을 가져오려고 하면 액세스 거부가 표시됩니다.

    • AWS CLI 사용:

      Copy
      aws s3 ls s3://examplebucket --profile AccountBadmin
    • Windows PowerShell용 AWS 도구 사용:

      Copy
      get-s3object -BucketName example2bucket -StoredCredentials AccountBDave

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.