메뉴
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. AWS 계정이 두 개 있으며 각 계정에 이전 단원의 표에 나와 있는 것과 같이 관리자 사용자가 한 명 있는지 확인합니다.

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

      1. https://aws.amazon.com/s3/로 이동하여 [Create an AWS Account]를 클릭합니다.

      2. 화면에 나타나는 지시를 따릅니다.

        계정이 활성화되고 사용 가능한 상태가 되면 AWS에서 사용자에게 이메일로 알립니다.

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

      1. 사용자 AccountAadmin을 만들고 보안 자격 증명을 적어 둡니다. 지침은 IAM 사용 설명서AWS 계정의 IAM 사용자 생성 단원을 참조하십시오.

      2. 전적인 권한을 부여하는 사용자 정책에 연결해 AccountAadmin 관리자에게 권한을 위임합니다. 지침은 IAM 사용 설명서정책 작업 단원을 참조하십시오.

    3. IAM 콘솔의 [Dashboard]에서 [IAM User Sign-In URL]을 적어 둡니다. 계정에 속한 모든 사용자가 AWS Management Console에 로그인할 때 이 URL을 사용해야 합니다.

      자세한 내용은 IAM 사용 설명서사용자의 계정 로그인 방법 단원을 참조하십시오.

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

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

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

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

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

  3. 프로파일이라고도 하는 관리자 사용자 자격 증명을 저장합니다. 입력하는 각 명령에 대해 자격 증명을 지정하는 대신 프로파일 이름을 사용할 수 있습니다. 자세한 내용은 예제 안내를 위한 도구 설정을 참조하십시오.

    1. 두 계정에 속한 각 관리자 사용자에 대해 AWS CLI 구성 파일에서 프로파일을 추가합니다.

      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. Windows PowerShell용 AWS 도구를 사용하는 경우

      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. Amazon S3 콘솔에서 버킷을 만듭니다. 이 연습에서는 버킷이 미국 동부(버지니아 북부) 리전에서 생성되며 이름이 examplebucket이라고 가정합니다.

    지침은 S3 버킷을 생성하려면 어떻게 해야 합니까?(출처: Amazon Simple Storage Service 콘솔 사용 설명서)를 참조하십시오.

  2. 버킷에 샘플 객체를 업로드합니다.

    지침은 Amazon Simple Storage Service 시작 안내서버킷에 객체 추가를 참조하십시오.

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

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

  1. examplebucket에 다음 버킷 정책을 연결합니다. 이 정책은 계정 B에게 s3:GetBucketLocations3:ListBucket 작업에 대한 권한을 부여합니다.

    지침은 S3 버킷 정책을 추가하려면 어떻게 해야 합니까?(출처: 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. 계정 B와 해당 관리자 사용자가 작업을 수행할 수 있는지 확인합니다.

    • AWS CLI 사용

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

      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. IAM 콘솔에서 사용자 Dave를 만듭니다.

    이에 관한 지침은 IAM 사용 설명서IAM 사용자 만들기(AWS Management Console) 단원을 참조하십시오.

  2. UserDave 자격 증명을 적어 둡니다.

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

  • 다음 정책을 사용하여 사용자 Dave에 대한 인라인 정책을 만듭니다. 버킷 이름을 제공하여 정책을 업데이트해야 합니다.

    AccountBadmin 사용자 자격 증명을 사용하여 콘솔에 로그인했다고 가정됩니다.

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

    지침은 IAM 사용 설명서인라인 정책 작업 단원을 참조하십시오.

2.4단계: 권한 테스트

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

AWS CLI를 사용하여 테스트

  1. AWS CLI 구성 파일에 UserDave 프로파일을 추가합니다. 구성 파일에 대한 자세한 내용은 예제 안내를 위한 도구 설정을 참조하십시오.

    Copy
    [profile UserDave] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. 명령 프롬프트에서 다음 AWS CLI 명령을 입력하여 이제 Dave가 계정 A 소유의 examplebucket에서 객체 목록을 가져올 수 있는지 확인합니다. 명령에 UserDave 프로파일이 지정된 것을 확인합니다.

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

    Dave에게는 다른 권한이 없습니다. 따라서 Dave가 다음 get-bucket-location과 같은 다른 작업을 시도할 경우 Amazon S3에서 권한 거부를 반환합니다.

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

Windows PowerShell용 AWS 도구를 사용하여 테스트

  1. Dave의 자격 증명을 AccountBDave로 저장합니다.

    Copy
    set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountBDave
  2. List Bucket 명령을 시도합니다.

    Copy
    get-s3object -BucketName example2bucket -StoredCredentials AccountBDave

    Dave에게는 다른 권한이 없습니다. 따라서 Dave가 다음 get-bucket-location과 같은 다른 작업을 시도할 경우 Amazon S3에서 권한 거부를 반환합니다.

    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. 시험을 완료한 후, 다음과 같이 수행해 정리합니다.

    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을 삭제합니다.