내용으로 건너뛰기

Amazon S3 버킷에 있는 객체에 교차 계정 액세스를 제공하려면 어떻게 해야 합니까?

7분 분량
0

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

간략한 설명

계정 관리자는 다른 계정의 사용자에게 계정에서 소유한 객체에 대한 교차 계정 액세스 권한을 부여할 수 있습니다.

전체 관리 액세스 권한이 필요하지 않은 특정 S3 리소스에 권한을 부여할 수 있습니다.

다음 방법 중 하나를 사용하여 객체에 교차 계정 액세스 권한을 부여합니다.

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

요청자가 IAM 역할 위탁자인 경우 위탁자를 소유한 계정은 IAM 정책을 사용하여 S3에 버킷 권한을 부여해야 합니다. 사용 사례에 따라 버킷 소유자도 버킷 정책 또는 ACL을 사용하여 권한을 부여해야 합니다. 액세스 권한을 부여한 이후 교차 계정 버킷에 프로그래밍 방식으로 액세스하는 것은 계정 버킷에 액세스 하는 방법과 동일합니다.

Amazon S3 Access Points 또는 AWS Key Management Service(AWS KMS)를 통한 교차 계정 액세스의 경우 추가 구성이 필요합니다. 자세한 내용은 교차 계정 사용자가 AWS KMS 고객 관리형 키로 암호화한 내 S3 객체에 액세스하려고 할 때 Access Denied 오류가 발생하는 이유는 무엇입니까?를 참조하십시오.

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

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

다음 절차에서 계정 A는 사용자 계정이고, 계정 B는 객체 액세스 권한을 부여할 대상 계정입니다.

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

교차 계정 액세스를 관리하고 S3 객체의 권한을 감사하려면 리소스 기반 버킷 정책을 사용하십시오.

버킷 수준에서 위탁자, 리소스작업 요소를 정의하는 버킷 정책을 적용합니다. 버킷 수준에서 버킷 정책을 적용할 때 버킷 내 다양한 객체의 액세스를 정의할 수 있습니다. 또한 버킷 정책을 검토하여 누가 S3 버킷의 객체에 액세스할 수 있는지 확인할 수 있습니다.

버킷 정책을 사용하여 S3 버킷 액세스를 관리하려면 다음 단계를 완료하십시오.

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

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

  3. 계정 B의 IAM 사용자 또는 역할에 GetObjectPutObject 권한을 부여합니다. 또한 버킷 소유자에게 객체 권한을 부여하는 PutObjectAcl을 호출할 수 있는 권한을 IAM 사용자 또는 역할에 부여합니다.

    {
        "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 버킷의 특정 폴더에 대한 액세스 권한을 사용자에게 부여하려면 어떻게 해야 합니까?를 참조하십시오. 또는 ](https://repost.aws/ko/knowledge-center/s3-folder-user-access)create-policy[ AWS CLI 명령을 실행하여 IAM 자격 증명 기반 정책을 생성할 수도 있습니다.

  4. 계정 A에 대한 버킷 정책을 구성하여 계정 B에서 생성한 IAM 사용자 또는 역할에 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를 실행하여 S3 버킷 정책을 생성할 수 있습니다.

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

IAM 정책 및 리소스 기반 ACL

또한 특정 시나리오 내에서 객체 ACL을 사용하여 권한을 관리할 수 있습니다.

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

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

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

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

  2. 필요한 Amazon S3 작업을 실행할 수 있는 사용자 또는 역할 권한을 부여합니다. **PutObject ** 및 GetObject를 호출하는 사용자는 리소스 기반 정책 및 IAM 정책 섹션에 안내된 권한 목록을 가지고 있어야 합니다.

  3. 계정 B에 대해 최소 WRITE 권한을 포함하도록 버킷 ACL을 구성합니다. WRITE 권한은 계정 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에 최소 READ 권한을 포함하도록 객체 ACL을 구성합니다. READ 권한은 계정 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을 구성하십시오.

교차 계정 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 콘솔을 사용하여 프로그래밍 방식으로 객체를 다운로드하고 업로드하도록 허용합니다. 프로그래밍 방식 액세스만 필요한 경우 정책에서 처음 두 명령문을 제거할 수 있습니다.

    {
        "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/*"
            }
        ]
    }

    자세한 내용은 Amazon S3 버킷의 특정 폴더에 대한 액세스 권한을 사용자에게 부여하려면 어떻게 해야 합니까?를 참조하십시오. 또는 ](https://repost.aws/ko/knowledge-center/s3-folder-user-access)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 S3 버킷 정책의 예

Amazon S3의 ID 기반 정책 예제

교차 계정 정책 평가 로직

댓글 없음