서명된 URL

이 페이지에서는 특정 Cloud Storage 리소스에 대한 제한된 시간 동안 액세스 권한을 부여하는 서명된 URL의 개요를 제공합니다. Google 계정이 있는지 여부에 관계없이 서명된 URL을 가진 사람은 누구든지 활성 URL을 사용할 수 있습니다. 서명된 URL을 만드는 방법을 알아보려면 Cloud Storage 도구를 사용한 V4 서명 프로세스자체 프로그램을 사용한 V4 서명 프로세스를 참조하세요. 버킷과 객체에 대한 액세스를 제어하는 다른 방법은 액세스 제어 개요를 참조하세요.

개요

서명된 URL은 요청을 수행하는 데 필요한 제한된 권한과 시간을 제공하는 URL입니다. 서명된 URL은 쿼리 문자열에 인증 정보가 포함되어 있어 사용자 인증 정보가 없는 사용자도 리소스에 대한 특정 작업을 수행할 수 있습니다.

  • 서명된 URL을 생성할 때는 서명된 URL이 수행할 요청에 필요한 권한이 있는 계정을 지정해야 합니다.

    • 대부분의 경우 이 계정은 서비스 계정입니다.

    • 서명된 URL을 생성하는 자체 프로그램을 만드는 경우 연결된 HMAC 키가 있는 사용자 계정을 사용할 수 있습니다.

서명된 URL을 생성하면 서명된 URL을 소유한 모든 사람이 이를 사용하여 지정된 기간 내에 객체 읽기와 같은 지정된 작업을 수행할 수 있습니다.

서명된 URL을 사용해야 하는 경우

일부의 경우에는 사용자가 Google 계정이 없어도 Cloud Storage에 액세스할 수 있도록 허용하지만 애플리케이션 특정 로직을 사용하여 액세스를 제어하길 원할 수 있습니다. 이 사용 사례를 처리하는 일반적인 방법은 서명된 URL을 사용자에게 제공하여 제한된 시간 동안 해당 리소스에 대한 읽기, 쓰기, 삭제 액세스 권한을 부여하는 것입니다. 서명된 URL을 만들 때 만료 시간을 지정합니다. URL을 아는 사람은 누구나 URL 만료 시간에 도달하거나 URL 서명에 사용된 키가 순환될 때까지 리소스에 액세스할 수 있습니다.

서명된 URL의 가장 일반적인 용도는 업로드 및 다운로드입니다. 이러한 요청에서는 객체 데이터가 요청자와 Cloud Storage 간에 이동하기 때문입니다. 객체 복사, 객체 작성, 객체 삭제, 메타데이터 수정과 같은 대부분의 다른 경우에는 서명된 URL을 만들어 다른 사람에게 사용하도록 지정하는 것이 불필요한 추가 단계입니다. 대신 서명된 URL 만들기를 담당하는 항목이 Cloud Storage에 원하는 요청을 직접 수행하는 설계를 고려해야 합니다.

서명된 URL 생성 옵션

Cloud Storage는 서명된 URL을 생성하는 몇 가지 방법을 지원합니다.

  • 서비스 계정 인증을 사용한 V4 서명: 이 서명 메커니즘은 아래에 설명되어 있습니다.

  • HMAC 인증을 사용한 서명: Amazon Simple Storage Service(Amazon S3) 사용자의 경우 기존 워크플로를 사용하여 Cloud Storage의 서명된 URL을 생성할 수 있습니다. 서명된 URL 생성 프로세스에서 Cloud Storage 리소스를 지정하고 storage.googleapis.com 호스트를 가리키고 Cloud Storage HMAC 사용자 인증 정보를 사용하기만 하면 됩니다.

서명된 URL의 예시

다음은 서비스 계정 인증을 사용한 V4 서명 프로세스에 따라 생성된 서명된 URL의 예시입니다.

https://storage.googleapis.com/example-bucket/cat.jpeg?X-Goog-Algorithm=
GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount.com
%2F20181026%2Fus-central1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T18
1309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host&X-Goog-Signature=247a2aa45f16
9edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa849
6def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dc
c1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c2058
0e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a
66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823
a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b13344703
2ea7abedc098d2eb14a7

