すべてのプロダクト
Search
ドキュメントセンター

:URLへの署名の追加

最終更新日:Dec 18, 2024

リクエストの承認ヘッダーに署名を追加できます。 Object Storage Service (OSS) リソースのURLに署名を追加し、URLを共有して、許可されたサードパーティユーザーがリソースにアクセスできるようにすることもできます。

使用上の注意

  • 署名付きURLを使用してデータを共有する場合、署名付きURLの有効期間内にインターネット上のすべてのユーザーがデータにアクセスできます。 リスクを事前に評価しておくことを推奨します。

  • OSSでは、特定のリソースのURLとリソースのリクエストの許可ヘッダーに同時に署名を含めることはできません。

  • サードパーティのユーザーが署名付きURLを使用してPUTおよびGETリクエストを開始できるように、URLに署名を追加できます。

  • PUTリクエストの事前署名付きURLを生成して、目的のコンテンツがアップロードされているかどうかを確認できます。 OSS SDKを使用してリクエストの事前署名付きURLを生成する場合、OSS SDKはリクエスト本文のMD5ハッシュを計算し、事前署名付きURLにMD5ハッシュを含めます。 アップロードされたコンテンツのMD5ハッシュは、OSS SDKによって計算されたMD5ハッシュと同じである必要があります。 そうでない場合、PUTリクエストは失敗します。 アップロードされたコンテンツのMD5ハッシュを確認するには、Content-MD5ヘッダーをリクエストに追加します。

実装方法

  • 署名されたURLの例

    https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2pc56s936****&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv****

    Security Token Service (STS) から取得した一時的なアクセス資格情報を使用して署名付きURLを生成する場合は、署名にsecurity-tokenパラメーターを含める必要があります。

    https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2pc56s936****&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv****&security-token=CAISowJ1q6Ft5B2yfSjIr5bgIOz31blR9oWmWBfCs3kDR/xm3Imc1zz2IHxMdHJsCeAcs/Q0lGFR5/sflqJIRoReREvCUcZr8szfWcsZos2T1fau5Jko1be0ewHKeQKZsebWZ+LmNpy/Ht6md1HDkAJq3LL+bk/Mdle5MJqP+/kFC9MMRVuAcCZhDtVbLRcYgq18D3bKMuu3ORPHm3fZCFES2jBxkmRi86+ysIP+phPVlw/90fRH5dazcJW0Zsx0OJo6Wcq+3+FqM6DQlTNM6hwNtoUO1fYUommb54nDXwQIvUjfbtC5qIM/cFVLAYEhALNBofTGkvl1h/fejYyfyWwWYbkFCHiPFNr9kJCUSbr4a4sjF6zyPnPWycyCLYXleLzhxPWd/2kagAGaXG69BqwYNvrKKI3W8weP3bNc1wQDMXQfiHpFCRG6lYhh3iXFtpwH90A3sTlxzRGvi8+9p63JwrluOHWs+Fj6S6s0cOhKvKRWYE8UuWeXIvv4l6DAGwHDE8BLjLC11f5prUJgI2wb+3hwuBod32Jx+us/1p996Glao725orcb****

    IPアドレス、CIDRブロック、または仮想プライベートクラウド (VPC) IDを署名付きURLに追加して、権限のない端末が共有OSSリソースにアクセスするのを防ぐことができます。

    https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?&OSSAccessKeyId=44CF9590006BF252F707&Expires=1475462111&Signature=OjxkTUbT6rXCZcW8QhvlrXQr8vsP80EFdo6oG5qsBx****&x-oss-ac-subnet-mask=32
  • パラメーター

    パラメーター

    データ型

    必須

    説明

    OSSAccessKeyId

    STRING

    必須

    署名付きURLで使用されるAccessKey ID。

    有効期限

    NUMERIC

    必須

    UNIXタイムスタンプ。1970年1月1日木曜日00:00:00から経過した秒数です。 OSSがURLを含むリクエストを受信した時刻が、署名に含まれるこのパラメーターの値より遅い場合、リクエストタイムアウトエラーが返されます。 たとえば、現在の時刻が1141889060で、60秒以内に有効なURLを作成する場合は、このパラメーターを1141889120に設定する必要があります。

    説明

    セキュリティ上の理由から、OSSコンソールで生成されるURLのデフォルトの有効期間は3,600秒、最大有効期間は32,400秒です。 URLの有効期間を変更する方法の詳細については、「オブジェクトURLの使用」をご参照ください。

    Signature

    STRING

    必須

    URLに追加する署名情報。 次のコードは、有効な形式の例を示しています

    Signature = urlencode(base64(hmac-sha1(AccessKeySecret,
              VERB + "\n" 
              + CONTENT-MD5 + "\n" 
              + CONTENT-TYPE + "\n" 
              + EXPIRES + "\n" 
              + CanonicalizedOSSHeaders
              + CanonicalizedResource)))
    • OSSでは、URLに追加された署名の計算に使用されるアルゴリズムは、リクエストのAuthorizationヘッダーに追加された署名の計算に使用されるアルゴリズムと同様です。

    • URLに追加する署名文字列を計算する場合、Content-TypeContent-MD5、およびCanonicalizedOSSHeadersヘッダーは、Authorizationヘッダーに追加する署名の計算に使用したものと同じです。 ただし、署名文字列のDateヘッダーをExpireに置き換える必要があります。 リクエストにDateヘッダーを含めることができます。 ヘッダーの詳細については、「許可ヘッダーにV1署名を含める」をご参照ください。

    • URLに署名を追加するときは、URLをエンコードする必要があります。 Signature、Expires、またはOSSAccessKeyIdの値が複数回インポートされた場合、最初にインポートされた値が使用されます。

    • リクエストに署名付きURLが含まれている場合、OSSはまずリクエストを受信した時刻がExpiresの値より後かどうかを確認し、署名を検証します。

    security-token

    STRING

    任意

    STSから取得されるセキュリティトークン。 一時的なアクセス資格情報を使用してURLに署名する場合にのみ、このパラメーターを設定する必要があります。

    説明

    STSの設定方法の詳細については、「STSが提供する一時的な資格情報を使用してOSSにアクセスする」をご参照ください。 AssumeRole操作を呼び出すか、さまざまなプログラミング言語のSTS SDKを使用して、一時的なアクセス資格情報を取得できます。 一時的なアクセス資格情報には、セキュリティトークンと一時的なAccessKeyペアが含まれます。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。

    x-oss-ac-source-ip

    STRING

    任意

    指定されたIPアドレスまたはCIDRブロック。 このパラメーターは、サブネットマスクを指定するx-oss-ac-subnet-maskと共に使用する必要があります。

    x-oss-ac-subnet-mask

    NUMERIC

    任意

    サブネットマスク内の1の数。 このパラメーターが署名付きURLに含まれている場合、OSSはリクエストの送信元のIPアドレスとサブネットマスクに基づいてAND演算を実行します。 操作の結果は、署名検証に使用される。 パラメータの値が悪意を持って変更された場合、署名は検証に合格できません。

    x-oss-ac-vpc-id

    STRING

    任意

    VPC ID このパラメーターは、リクエストが指定されたVPC経由で送信されるかどうかを判断するために使用されます。 リクエストが指定されたVPC経由で送信された場合、OSSはリクエストの送信元であるVPC IDとIPアドレスまたはCIDRブロックを検証します。

    x-oss-ac-forward-allow

    BOOLEAN

    任意

    リクエストを転送できるかどうかを指定します。 x-oss-ac-forward-allowパラメーターとX-Forwarded-Forパラメーターがリクエストに含まれている場合、X-Forwarded-Forパラメーターの値を使用して署名を検証します。 X-Forwarded-Forパラメータで複数のIPアドレスを指定できます。 デフォルト値:false

    有効な値:

    • true: リクエストを転送できます。

      重要

      これにより、リクエストヘッダーが改ざんされる可能性があります。

    • false: リクエストは転送できません。

  • 署名の生成に使用されるサンプルPythonコード

    • 例1 (必須パラメーターのみ)

      import base64
      import hmac
      import hashlib
      import urllib
      h = hmac.new("accesskey",
                   "GET\n\n\n1141889120\n/examplebucket/oss-api.pdf",
                   hashlib.sha1)
      urllib.quote(base64.encodestring(h.digest()).strip())
    • 例2 (オプションパラメータを含む)

      • URLに署名する前に、オプションのパラメーターをアルファベット順に並べ替える必要があります。 ビジネス要件に基づいて、オプションのパラメーターを空のままにすることができます。

      • アクセス要求の送信元のIPアドレスを指定する場合は、x-oss-ac-source-ipおよびx-oss-ac-subnet-maskパラメーターを指定できます。 例: x-oss-ac-source-ip=127.0.0.1およびx-oss-ac-subnet-mask=32

      import base64
      import hmac
      import hashlib
      import urllib
      h = hmac.new(accesskey,
                   "GET\n\n\n1141889120\n%2Fexamplebucket%2Foss-api.pdf?\
                   &x-oss-ac-forward-allow=true\
                   &x-oss-ac-source-ip=127.0.0.1\
                   &x-oss-ac-subnet-mask=32\
                   &x-oss-signature-version=OSS2",
                   hashlib.sha256)
      Signature = base64.encodestring(h.digest()).strip()

