이 페이지에서는 Amazon Simple Storage Service(Amazon S3)에서 Cloud Storage로 단순 마이그레이션을 완료하는 방법을 설명합니다. 단순 마이그레이션에서는 기존 도구와 라이브러리를 사용하여 Amazon S3에 대한 인증된 REST 요청을 생성하여 인증된 요청을 대신 Cloud Storage에 전송합니다.
Cloud Storage를 처음 사용하며 API를 직접 사용하지 않는 경우 전송 설정 및 관리에 Google Cloud 콘솔을 사용하는 것이 좋습니다. Google Cloud 콘솔은 Amazon S3에서 Cloud Storage로 데이터를 마이그레이션하는 등 브라우저를 사용하여 많은 스토리지 작업을 수행할 수 있는 그래픽 인터페이스를 Cloud Storage에 제공합니다.
Cloud Storage로 Amazon S3 데이터 백업을 저장하려면 이벤트 기반 전송을 사용합니다. 이렇게 하면 Amazon S3 이벤트 알림을 사용하여 Cloud Storage 버킷을 자동으로 Amazon S3 소스와 동기화된 상태로 유지합니다.
단순 마이그레이션 시나리오에서 Amazon S3에서 Cloud Storage로 마이그레이션
Cloud Storage에 요청을 전송하려면 다음 단계를 완료해야 합니다.
- 기본 Google Cloud 프로젝트를 설정합니다.
- HMAC(해시 기반 메시지 인증 코드) 키를 가져옵니다.
기존 도구나 라이브러리에서 다음과 같이 변경합니다.
- Cloud Storage XML API 요청 엔드포인트를 사용하도록 요청 엔드포인트를 변경합니다.
- Amazon Web Services(AWS) 액세스 및 보안 비밀 키를 해당 Cloud Storage 액세스 ID 및 보안 비밀 키(통칭하여 Cloud Storage HMAC 키)로 바꿉니다.
x-amz-
헤더에 지원되는 Cloud Storage 값을 사용합니다. 예를 들어x-amz-storage-class
는 지원되는 Cloud Storage의 스토리지 클래스 중 하나를 사용해야 합니다.단순 마이그레이션 시나리오에서 Cloud Storage XML API를 사용할 경우
Authorization
헤더에AWS
서명 식별자를 지정하여 요청에x-amz-*
헤더와 Amazon S3 ACL XML 구문이 포함된다고 Cloud Storage에 알릴 수 있습니다. Cloud Storage는 헤더 표에 나열된x-goog-*
와 같은x-amz-*
를 갖는 헤더를 처리하고x-amz-decoded-content-length
헤더를 처리합니다.
변경한 후에 기존 도구와 라이브러리를 사용하여 HMAC 요청을 Cloud Storage에 보낼 수 있습니다.
예를 들어 다음은 Amazon S3 SDK를 사용하여 Cloud Storage 버킷을 나열하는 방법을 보여주는 샘플입니다.
Go
자세한 내용은 Cloud Storage Go API 참고 문서를 확인하세요.
Cloud Storage에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Java
자세한 내용은 Cloud Storage Java API 참조 문서를 확인하세요.
Cloud Storage에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
Python
자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.
Cloud Storage에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 클라이언트 라이브러리의 인증 설정을 참조하세요.
기본 프로젝트 설정
단순 마이그레이션 시나리오에서 Cloud Storage를 사용하려면 Cloud Storage에서 GET
서비스 또는 PUT
버킷과 같은 특정 작업을 수행하는 데 사용하는 기본 프로젝트를 설정하는 것이 좋습니다. 기본 프로젝트를 설정하지 않으면 일부 요청에서 프로젝트 헤더를 지정해야 합니다.
기본 프로젝트를 설정하려면 다음 단계를 따르세요.
- Google Cloud Console에서 Cloud Storage 설정 페이지를 엽니다.
- 상호 운용성 탭을 선택합니다.
상호 운용이 가능한 액세스용 기본 프로젝트 섹션에 있는 기본 프로젝트로 PROJECT-ID 설정을 클릭합니다.
프로젝트가 이미 기본 프로젝트이면 상호 운용이 가능한 액세스를 위한 기본 프로젝트는 PROJECT-ID입니다라는 메시지가 표시됩니다.
이 프로젝트가 이제 기본 프로젝트입니다. 다른 프로젝트를 선택하고 이러한 단계에 따라 언제든지 기본 프로젝트를 변경할 수 있습니다.
대안으로 프로젝트 헤더 지정
기본 프로젝트를 설정하는 대신, 또는 그와는 별도로 프로젝트를 지정해야 하는 개별 요청에서 x-amz-project-id
헤더를 사용할 수 있습니다.
x-amz-project-id
를 사용하는 요청에서는 기존 기본 프로젝트가 있더라도 헤더에 지정된 프로젝트를 사용합니다.
x-amz-project-id
헤더는 다음과 같은 경우에 유용합니다.
- 여러 프로젝트로 작업 중입니다.
- 서비스 계정이 상위 프로젝트를 기본 프로젝트로 사용하기 때문에 다른 프로젝트와 연결된 서비스 계정으로 요청을 실행합니다.
Amazon S3에는 프로젝트가 없으므로 사용하는 도구 또는 클라이언트 라이브러리에 따라서는 x-amz-project-id
헤더를 지정하지 못할 수도 있습니다. 이 경우에는 기본 프로젝트를 설정해야 합니다.
HMAC 키 사용
단순 마이그레이션 시나리오에서 Cloud Storage XML API를 사용하려면 사용자 인증 정보에 Cloud Storage 해시 기반 메시지 인증 코드(HMAC) 키를 사용합니다. 일반적으로 서비스 계정과 연결된 HMAC 키를 만들어야 하지만 대안으로 사용자 계정과 연결된 키를 사용할 수도 있습니다.
단순 마이그레이션 시나리오에서 인증
Authorization 헤더 사용
인증이 필요한 단순 마이그레이션 시나리오 작업의 경우 Amazon S3에 대한 요청과 마찬가지로 Authorization
요청 헤더를 포함합니다. Amazon S3 요청의 Authorization
헤더 문법은 다음과 같습니다.
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
단순 마이그레이션 시나리오에서는 Cloud Storage HMAC 액세스 ID를 사용하도록 헤더만 변경하여 연결된 Signature
가 Cloud Storage HMAC 보안 비밀 키로 계산되도록 합니다.
Authorization: ALGORITHM Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Authorization
헤더 부분은 다음과 같습니다.
ALGORITHM: 사용하고 있는 서명 알고리즘 및 버전입니다.
AWS4-HMAC-SHA256
을 사용하면 현재 HMAC V4 서명을 사용하고 있으며x-amz-*
헤더를 보내려고 함을 나타냅니다. 또한GOOG4-HMAC-SHA256
을 사용하면 현재 HMAC V4 서명을 사용하고 있으며x-goog-*
헤더를 보내려고 함을 나타낼 수 있고,GOOG4-RSA-SHA256
을 사용하면 RSA V4 서명을 사용하고 있으며x-goog-*
헤더를 보내려고 함을 나타낼 수 있습니다.GOOG-ACCESS-ID: 액세스 ID는 요청을 실행하고 서명하는 항목을 식별합니다. 단순 마이그레이션에서는 Amazon S3에 액세스하는 데 사용하는 Amazon Web Service(AWS) 액세스 키 ID를 Cloud Storage HMAC 액세스 ID로 바꿉니다. Cloud Storage HMAC 액세스 ID는
GOOG
로 시작합니다.CREDENTIAL_SCOPE: 서명에 정의된 사용자 인증 정보 범위입니다. 단순 마이그레이션에서는 ALGORITHM 값에
AWS4-HMAC-SHA256
을 사용하는 경우 사용자 인증 정보 범위를 변경할 필요가 없습니다.SIGNED_HEADERS: 요청에 서명하기 위해 포함되어야 하는 헤더 이름의 세미콜론 구분 목록입니다. 모든 헤더는 소문자여야 하고 문자 코드를 기준으로 정렬되어야 합니다.
Amazon S3 형식의 서명된 헤더 문자열의 예시는 다음과 같습니다.
content-type;host;x-amz-date
단순 이전에서는 서명된 헤더 문자열을 변경할 필요가 없습니다.
SIGNATURE: 요청을 인증할 수 있는 서명입니다. 단순 마이그레이션에서는 AWS 액세스 키 정보를 이에 상응하는 Cloud Storage HMAC 키 정보로 바꿉니다.
샘플 인증 요청
다음 예시에서는 /europe/france/paris.jpg
라는 객체를 my-travel-maps
라는 버킷에 업로드하고 미리 정의된 ACL public-read
를 적용하며 검토자용 커스텀 메타데이터 헤더를 정의합니다. 다음은 Amazon S3의 버킷에 대한 요청입니다.
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.s3.amazonaws.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
다음은 Cloud Storage의 버킷에 대한 요청입니다.
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
다음은 이 요청에 생성된 해당 정규 요청입니다.
PUT /europe/france/paris.jpg content-length:888814 content-type:image/jpg host:my-travel-maps.storage.googleapis.com x-amz-acl:public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer:joe,jane content-length,content-type,host,x-amz-acl,x-amz-date,x-amz-meta-reviewer 82e3da8b3f35989512e8d428add7eca73ab0e5f36586e66fbad8e1051343cbd2
다음은 이 요청에 생성된 해당 서명할 문자열입니다.
AWS4-HMAC-SHA256 20190311T192918Z 20190311/us-east-1/s3/aws4_request 73918a5ff373d7a03e406fbf9ea35675396b06fca2af76c27a5c451fa783ef65
이 요청은 Content-MD5 헤더를 제공하지 않으므로 메시지의 두 번째 줄에 빈 문자열이 표시됩니다.
단순 마이그레이션 시나리오에서 액세스 제어
단순 마이그레이션을 지원하기 위해 Cloud Storage는 Amazon S3에서 생성된 ACL을 허용합니다. 단순 마이그레이션 시나리오에서는 서명 식별자로 AWS
를 사용하여, Amazon S3 ACL XML 문법을 사용하는 ACL 문법을 예상할 것을 Cloud Storage에 알립니다. 사용하는 Amazon S3 ACL이 Cloud Storage ACL 모델에 매핑되는지 확인해야 합니다. 예를 들어 도구와 라이브러리에서 Amazon S3의 ACL 문법을 사용하여 버킷에 WRITE
권한을 부여하는 경우 버킷에도 READ
권한을 부여해야 합니다. 이는 Cloud Storage 권한이 공통적이기 때문입니다. Cloud Storage 문법을 사용하여 WRITE
권한을 부여할 때 WRITE
권한과 READ
권한을 모두 지정할 필요는 없습니다.
Cloud Storage는 다음 시나리오에서 Amazon S3 ACL 문법을 지원합니다.
GET
객체 또는GET
버킷 요청과 같이 ACL 검색을 위한 Cloud Storage 요청에서 Cloud Storage는 Amazon S3 ACL 문법을 반환합니다.PUT
객체 또는PUT
버킷 요청과 같이 ACL 적용을 위한 Cloud Storage 요청에서 Cloud Storage는 Amazon S3 ACL 문법을 받을 것으로 예상합니다.
단순 마이그레이션 시나리오의 Authorization
헤더는 Google 액세스 ID로 서명 식별자에 AWS
를 사용합니다.
Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
다음 예시에서는 객체의 ACL 반환을 위한 Cloud Storage에 대한 GET
요청을 보여줍니다.
GET europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534
이 요청의 응답에는 Amazon S3 ACL 문법을 사용하는 ACL이 포함됩니다.
<?xml version='1.0' encoding='UTF-8'?> <AccessControlPolicy> <Owner> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490 </ID> <DisplayName>OwnerName</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='CanonicalUser'> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490</ID> <DisplayName>UserName</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
다음 예시에서는 객체의 ACL 설정을 위한 Cloud Storage에 대한 PUT
요청을 보여줍니다. 또한 Amazon S3 ACL 문법을 포함한 요청 본문을 보여줍니다.
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml Content-Length: 337 X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534 <?xml version='1.0' encoding='utf-8'?> <AccessControlPolicy> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
마지막으로 단순 마이그레이션 시나리오에서는 Authorization
헤더에 GOOG1
서명 식별자를 사용할 수도 있습니다. 이 경우 Cloud Storage ACL 문법을 사용하고 모든 x-amz-*
헤더가 x-goog-*
로 변경되는지 확인해야 합니다. 가능하면 Cloud Storage의 모든 이점을 사용할 수 있도록 전체 마이그레이션을 선택하는 것이 좋습니다.
Amazon S3와의 XML API 호환성 지원
XML API 상호 운용성에 대한 토론은 google-cloud-storage 태그를 사용하는 Stack Overflow를 참조하세요.
다음 단계
- Amazon S3에서 마이그레이션 계획
- Storage Transfer Service를 사용하여 Amazon S3 및 Microsoft Azure Blob Storage와 같은 외부 소스에서 Cloud Storage로 데이터 전송
- Cloud Storage 버킷을 Amazon S3와 동기화된 상태로 유지하기 위해 Amazon S3 이벤트 알림을 사용하는 이벤트 기반 전송 만들기