AWS DataSync를 사용하여 교차 계정 Amazon S3 위치에서 데이터를 송수신하려면 어떻게 해야 하나요?

4분 분량
0

AWS DataSync를 사용하여 교차 계정 Amazon Simple Storage(Amazon S3) 버킷에서 데이터를 송수신하고 싶습니다.

간략한 설명

교차 계정 데이터 전송에 DataSync를 사용하려면 다음을 수행합니다.

  1. AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 사용하여 DataSync에서 교차 계정 Amazon S3 위치를 생성합니다.
  2. 소스 버킷에서 대상 버킷으로 데이터를 전송하는 DataSync 작업을 생성합니다.

DataSync를 사용하여 서로 다른 S3 계정이 소유한 버킷 간에 데이터를 전송할 때 다음 제한 사항에 유의하세요.

  • DataSync는 데이터를 교차 계정 대상 버킷으로 전송할 때 bucket-owner-full-control 액세스 제어 목록(ACL)을 적용하지 않습니다. 이로 인해 대상 버킷의 객체 소유권 문제가 발생합니다.
  • 교차 계정 S3 위치에서는 동일한 리전의 교차 계정 버킷만 지원됩니다. 교차 계정 및 교차 리전 S3 위치를 사용하려고 시도하면 GetBucketLocation 또는 S3 엔드포인트에 연결할 수 없음(Unable to connect to S3 endpoint) 오류가 발생합니다. 따라서 소스 계정에서 작업을 생성한 경우 대상 버킷과 동일한 리전에 작업을 생성해야 합니다. 대상 계정에서 작업을 생성한 경우 소스 버킷과 동일한 리전에 작업을 생성해야 합니다.
  • 교차 계정 전달 역할을 사용하여 교차 계정 S3 위치에 액세스할 수 없습니다.

위의 제한 사항을 해결하여 소스에서 데이터를 가져오도록 대상 계정에서 DataSync 태스크를 구성할 수 있습니다.

해결 방법

필요한 검사 수행

소스 계정에는 교차 계정 소스 S3 버킷이 있고 대상 계정에는 대상 S3 버킷과 DataSync 태스크가 있다고 가정합니다. 다음 검사를 수행합니다.

AWS Identity and Management(IAM) 사용자/역할: 다음 IAM 사용자 또는 역할에 필수 권한이 있는지 확인합니다.

  • 교차 계정 S3 위치를 생성하는 데 사용하는 사용자 또는 역할
  • S3 위치에 할당한 역할

소스 버킷 정책: 소스 버킷 정책에서 대상 계정의 IAM 사용자/역할 모두 버킷에 액세스할 수 있도록 허용해야 합니다. 다음 정책 예제에서는 소스 버킷에 대한 액세스 권한을 IAM 사용자/역할 모두에 부여합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObjectTagging",
        "s3:GetObjectTagging",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket/*"
      ]
    }
  ]
}

이전 정책에서 다음 값으로 바꾸어야 합니다.

  • example-source-bucket을 소스 버킷 이름으로 바꾸기
  • 1111222233334444를 대상 계정의 계정 ID로 바꾸기
  • datasync-config-role을 DataSync 구성에 구성된 IAM 역할로 바꾸기(DataSync에서 소스 S3 위치 및 태스크 생성)
    참고: IAM 사용자를 사용할 수도 있습니다. 이 문서에서는 IAM 역할의 사용을 고려합니다.
  • dataysnc-transfer-role을 소스 S3 위치에서 생성할 때 지정한 IAM 역할로 바꾸기
    참고: DataSync는 이 역할을 사용하여 교차 계정 데이터에 액세스합니다.

대상 S3 위치:

AWS CLI 또는 SDK를 사용하여 DataSync에서 교차 계정 소스 S3 위치 생성

참고: 교차 계정 S3 위치 생성은 AWS 관리 콘솔에서 지원되지 않습니다.

다음 방법 중 하나를 사용하여 교차 계정 S3 위치를 생성할 수 있습니다.

  • 구성 JSON 파일을 사용합니다.
  • AWS CLI 명령에서 옵션을 사용합니다.

구성 JSON 파일 사용

1.    다음 파라미터를 사용하여 교차 계정 S3 위치에 대한 구성 JSON 파일 input.template을 생성합니다.

{
  "Subdirectory": "",
  "S3BucketArn": "arn:aws:s3:::[Source bucket]",
  "S3StorageClass": "STANDARD",
  "S3Config": {
    "BucketAccessRoleArn": "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
  }
}

2.    다음 AWS CLI 명령을 실행하여 S3 위치를 생성합니다.

aws datasync create-location-s3 --cli-input-json file://input.template --region example-DataSync-Region

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인합니다.

자세한 내용은 create-location-s3을 참조하세요.

S3 위치가 생성되면 다음과 같은 출력이 표시됩니다.

{
"LocationArn": "arn:aws:datasync:example-Region:123456789012:location/loc-0f8xxxxxxxxe4821"
}

123456789012는 소스 계정의 계정 ID입니다.

AWS CLI 명령에서 옵션 사용

적절한 옵션과 함께 다음 AWS CLI 명령을 실행합니다.

aws datasync create-location-s3 --s3-bucket-arn arn:aws:s3:::example-source-bucket --s3-storage-class STANDARD --s3-config BucketAccessRoleArn="arn:aws:iam::1111222233334444:role/datasync-transfer-role" --region example-DataSync-Region

명령에서 다음과 같이 값을 바꿉니다.

  • example-source-bucket을 소스 버킷 이름으로 바꿉니다.
  • example-DataSync-Region을 DataSync 태스크를 생성할 리전으로 바꿉니다.

DataSync 태스크 생성

DataSync 태스크를 구성하고 DataSync 콘솔에서 태스크를 시작합니다. 자세한 내용은 AWS DataSync 작업 시작하기를 참조하세요.

알려진 오류 및 해결 방법

오류: DataSync 위치 S3 생성 중 오류 발생: InvalidRequestException: 현재 DataSync를 사용하는 xxx 리전에서 버킷을 제공하세요

이 오류가 발생하면 버킷 및 IAM 정책에 다음과 같은 필수 권한이 포함되어 있는지 확인합니다.

"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
]

교차 계정 버킷을 사용할 때 이 오류가 발생하면 버킷이 DataSync 태스크와 동일한 리전에 있는지 확인하세요

S3 객체 소유권 문제

DataSync는 교차 계정 버킷을 대상 위치로 사용하는 것을 지원하지 않습니다. 따라서 ACL bucket-owner-full-control을 사용할 수 없습니다. DataSync 태스크가 소스 버킷 계정에서 실행되는 경우 대상 버킷 계정에 업로드된 객체에 객체 소유권 문제가 있을 수 있습니다. 대상 버킷에 ACL을 사용하는 객체가 없는 경우 이 문제를 해결하려면 대상 버킷에서 ACL을 사용 중지하는 것이 좋습니다. 자세한 내용은 버킷에 대한 객체 소유권 제어 및 ACL 사용 중지를 참조하세요. 그렇지 않으면 소스에서 데이터를 가져오도록 대상 계정에서 DataSync 태스크를 구성하는 것이 모범 사례입니다.


관련 정보

AWS DataSync를 사용하여 Amazon S3 버킷 사이에서 데이터를 마이그레이션하는 방법

AWS 공식
AWS 공식업데이트됨 일 년 전