소스에 대한 액세스 구성: Amazon S3

다음 두 가지 방법 중 하나를 사용하여 Amazon S3 버킷에 대한 액세스를 설정할 수 있습니다.

지원되는 리전

Storage Transfer Service는 다음과 같은 Amazon S3 리전에서 데이터를 전송할 수 있습니다. af-south-1, ap-east-1, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-south-2, ap-southeast-1, ap-southeast-2, ap-southeast-3, ca-central-1, eu-central-1, eu-central-2, eu-north-1, eu-south-1, eu-south-2, eu-west-1, eu-west-2, eu-west-3, me-central-1, me-south-1, sa-east-1, us-east-1 , us-east-2, us-west-1, us-west-2

필수 권한

Storage Transfer Service를 사용하여 데이터를 Amazon S3 버킷에서 이동하려면 사용자 계정이나 제휴 ID 역할에 버킷에 대한 적절한 권한이 있어야 합니다.

권한 설명 사용
s3:ListBucket Storage Transfer Service가 버킷의 객체를 나열할 수 있게 합니다. 항상 필요합니다.
s3:GetObject Storage Transfer Service가 버킷의 객체를 읽을 수 있게 합니다. 모든 객체의 현재 버전을 전송하는 경우 필수 항목입니다. manifest가 객체 버전을 지정하는 경우 s3:GetObjectVersion을 대신 사용합니다.
s3:GetObjectVersion Storage Transfer Service가 버킷에 있는 특정 버전의 객체를 읽을 수 있게 합니다. manifest가 객체 버전을 지정하는 경우 필수입니다. 그렇지 않은 경우 s3:GetObject를 사용하세요.
s3:DeleteObject Storage Transfer Service가 버킷의 개체를 삭제할 수 있게 합니다. deleteObjectsFromSourceAfterTransfertrue로 설정한 경우에 필요합니다.

액세스 사용자 인증 정보를 사용하여 인증

액세스 키 ID와 보안 비밀 키를 사용하여 AWS에 인증하려면 다음 안내를 따르세요.

  1. 쉽게 알아볼 수 있는 이름(예: transfer-user)을 지정하여 AWS Identity and Access Management(AWS IAM) 사용자를 만듭니다.

  2. AWS Access type(AWS 액세스 유형)에서 Access key(액세스 키) - programmatic access(프로그래매틱 액세스)를 선택합니다.

  3. 사용자에게 다음 역할 중 하나를 부여합니다.

    • AmazonS3ReadOnlyAccess: 소스에 대한 읽기 전용 액세스 권한을 제공합니다. 이 역할은 전송을 허용하지만 전송이 완료된 후 소스에서의 객체 삭제를 지원하지 않습니다.
    • AmazonS3FullAccess: 소스에서 객체를 삭제하도록 전송을 구성한 경우에 부여합니다.
    • 위의 필수 권한 표에서 적절한 권한이 있는 커스텀 역할을 부여합니다. 최소 권한의 JSON에 대한 예시는 다음과 같습니다.

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
  4. 사용자가 성공적으로 생성되면 액세스 키 ID보안 비밀 액세스 키를 기록해 둡니다.

액세스 키 ID 및 보안 비밀 액세스 키를 Storage Transfer Service에 전달하는 방법은 전송을 시작하는 데 사용하는 인터페이스에 따라 다릅니다.

Cloud 콘솔

전송 작업 생성 양식에 값을 직접 입력합니다.

시작하려면 전송 만들기를 참조하세요.

gcloud CLI

다음 형식으로 JSON 파일을 만듭니다.

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

source-creds-file 플래그를 사용하여 파일 위치를 gcloud transfer jobs create 명령어에 전달합니다.

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

REST API

transferSpec 객체에는 키 정보가 awsS3DataSource 객체의 일부로 포함되어야 합니다.

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

클라이언트 라이브러리

전송 만들기 페이지의 예시를 참조하세요.

Secret Manager에 액세스 사용자 인증 정보 저장

Secret Manager는 비밀번호와 같은 민감한 정보를 저장하고 관리하는 보안 서비스입니다. 보안 비밀을 보호하기 위해 강력한 암호화, 역할 기반 액세스 제어, 감사 로깅을 사용합니다.

Storage Transfer Service는 Secret Manager를 활용해서 AWS 액세스 사용자 인증 정보를 보호할 수 있습니다. 사용자 인증 정보를 Secret Manager에 로드한 후 보안 비밀 리소스 이름을 Storage Transfer Service에 전달합니다.

API 사용 설정

Enable the Secret Manager API.

Enable the API

추가 권한 구성

사용자 권한

보안 비밀을 만드는 사용자는 다음 역할이 필요합니다.

  • Secret Manager 관리자(roles/secretmanager.admin)

역할 부여 방법 알아보기

서비스 에이전트 권한

Storage Transfer Service 서비스 에이전트에는 다음 IAM 역할이 필요합니다.

  • Secret Manager 보안 비밀 접근자(roles/secretmanager.secretAccessor)

서비스 에이전트에 다음 역할을 부여합니다.

Cloud 콘솔

  1. 안내에 따라 서비스 에이전트 이메일 검색합니다.

  2. Google Cloud 콘솔의 IAM 페이지로 이동합니다.

    IAM으로 이동

  3. 액세스 권한 부여를 클릭합니다.

  4. 새 주 구성원 텍스트 상자에 서비스 에이전트 이메일을 입력합니다.

  5. 역할 선택 드롭다운에서 Secret Manager 보안 비밀 접근자를 검색하고 선택합니다.

  6. 저장을 클릭합니다.

gcloud

gcloud projects add-iam-policy-binding 명령어를 사용해서 서비스 에이전트에 IAM 역할을 추가합니다.

  1. 안내에 따라 서비스 에이전트 이메일 검색합니다.

  2. 명령줄에서 다음 명령어를 입력합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

