서명된 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 생성 옵션

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 사용

재개 가능한 업로드에 서명된 URL을 사용하여 객체를 버킷에 업로드할 때는 초기 POST 요청에만 서명된 URL을 사용하면 됩니다. POST 요청에서는 데이터가 업로드되지 않습니다. 대신 이 요청은 이후 PUT 데이터 업로드 요청에 사용되는 세션 URI를 반환합니다. 세션 URI는 사실상 인증 토큰이므로 PUT 요청은 원래 서명된 URL을 사용할 필요가 없습니다. 따라서 서버에서 POST 요청을 수행할 수 있으므로 클라이언트가 서명된 URL 자체를 처리할 필요가 없습니다.

재개 가능한 업로드는 업로드가 시작되는 리전에 고정됩니다. 예를 들어 미국에서 재개 가능한 업로드 URL을 만들어 아시아 고객에게 제공하는 경우에도 미국을 통해 업로드됩니다. 업로드가 시작되지 않은 리전에서 재개 가능한 업로드를 수행하면 업로드 속도가 느려질 수 있습니다. 업로드가 클라이언트 소재 위치에서 시작되도록 서버에서 초기 POST 요청을 작성하고 서명한 후 서명된 URL을 클라이언트에 제공하여 이 문제를 방지할 수 있습니다. 시작되면 클라이언트는 정상적으로 결과 세션 URI를 사용하여 서명할 필요가 없는 PUT 요청을 만들 수 있습니다.

서명된 URL 고려 사항

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

  • 서명된 URL은 일반적으로 모든 XML API 요청을 대상으로 만들 수 있지만 Node.js Cloud Storage 클라이언트 라이브러리는 현재 개별 객체의 서명된 URL만 만들 수 있습니다. 예를 들어 버킷의 객체를 나열하는 용도로 서명된 URL을 사용할 수는 없습니다.

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

정규 요청

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

사용자 인증 정보 범위

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

[DATE]/[LOCATION]/storage/goog4_request
  • [DATE]: YYYYMMDD 형식의 날짜로, 서명할 문자열에 사용된 날짜와 일치해야 합니다.
  • [LOCATION]: 리소스가 상주하거나 생성될 리전입니다. Cloud Storage 리소스의 경우 [LOCATION] 값은 임의적입니다. [LOCATION] 매개변수는 Amazon Simple Storage Service(Amazon S3)와의 호환성을 유지하기 위해 존재합니다.
  • storage: 서비스 이름
  • goog4_request: 서명된 URL의 유형

예: 20181102/us/storage/goog4_request

Google Cloud Platform 도구로 문자열에 서명

프로그램을 사용하여 서명된 URL을 생성할 때 문자열에 서명하는 한 가지 방법은 GCP에서 제공하는 도구를 사용하는 것입니다.

App Engine App Identity 서비스

App Engine 애플리케이션 내에서 서명할 때는 App Engine 서비스 계정 사용자 인증 정보를 사용하는 App Engine Identity 서비스를 사용합니다. 예를 들어 Python 앱 ID API를 사용하면 다음 작업을 수행할 수 있습니다.

  • google.appengine.api.app_identity.sign_blob()를 사용하여 서명된 URL을 어셈블하는 경우 필요한 Signature를 제공하는 작성된 문자열의 바이트에 서명합니다.

  • google.appengine.api.app_identity.get_service_account_name()을 사용하여 서비스 계정 이름을 검색합니다. 이는 서명된 URL을 어셈블할 때 필요한 GoogleAccessId입니다.

App Engine은 다음 언어로도 지원됩니다.

blob에 서명 시 앱 ID 서비스는 비공개 키를 순환시킵니다. 앱 ID 서비스에서 생성된 서명된 URL은 최소 1시간 동안 유효하며 리소스에 대한 단기간 액세스에 가장 적합합니다.

IAM signBlob

IAM signBlob 메서드를 사용하여 서명을 수행할 수 있습니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.