SDK

次の表は、プログラミング言語用のOSS SDKを使用してURLに署名を追加する実装方法を説明し、署名付きURLを使用してオブジェクトをアップロードまたはダウンロードするサンプルコードへのリンクを提供します。

SDK

メソッド

サンプルコード

参考資料

Java SDK

OSSClient.generatePresignedUrl

AuthorizedAccessSample.java

Java

Python SDK

Bucket.sign_url

sts.py

Python

PHP SDK

OssClient.signUrl

Signature.php

PHP

Node.js SDK

Url

signatureUrl.js

Node.js

Browser.js SDK

Url

signatureUrl.js

Browser.js

Android SDK

OSSClient.presignConstrainedObjectURL

OSSClient.java

アンドロイド

iOS SDK

presignConstrainURLWithBucketName:withObjectKey:httpMethod:withExpirationInterval:withParameters

OSSClient.h

iOS

Go SDK

signURL

sign_url.go

行く

C SDK

oss_gen_signed_url

oss_object.c

C

C++ SDK

OssClient::GeneratePresignedUrl

OssClient.cc

C ++

.NET SDK

OssClient.GeneratePresignedUri

UrlSignatureSample.cs

. NET

エラーコード

エラーコード

エラーメッセージ

説明

AccessDenied

403 Forbidden

Signature、Expires、およびOSSAccessKeyIdパラメーターの少なくとも1つが欠落している場合に返されるエラーメッセージ。 署名がURLに追加されると、signature、Expires、およびOSSAccessKeyIdパラメーターの順序を変更できます。

AccessDenied

403 Forbidden

リクエストのアクセス時間がリクエストで指定されたExpiresパラメーターの値よりも遅い場合、またはリクエストの時間形式が無効な場合に返されるエラーメッセージ。

InvalidArgument

400 Bad Request

Signature、Expires、およびOSSAccessKeyIdパラメーターの少なくとも1つがURLに含まれており、署名情報もリクエストヘッダーに含まれている場合に返されるエラーメッセージ。