Amazon S3 버킷에 있는 개체에 크로스 계정 액세스를 제공하려면 어떻게 해야 하나요?

8분 분량
0

Amazon Simple Storage Service(Amazon S3) 버킷에 있는 개체 액세스 권한을 다른 AWS 계정에 부여하고 싶습니다.

간략한 설명

Amazon S3에서 다른 AWS 계정의 사용자에게 계정에서 소유한 개체에 대한 세분화된 크로스 계정 액세스 권한을 부여할 수 있습니다.

제공하려는 액세스 유형에 따라 다음 솔루션 중 하나를 사용하여 개체에 크로스 계정 액세스 권한을 부여하세요.

  • S3 버킷 개체에 프로그래밍 전용 액세스를 하기 위한 AWS Identity and Access Management(IAM) 정책 및 리소스 기반 버킷 정책
  • **S3 버킷 개체에 **프로그래밍 전용 액세스를 하기 위한 IAM 정책 및 리소스 기반 액세스 제어 목록(ACL)
    참고: 버킷 소유자 적용 설정을 켜면 모든 버킷과 개체 ACL이 비활성화됩니다. 따라서 ACL을 사용하여 크로스 계정 액세스 권한을 부여할 수 없습니다. 기본적으로 새로 생성된 모든 버킷에는 버킷 소유자 적용 설정이 켜져 있습니다. 크로스 계정 액세스를 관리하려면 ACL 대신 IAM 정책과 버킷 정책을 사용하는 것도 좋은 방법입니다. 자세한 내용을 보려면 개체 소유권 제어 및 버킷의 ACL 비활성화를 참고하세요.
  • 프로그래밍과 콘솔을 통해 S3 버킷에 액세스하기 위한 크로스 계정 IAM 역할

요청자가 IAM 보안 주체인 경우 보안 주체를 소유한 계정은 IAM 정책을 통해 S3에 권한을 부여해야 합니다. 사용 사례에 따라 버킷 소유자도 버킷 정책 또는 ACL을 통해 권한을 부여해야 합니다. 액세스가 허용된 후 크로스 계정 버킷에 프로그래밍 방식으로 액세스하는 것은 계정 버킷에 액세스 하는 방법과 동일합니다.

Amazon S3 액세스 포인트나 AWS Key Management Service(AWS KMS)를 통해 크로스 계정 액세스에 대해 자세히 알아보려면, 크로스 계정 사용자가 사용자 지정 AWS KMS 키로 암호화된 S3 개체에 액세스하려고 할 때 Access Denied 오류가 발생하는 이유는 무엇인가요?를 참고하세요.

크로스 계정 개체로 액세스해야 하는 대규모 데이터 세트의 경우 S3 액세스 포인트를 사용하는 것이 좋습니다. 자세한 내용을 보려면 크로스 계정 Amazon S3 액세스 포인트를 사용하여 공유 데이터 세트에 대한 액세스 관리 간소화 및 규모 조정을 참고하세요.

해결 방법

IAM 정책 및 리소스 기반 버킷 정책

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

크로스 계정 액세스 제어를 관리하고 S3 개체의 권한을 감사하려면 리소스 기반 버킷 정책을 사용하세요. 버킷 수준에서 버킷 정책을 적용하여 다음 값을 정의합니다.

  • 주요 요소: 버킷 내 개체에 액세스할 수 있는 사용자
  • 리소스 요소: 액세스할 수 있는 개체
  • 작업 요소: 버킷 내 개체에 액세스하는 방법

버킷 수준에서 버킷 정책을 적용할 때 버킷 내 다양한 개체의 액세스를 세분화하여 정의할 수 있습니다. 또한 버킷 정책을 검토하여 누가 S3 버킷의 개체에 액세스할 수 있는지 확인할 수 있습니다.