이 서명된 URL은 example-bucket 버킷의 cat.jpeg 객체를 읽을 수 있는 액세스 권한을 부여합니다. 이를 서명된 URL로 만드는 쿼리 매개변수는 다음과 같습니다.

  • X-Goog-Algorithm: URL에 서명하는 데 사용되는 알고리즘입니다.

  • X-Goog-Credential: 서명된 URL을 만드는 데 사용되는 사용자 인증 정보에 대한 정보입니다.

  • X-Goog-Date: 서명된 URL이 사용 가능해지는 날짜 및 시간을 ISO 8601 기본 형식 YYYYMMDD'T'HHMMSS'Z'로 표현한 것입니다.

  • X-Goog-Expires: 서명된 URL의 유효 기간으로 X-Goog-Date 값을 초로 환산한 것입니다. 이 예시에서 서명된 URL은 15분 후에 만료됩니다. 가장 긴 만료 시간 값은 604,800초(7일)입니다.

  • X-Goog-SignedHeaders: 서명된 URL을 사용하는 모든 요청의 일부로 포함되어야 하는 헤더입니다.

  • X-Goog-Signature: 이 서명된 URL을 사용한 cat.jpeg 액세스 요청을 허용하는 인증 문자열입니다.

재개 가능한 업로드로 서명된 URL 사용

일반적으로 재개 가능한 업로드의 서명된 URL을 만들 필요는 없습니다. 업로드 시작 요청 후 객체 데이터를 업로드하기 위한 후속 PUT 요청은 인증 토큰 역할을 하는 세션 URI를 사용하기 때문입니다. 즉, PUT 요청은 서명된 URL을 사용하지 않습니다.

업로드를 시작하는 초기 POST 요청에 서명된 URL을 만들어 사용할 수 있지만 대부분의 경우 서버에서 재개 가능한 업로드를 대신 시작할 수 있습니다. 그런 다음 서버는 업로드를 실행하기 위해 클라이언트로 세션 URI를 전송합니다. 이렇게 하면 서버에서 서명된 URL을 만드는 복잡성과 클라이언트에서 서명된 URL을 처리하고 재개 가능한 업로드를 시작하는 복잡성을 방지할 수 있습니다.

서명된 URL과 마찬가지로 세션 URI는 이를 소유한 모든 사용자가 데이터를 업로드하는 데 사용할 수 있습니다. 세션 URI를 클라이언트에 전달 시 HTTPS를 통해 전송해야 합니다.

서명된 URL 고려 사항

서명된 URL을 사용할 때는 다음 사항에 유의하세요.

  • 서명된 URL은 XML API 엔드포인트를 통해 Cloud Storage 리소스에 액세스할 때만 사용할 수 있습니다.

  • 일반적으로 서명된 URL은 모든 XML API 요청을 대상으로 만들 수 있지만 두 가지 예외가 있습니다.

    • V4 서명을 사용하는 서명된 URL은 본문이 단위 분할 인코딩을 사용하는 요청에는 사용할 수 없습니다.

    • Node.js Cloud Storage 클라이언트 라이브러리는 현재 개별 객체의 서명된 URL만 만들 수 있습니다. 예를 들어 버킷의 객체를 나열하는 용도로 서명된 URL을 사용할 수는 없습니다.

  • 사용자 인증 정보를 지정할 때 이메일 주소를 사용하여 서비스 계정을 식별하는 것이 좋습니다. 하지만 서비스 계정 ID도 사용할 수 있습니다.

  • 서명된 URL을 사용하는 모든 요청에서 승인 헤더를 생략해야 합니다. 두 개를 모두 사용하면 Cloud Storage가 서명된 URL이 아니라 헤더에 제공된 사용자 인증 정보를 인증할 수 있습니다. 이렇게 하면 의도한 것보다 더 많은 리소스에 액세스할 수 있습니다.

정규 요청

서명된 URL은 X-Goog-Signature 쿼리 문자열 매개변수에 인코딩된 정보에 포함된 정규 요청을 사용합니다. Cloud Storage 도구로 서명된 URL을 생성하면 필요한 정규 요청이 자동으로 생성되고 통합됩니다. 하지만 자체 프로그램으로 서명된 URL을 생성할 때는 정규 요청을 직접 정의하고 이를 사용하여 서명을 만들어야 합니다.

사용자 인증 정보 범위

사용자 인증 정보 범위는 서명할 문자열 및 X-Goog-Credential 쿼리 문자열 매개변수 모두에 표시됩니다.

다음 단계