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

Object Storage Service:Include a V1 signature in a URL

最終更新日:Mar 21, 2026

認証情報を Authorization ヘッダーで渡す代わりに、クエリ文字列パラメーターとして URL に直接埋め込むことができます。これにより、アクセス認証情報を公開することなく、Object Storage Service (OSS) リソースへの期限付きリンクを共有できます。

重要

V4 署名アルゴリズムを使用して、セキュリティを向上させます。詳しくは、「URL に V4 署名を含める (推奨)」をご参照ください。

SDK を使用した署名付き URL の生成

OSS SDK は V1 署名を自動的に処理します。SDK を使用する場合、署名を手動で構築する必要はありません。次の表に、サポートされている各言語の署名実装と使用例を示します。

SDK署名実装使用例
JavaOSSV1Signer.javaJava
PHPSignerV1.phpPHP
Node.jssignatureUrl.jsNode.js
Browser.jsBrowser.js
Pythonauth.pyPython
AndroidObjectURLPresigner.javaAndroid
iOSOSSClient.miOS
Gov1.goGo
C++SignerV1.ccC++
Coss_auth.cC
.NETOssClient.cs.NET
Rubybucket.rbRuby

署名付き URL の手動構築

署名付き URL を自分で構築するには、次のものが必要です。

  • AccessKey ID と AccessKey Secret、または Security Token Service (STS) からの一時アクセス認証情報

  • ターゲットリソースのバケット名とオブジェクトパス

  • 目的の HTTP メソッド (GETPUT など)

  • Unix タイムスタンプ形式の有効期限

URL 形式

V1 署名付き URL は次の構造を持ちます。

https://<bucket>.oss-<region>.aliyuncs.com/<object>?OSSAccessKeyId=<key-id>&Expires=<unix-timestamp>&Signature=<encoded-signature>

STS からの一時アクセス認証情報を使用するには、security-token パラメーターを追加します。

https://<bucket>.oss-<region>.aliyuncs.com/<object>?OSSAccessKeyId=<key-id>&Expires=<unix-timestamp>&Signature=<encoded-signature>&security-token=<sts-token>

IP アドレスまたは virtual private cloud (VPC) によるアクセスを制限するには、対応するアクセス制御パラメーターを含めます。

https://<bucket>.oss-<region>.aliyuncs.com/<object>?OSSAccessKeyId=<key-id>&Expires=<unix-timestamp>&Signature=<encoded-signature>&x-oss-ac-subnet-mask=32

URL パラメーター

パラメーター必須説明
OSSAccessKeyId文字列はいURL の署名に使用される AccessKey ID。
Expires数値はいUnix タイムスタンプ形式の有効期限 (1970-01-01 00:00:00 UTC からの秒数)。OSS はこの時刻以降に受信したリクエストを拒否します。たとえば、現在時刻が 1141889060 で、URL を 60 秒間有効にしたい場合、これを 1141889120 に設定します。OSS コンソールのデフォルトの有効期間は 3,600 秒で、最大は 32,400 秒です。有効期間を変更するには、「オブジェクト URL の使用」をご参照ください。
Signature文字列はいURL エンコードされ、Base64 エンコードされた HMAC-SHA1 署名。詳細については、以下の「署名式」をご参照ください。
security-token文字列いいえSTS からのセキュリティトークン。一時アクセス認証情報を使用する場合にのみ必須です。詳細については、「STS が提供する一時アクセス認証情報を使用して OSS にアクセスする」をご参照ください。AssumeRole 操作を呼び出すか、さまざまなプログラミング言語用の STS SDK を使用して、一時アクセス認証情報を取得できます。一時アクセス認証情報には、セキュリティトークンと一時 AccessKey ペア (AccessKey ID + AccessKey Secret) が含まれます。
x-oss-ac-source-ip文字列いいえIP アドレスまたは CIDR ブロック。署名生成時にのみ使用されます。URL 自体には含めないでください。x-oss-ac-subnet-mask と一緒に使用する必要があります。
x-oss-ac-subnet-mask数値いいえサブネットマスク長 (先頭の 1 ビット数)。OSS は、リクエストのソース IP とこのマスクに対してビット単位の AND 演算を実行し、署名を検証します。このパラメーターが改ざんされた場合、署名検証は失敗します。
x-oss-ac-vpc-id文字列いいえVPC ID。OSS は、リクエストが指定された VPC から送信されたことを検証し、ソース IP または CIDR ブロックもチェックします。
x-oss-ac-forward-allowブール値いいえリクエストが転送されたときに、署名検証のために X-Forwarded-For ヘッダーを使用するかどうか。有効な値: truefalse (デフォルト)。これを true に設定すると、リクエストヘッダーが改ざんされる可能性があります。