버킷 정책을 사용하여 S3 버킷 액세스를 관리하려면 다음 단계를 완료하세요..
참고: 다음 단계에서 계정 A는 사용자 계정이고, 계정 B는 개체 액세스 권한을 부여할 대상 계정입니다.

  1. 계정 A에 S3 버킷을 생성합니다.

  2. 계정 B에서 IAM 역할 또는 사용자를 생성합니다.

  3. 계정 B의 IAM 역할에 특정 버킷에서 개체를 다운로드(GetObject)하고 업로드(PutObject)할 수 있는 권한을 부여합니다. 또한 IAM 정책을 사용하여 계정 B의 IAM 역할에 버킷 소유자에게 개체 권한을 부여하는 PutObjectAcl을 호출할 수 있는 권한을 부여합니다.

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
    
            }
        ]
    }

    참고: 사용자 변수를 포함하도록 정책을 업데이트하세요. 계정 A에 있는 특정 버킷 폴더의 액세스를 제한할 수도 있습니다. 특정 버킷 폴더의 액세스를 제한하려면 리소스 요소에 폴더 이름(예: “arn:aws:s3:::AccountABucketName/FolderName/*”)을 정의합니다. 자세한 내용을 보려면 Amazon S3 버킷에서 특정 폴더의 액세스 권한을 사용자에게 부여하려면 어떻게 해야 하나요?를 참고하세요. 또한 AWS CLI 명령 create-policy를 사용하여 IAM 자격 증명 기반 정책을 생성할 수 있습니다.

  4. 계정 A에의 버킷 정책을 구성하여 계정 B에서 생성한 IAM 역할이나 사용자에게 권한을 부여합니다. 이 버킷 정책을 사용하여 사용자에게 계정 A가 소유한 버킷 개체 사용을 위해 GetObjectPutObject의 권한을 부여합니다.

    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
                },
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": [
                    "arn:aws:s3:::AccountABucketName/*"
                ]
            }
        ]
    }

    또 AWS CLI 명령 put-bucket-policy를 사용하여 Amazon S3 버킷 정책을 생성할 수 있습니다.

참고: 특정 버킷 폴더의 액세스를 제한하려면 리소스 요소에 폴더 이름(예: “arn:aws:s3:::AccountABucketName/FolderName/*”)을 정의합니다. 조건과 함께 s3:PutObject 권한을 사용하는 경우, 버킷 소유자는 다른 계정에서 업로드하는 개체에 대한 모든 권한을 갖습니다. PutObject API 호출은 특정 헤더를 사용하여 ACL을 적용합니다.

IAM 정책 및 리소스 기반 ACL

또한 개체 ACL을 사용하여 특정 시나리오 내 권한을 관리할 수 있습니다. 자세한 내용을 보려면 ACL 기반 액세스 정책(버킷 및 개체 ACL) 사용 시점을 참고하세요.

Amazon S3 ACL을 사용하면 READ, WRITE, READ_ACP, WRITE_ACP, and FULL_CONTROL 권한 집합만 정의할 수 있습니다. 계정 하나 또는 사전 정의된 Amazon S3 그룹 중 하나만 Amazon S3 ACL의 피부여자로 사용할 수 있습니다. 계정의 이메일 주소 또는 정규 사용자 ID를 지정하면 ACL이 피부여자 계정의 모든 ID에 적용됩니다. 예를 들어 ACL을 사용하여 개별 IAM 사용자 또는 역할의 액세스를 제한할 수 없습니다. 또한 동일한 접두사를 공유하는 여러 개체에 ACL을 적용할 수 없습니다.

참고: 버킷 소유자는 ACL 피부여자가 업로드한 개체를 완전히 제어하지 못할 수 있습니다. 이는 ACL이 승인하는 S3 작업 조건을 ACL이 지원하지 않기 때문입니다.

버킷 및 개체 ACL을 사용하여 S3 버킷 액세스를 관리하려면 다음 단계를 완료하세요.

  1. 계정 B에서 IAM 역할 또는 사용자를 생성합니다.
  2. 필요한 Amazon S3 작업을 실행할 수 있는 역할 또는 사용자 권한을 부여합니다. **PutObject ** 및 GetObject를 호출하는 사용자는 리소스 기반 정책 및 IAM 정책 섹션에 안내된 권한 목록을 가지고 있어야 합니다.
  3. 계정 B에 대해 최소 WRITE 권한을 포함하도록 버킷 ACL을 구성합니다. 이렇게 하면 계정 B IAM 역할이나 사용자가 계정 A가 소유한 버킷에 개체를 업로드할 수 있습니다.
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> WRITE </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    참고: CanonicalUserID를 찾으려면 AWS 계정 정규 사용자 ID 찾기를 참고하세요.
  4. 계정 B에 최소 읽기 권한을 포함하도록 개체 ACL을 구성합니다. 이렇게 하면 계정 B의 IAM 역할이나 사용자가 계정 A가 소유한 버킷에서 개체를 다운로드할 수 있습니다.
    ...<AccessControlPolicy>
      <Owner>
        <ID> AccountACanonicalUserID </ID>
        <DisplayName> AccountADisplayName </DisplayName>
      </Owner>
      <AccessControlList>
    ...
        <Grant>
          <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID> AccountBCanonicalUserID </ID>
            <DisplayName> AccountBDisplayName </DisplayName>
          </Grantee>
          <Permission> READ </Permission>
        </Grant>
        ...
      </AccessControlList>
    </AccessControlPolicy>
    ACL 권한은 ACL이 적용되는 S3 리소스, 버킷, 또는 개체에 따라 다릅니다. 자세한 내용을 보려면 액세스 제어 목록(ACL) 개요를 참고하세요. 버킷을 생성하거나 기존 버킷에 개체를 업로드할 때 버킷 및 개체 ACL을 구성하세요. 자세한 내용을 보려면 ACL 구성을 참고하세요.

크로스 계정 IAM 역할

모든 AWS 서비스가 리소스 기반 정책을 지원하는 것은 아닙니다. 여러 서비스의 크로스 계정 액세스를 제공할 때 크로스 계정 IAM 역할을 사용하여 권한 관리를 중앙 집중화하세요. 이 방법을 사용하면 다른 계정이나 AWS 서비스가 소유하거나 업로드한 개체에 크로스 계정 액세스가 가능합니다. 크로스 계정 IAM 역할을 사용하지 않는 경우 개체 ACL을 수정해야 합니다. 자세한 내용을 보려면 Amazon S3가 개체 작업 요청을 승인하는 방법을 참고하세요.

크로스 계정 IAM 역할을 사용하여 S3 버킷 액세스를 관리하려면 다음 단계를 완료하세요.

  1. 계정 A에서 IAM 역할을 생성합니다.
  2. 필요한 S3 작업을 수행할 수 있는 권한을 역할에 부여합니다. 역할의 신뢰 정책에서 계정 B의 역할이나 사용자에게 계정 A의 역할을 맡을 수 있는 권한을 부여합니다.
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    참고: 역할을 맡을 수 있는 보안 주체와 역할을 맡을 수 있는 시기를 정의하는 신뢰 정책이 IAM 역할에 있어야 합니다. IAM 역할에는 역할을 맡은 보안 주체가 실행할 수 있는 권한과 이들이 사용하는 리소스를 정의하는 여러 권한 정책이 있을 수 있습니다.
    create-role AWS CLI 명령을 실행하여 신뢰 정책으로 역할을 생성할 수도 있습니다.
    다음 액세스 정책은 이 역할을 맡은 사용자가 Amazon S3 콘솔을 통해 프로그래밍 방식으로 개체를 다운로드하고 업로드할 수 있도록 허용합니다. 자세한 내용을 보려면 Amazon S3 버킷에서 특정 폴더의 액세스 권한을 사용자에게 부여하려면 어떻게 해야 하나요?를 참고하세요.
    **참고:**프로그래밍 방식 액세스만 필요한 경우 정책에서 처음 두 명령문을 제거할 수 있습니다.
    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "s3:ListAllMyBuckets"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::*"
                ]
            },
            {
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::AccountABucketName"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::AccountABucketName/*"
            }
        ]
    }
    또는 create-policy AWS CLI 명령을 실행하여 IAM 자격 증명 기반 정책을 생성합니다.
  3. 계정 B에 있는 IAM 역할이나 사용자에게 계정 A에서 생성한 IAM 역할을 사용할 수 있는 권한을 부여하세요. IAM 사용자나 역할 권한 정책에 다음 예시 정책을 추가해야 합니다.
    {  "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::AccountA:role/AccountARole"
      }
    }
    또는 create-policy AWS CLI 명령을 실행하여 IAM 자격 증명 기반 정책을 생성합니다.
  4. 계정 B의 역할에서 계정 A의 역할을 맡아 계정 B의 IAM ID로 필요한 S3 작업을 할 수 있도록 합니다. 자세한 내용을 보려면 역할 전환(콘솔)을 참고하세요.
    참고: 계정 A에서 IAM 역할을 맡으면 Amazon S3가 액세스 정책을 기반으로 작업을 결정합니다. IAM 역할은 계정 A의 로컬 IAM ID가 호출한 API 호출로 작동합니다. 크로스 계정 액세스를 위한 버킷 정책이나 ACL은 필요하지 않습니다. 자세한 내용을 보려면 Amazon S3 작업을 참고하세요.

관련 정보

Amazon S3에 사용되는 작업, 리소스, 조건 키

버킷 정책 예제

액세스 정책 가이드라인

Amazon RDS for Microsoft SQL Server에서 크로스 계정 네이티브 백업 및 복원을 위한 설정

사용자 및 역할 정책 예제

AWS 공식
AWS 공식업데이트됨 4달 전