자체 프로그램으로 서명된 URL 생성

이 페이지는 버킷 및 객체에 대한 쿼리 문자열 인증 메커니즘인 서명된 URL을 프로그래매틱 방식으로 만드는 방법을 설명합니다. 서명된 URL은 버킷 및 객체에 대한 액세스를 제어하는 ​​한 가지 방법입니다. 서명된 URL은 버킷이나 객체와 연결되며 해당 특정 리소스에 대한 제한된 시간 동안의 읽기 또는 쓰기 액세스를 제공합니다. URL을 가진 사람은 누구나 Google 계정이 있는지 여부에 관계없이 URL을 통해 액세스 권한을 부여 받습니다.

서명된 URL 개요에서 서명된 URL에 대해 자세히 알아보세요. gsutil을 사용하여 서명된 URL 만들기에서 gsutil을 사용하여 서명된 URL을 빠르게 만드는 방법에 대해 알아보세요.

프로그램으로 서명된 URL 만들기

여러 가지 언어로 서명된 URL을 생성하는 프로그램을 만들 수 있습니다. 이러한 프로그램에서 아래의 설명에 따라 서명된 URL을 생성하는 단계를 구현해야 합니다.

  1. 서비스 계정에 사용할 새 비공개 키를 생성하거나 기존의 비공개 키를 사용합니다. 키는 JSON 또는 PKCS12 형식일 수 있습니다.

    비공개 키 및 서비스 계정에 대한 자세한 내용은 서비스 계정을 참조하세요.

  2. 서명할 문자열을 구성합니다.

    1. 서명된 URL을 활용하는 요청에 사용할 HTTP_Verb(예: GET , PUT, DELETE)를 선택합니다.

    2. 서명된 URL을 사용할 요청에 값을 포함하려면 MD5 다이제스트 값을 추가합니다.

    3. 서명된 URL을 사용할 요청에 Content-Type 헤더를 포함할 경우, 객체의 Content-Type을 지정합니다.

    4. 서명된 URL이 만료되는 시점(즉, 연관된 객체에 대한 액세스를 더 이상 제공하지 않는 시점)의 타임스탬프를 지정합니다(Unix 이폭 이후의 경과 시간을 초 단위로 지정).

    5. 서명된 URL을 사용할 요청에 헤더를 포함할 경우, 확장 헤더를 줄바꿈으로 구분하여 지정합니다. 하지만 연결된 객체에 액세스할 요청이 x-goog-encryption-key 또는 x-goog-encryption-key-sha256 헤더를 사용하더라도 지정하지 마세요.

    6. 버킷 수준에서 시작하는 리소스 경로를 지정합니다.

    서명된 URL 개요 페이지에 문자열의 각 구성요소를 설명하는 표가 있습니다.

    필수 구성요소만 포함된 서명 문자열은 다음과 같을 수 있습니다(줄바꿈이 \n이 아닌 실제 줄바꿈으로 표시됨).

    GET
    
    1388534400
    /bucket/objectname
    

    또는 다음 서명 문자열은 모든 구성요소를 포함하며 고객이 제공한 암호화 키가 있는 객체에 적용됩니다(줄바꿈이 \n이 아닌 실제 줄바꿈으로 표시됨).

    GET
    rmYdCNHKFXam78uCt7xQLw==
    text/plain
    1388534400
    x-goog-encryption-algorithm:AES256
    x-goog-meta-foo:bar,baz
    /bucket/objectname
    
  3. 문자열에 서명합니다.

    문자열에 서명하려면 이 가이드의 첫 번째 단계 설명과 같이 서비스 계정 유형 애플리케이션에 대한 개인 키와 OAuth 클라이언트 ID가 있어야 합니다.

    요청을 인증하기 위해 SHA256이 적용된 RSA 서명을 사용하여 구성한 문자열에 서명합니다.

    예를 들어, Python에서는 다음 코드를 사용하여 문자열에 서명할 수 있습니다.

    from oauth2client.service_account import ServiceAccountCredentials
    creds = ServiceAccountCredentials.from_json_keyfile_name([KEY_FILENAME])
    client_id = creds.service_account_email
    signature = creds.sign_blob([SIGNATURE_STRING])[1]
    

    각 항목의 의미는 다음과 같습니다.

    • [KEY_FILENAME]은 개인 키가 있는 파일 이름입니다.
    • [SIGNATURE_STRING]은 서명을 위해 구성한 문자열입니다.

    Google App Engine 애플리케이션 내에서 App Engine 앱 ID 서비스를 사용하여 문자열에 서명할 수 있습니다.

  4. 서명을 Base64로 인코딩합니다.

    예를 들어, Python에서는 다음 코드를 사용하여 서명을 인코딩할 수 있습니다.

    encoded_signature = base64.b64encode(signature)
    
  5. URL을 어셈블합니다.

    쿼리 문자열을 작성하고 서명한 후에 다음과 같이 URL을 어셈블합니다.

    1. 방금 서명한 쿼리 문자열에서 사용한 값과 동일한 값을 사용하여 리소스를 참조하는 기본 URL을 만듭니다. 예를 들면 다음과 같습니다.

      https://storage.googleapis.com/google-testbucket/testdata.txt
    2. URL에 사용할 수 있도록 필요에 따라 만든 서명의 문자를 인코딩합니다.

      Base64로 인코딩된 서명에는 URL에서 허용되지 않는 문자(특히, +/)가 포함될 수 있습니다. 이들 값을 안전한 인코딩(각각 %2B%2F)으로 바꿔야 합니다.

    3. 다음과 같이 배포할 URL을 연결합니다.

      BASE_URL + "?GoogleAccessId=" + GOOGLE_ACCESS_STORAGE_ID + "&Expires=" + EXPIRATION + "&Signature=" + URL_ENCODED_SIGNATURE
      

      각 항목의 의미는 다음과 같습니다.

      • BASE_URL에는 파트 a에서 만든 URL이 포함되어 있습니다.
      • GOOGLE_ACCESS_STORAGE_ID에는 클라이언트 ID의 이메일 양식이 포함되어 있습니다.
      • EXPIRATION에는 서명한 쿼리 문자열에서 사용한 값과 동일한 값이 포함되어 있습니다.
      • URL_ENCODED_SIGNATURE에는 파트 b에서 인코딩한 서명이 포함되어 있습니다.

    완성된 샘플 URL은 다음과 같습니다.

    https://storage.googleapis.com/google-testbucket/testdata.txt?GoogleAccessId=
    1234567890123@developer.gserviceaccount.com&Expires=1331155464&Signature=BCl
    z9e4UA2MRRDX62TPd8sNpUCxVsqUDG3YGPWvPcwN%2BmWBPqwgUYcOSszCPlgWREeF7oPGowkeKk
    7J4WApzkzxERdOQmAdrvshKSzUHg8Jqp1lw9tbiJfE2ExdOOIoJVmGLoDeAGnfzCd4fTsWcLbal9
    sFpqXsQI8IQi1493mw%3D
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

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