보안 비밀 만들기

Secret Manager로 보안 비밀 만들기

Cloud 콘솔

  1. Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.

    Secret Manager로 이동

  2. 보안 비밀 만들기를 클릭합니다.

  3. 이름을 입력합니다.

  4. 보안 비밀 값 텍스트 상자에 다음 형식으로 사용자 인증 정보를 입력합니다.

    {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    
  5. 보안 비밀 만들기를 클릭합니다.

  6. 보안 비밀이 생성되면 보안 비밀의 전체 리소스 이름을 기록해 둡니다.

    1. 개요 탭을 선택합니다.

    2. 리소스 ID 값을 복사합니다. 다음 형식을 사용합니다.

      projects/1234567890/secrets/SECRET_NAME

gcloud

gcloud 명령줄 도구를 사용해서 새 보안 비밀을 만들려면 JSON 형식의 사용자 인증 정보를 gcloud secrets create 명령어에 전달합니다.

printf '{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

보안 비밀의 전체 리소스 이름을 검색합니다.

gcloud secrets describe SECRET_NAME

응답에서 name 값을 기록해 둡니다. 다음 형식을 사용합니다.

projects/1234567890/secrets/SECRET_NAME

보안 비밀 만들기 및 관리에 대한 자세한 내용은 Secret Manager 문서를 참조하세요.

보안 비밀을 작업 만들기 명령어에 전달

Storage Transfer Service와 함께 Secret Manager를 사용하려면 REST API를 사용하여 전송 작업을 만들어야 합니다.

Secret Manager 리소스 이름을 transferSpec.awsS3DataSource.credentialsSecret 필드의 값으로 전달합니다.

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_BUCKET_NAME",
          "credentialsSecret": "SECRET_RESOURCE_ID",
      },
      "gcsDataSink": {
          "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
      }
  }
}

제휴 ID를 사용한 인증

제휴 ID를 사용하여 AWS에 인증하려면 다음 안내를 따르세요.

  1. AWS에서 새 IAM 역할을 만듭니다.

  2. 신뢰할 수 있는 항목 유형으로 Custom trust policy(커스텀 트러스트 정책)를 선택합니다.

  3. 다음 트러스트 정책을 복사하여 붙여넣습니다.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. SUBJECT_ID를 Storage Transfer Service 사용을 시작할 때 자동으로 생성되는 Google 관리 서비스 계정의 subjectID로 바꿉니다. subjectID를 가져오려면 다음 안내를 따르세요.

    1. googleServiceAccounts.get 참조 페이지로 이동하세요.

      이 메서드 사용해 보기라는 제목의 대화형 패널이 열립니다.

    2. 패널의 요청 매개변수프로젝트 ID를 입력합니다. 여기에서 지정하는 프로젝트는 Storage Transfer Service를 관리하는 데 사용하는 프로젝트여야 합니다.

    3. 실행을 클릭합니다. subjectId가 응답에 포함됩니다.

  5. 다음 권한 정책 중 하나를 역할에 부여합니다.

    • AmazonS3ReadOnlyAccess는 소스에 대한 읽기 전용 액세스 권한을 제공합니다. 이 역할은 전송을 허용하지만 전송이 완료된 후 소스에서의 객체 삭제를 지원하지 않습니다.
    • AmazonS3FullAccess: 소스에서 객체를 삭제하도록 전송을 구성한 경우에 부여합니다.
    • 위의 필수 권한 표에서 적절한 권한이 있는 커스텀 역할을 부여합니다. 최소 권한의 JSON에 대한 예시는 다음과 같습니다.

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
  6. 역할에 이름을 지정하고 역할을 만듭니다.

  7. 역할이 생성되면 역할 세부정보를 확인하여 Amazon 리소스 이름(ARN)을 가져옵니다. 이 값을 기록합니다. arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME 형식입니다.

ARN을 Storage Transfer Service로 전달하는 방법은 전송을 시작하는 데 사용하는 인터페이스에 따라 다릅니다.

Cloud 콘솔

전송 작업 생성 양식에 ARN을 직접 입력합니다.

시작하려면 전송 만들기를 참조하세요.

gcloud CLI

다음 형식으로 JSON 파일을 만듭니다.

{
  "roleArn": "ARN"
}

source-creds-file 플래그를 사용하여 파일 위치를 gcloud transfer jobs create 명령어에 전달합니다.

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

REST API

transferSpec 객체에는 ARN이 awsS3DataSource 객체의 일부로 포함되어야 합니다.

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

클라이언트 라이브러리

전송 만들기 페이지의 예시를 참조하세요.

IP 제한사항

AWS 프로젝트에 스토리지 액세스에 대해 IP 제한사항이 사용되는 경우 Storage Transfer Service 작업자가 사용하는 IP 범위를 허용되는 IP 목록에 추가해야 합니다.

이러한 IP 범위는 변경될 수 있기 때문에 현재 값을 영구 주소의 JSON 파일로 게시합니다.

https://www.gstatic.com/storage-transfer-service/ipranges.json

새 범위가 파일에 추가되면 Storage Transfer Service의 요청에 이 범위를 사용하기 전에 최소 7일 이상 기다립니다.

보안 구성을 업데이트된 상태로 유지하기 위해 최소한 매주 이 문서의 데이터를 확인하는 것이 좋습니다. JSON 파일에서 IP 범위를 가져오는 샘플 Python 스크립트의 경우 Virtual Private Cloud 설명서의 이 문서를 참조하세요.

이러한 범위를 허용된 IP로 추가하려면 AWS S3 문서: 특정 IP 주소를 기반으로 액세스 관리에 설명된 대로 버킷 정책의 Condition 필드를 사용합니다.