署名式

Signature パラメーターは、Authorization ヘッダーと同じアルゴリズムを使用しますが、1 つの違いがあります。署名文字列では、Date ヘッダーを Expires に置き換えます。Date をリクエストに含めることはできますが、署名文字列には含めないでください。

Signature = urlencode(base64(hmac-sha1(AccessKeySecret,
              VERB + "\n"
              + CONTENT-MD5 + "\n"
              + CONTENT-TYPE + "\n"
              + EXPIRES + "\n"
              + CanonicalizedOSSHeaders
              + CanonicalizedResource)))

CONTENT-MD5CONTENT-TYPE、および CanonicalizedOSSHeaders については、「署名 V1」と同じルールに従ってください。

URL に SignatureExpires、または OSSAccessKeyId が複数回出現する場合、OSS は最初の値を使用します。OSS はリクエストを受信すると、最初に Expires をチェックし、次に Signature を検証します。

Python の例

次の例は、必須パラメーターのみを使用して GET リクエストの V1 署名を計算します。

import base64
import hmac
import hashlib
from urllib.parse import quote

access_key_secret = "yourAccessKeySecret"
string_to_sign = "GET\n\n\n1141889120\n/examplebucket/oss-api.pdf"

h = hmac.new(
    access_key_secret.encode('utf-8'),
    string_to_sign.encode('utf-8'),
    hashlib.sha1
)

signature = quote(base64.b64encode(h.digest()).decode('utf-8'))
print(signature)

プレースホルダー値を置き換えます。

プレースホルダー説明
yourAccessKeySecretご利用の AccessKey Secret
1141889120有効期限の Unix タイムスタンプ
/examplebucket/oss-api.pdfCanonicalizedResource (/<bucket>/<object>)

セキュリティに関する考慮事項

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

不正アクセスリスクを軽減するには:

  • x-oss-ac-source-ipx-oss-ac-subnet-mask、および x-oss-ac-vpc-id を使用して、IP アドレスまたは VPC によるアクセスを制限します。

  • 同じリクエストに対して、URL と Authorization ヘッダーの両方に URL 署名を含めないでください。OSS はそのようなリクエストを拒否します。

注意事項

  • PUT リクエストの場合、OSS SDK はリクエストボディの MD5 ハッシュを計算し、署名付き URL に含めます。アップロードされたコンテンツの MD5 ハッシュが一致する必要があります。一致しない場合、PUT リクエストは失敗します。MD5 ハッシュを検証するには、リクエストに Content-MD5 ヘッダーを含めます。

  • x-oss-ac-source-ip は署名生成時にのみ使用されます。配布する URL には含めないでください。

トラブルシューティング

403 AccessDenied エラーが発生するのはなぜですか。

次の一般的な原因を確認してください。

  • URL に OSSAccessKeyIdExpires、または Signature のいずれか 1 つ以上が不足しています。これら 3 つはすべて必須です (順序は関係ありません)。

  • リクエストが Expires タイムスタンプの後に到着したか、タイムスタンプが無効な形式です。システムクロックが同期されており、Expires の値が将来の有効な Unix タイムスタンプであることを確認してください。

400 InvalidArgument エラーが発生するのはなぜですか。

OSS は、同じリクエストに対して URL と Authorization ヘッダーの両方に署名を含めることを許可していません。いずれかの場所から署名を削除してください。

次のステップ