서명된 URL

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

개요

서명된 URL은 요청을 수행하는 데 필요한 제한된 권한과 시간을 제공하는 URL입니다. 서명된 URL은 쿼리 문자열에 인증 정보가 포함되어 있어 사용자 인증 정보가 없는 사용자도 리소스에 대한 특정 작업을 수행할 수 있습니다. 서명된 URL을 생성할 때는 서명된 URL이 수행할 요청에 필요한 권한이 있는 사용자 또는 서비스 계정을 지정합니다. 서명된 URL을 생성하면 서명된 URL을 소유한 모든 사람이 이를 사용하여 지정된 기간 내에 객체 읽기와 같은 지정된 작업을 수행할 수 있습니다.

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

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

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

서명된 URL 생성 옵션

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

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

  • 서비스 계정 인증을 사용한 V2 서명: 이 서명 메커니즘에 대한 자세한 내용을 보려면 여기로 이동하세요.

  • HMAC 인증을 사용한 서명: Amazon Simple Storage Service(Amazon S3) 사용자의 경우 기존 워크플로를 사용하여 Cloud Storage의 서명된 URL을 생성할 수 있습니다. 서명된 URL 생성 프로세스에서 Cloud Storage 리소스를 지정하고 storage.googleapis.com 호스트를 가리키고 Google 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-central-1%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 사용

재개 가능한 업로드로 작업할 때는 업로드를 시작하는 POST 요청에 서명된 URL만 만들어 사용합니다. 이 초기 요청은 후속 PUT 요청에서 데이터를 업로드하는 데 사용하는 세션 URI를 반환합니다. 세션 URI는 인증 토큰 역할을 하므로 PUT 요청은 서명된 URL을 사용하지 않습니다.

재개 가능한 업로드의 한 가지 이점은 클라이언트가 서명된 URL을 처리할 필요가 없도록 서버에서 시작 요청을 수행할 수 있다는 것입니다. 단, 다음 사항에 유의해야 합니다.

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

  • 재개 가능한 업로드는 초기 요청의 리전에 고정됩니다. 서버 및 클라이언트가 지리적으로 멀리 있다면 업로드가 느려지지 않도록 서버에서 초기 POST 요청을 작성하고 서명한 후 서명된 URL을 클라이언트에 제공하여 업로드가 클라이언트 위치에서 시작하도록 합니다.

서명된 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 쿼리 문자열 매개변수 모두에 표시됩니다.

IAM signBlob으로 문자열 서명

프로그램을 사용하여 서명된 URL을 생성할 때 문자열 서명을 위한 한 가지 옵션은 Google Cloud에서 제공되는 IAM signBlob을 사용하는 것입니다. 이 메서드의 출력인 Signature는 서명된 URL을 어셈블할 때 사용됩니다.

signBlob 서비스는 사용되는 비공개 키를 정기적으로 순환합니다. 생성된 서명된 URL은 최소 12시간 동안 사용 가능하지만, 만료 시간이 12시간보다 큰 경우 설정된 만료 시간 전에 작동이 중지될 수 있습니다. 따라서 signBlob에서 생성된 서명된 URL이 리소스 단기 액세스에 가장 적합합니다.

다음 단계