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

Object Storage Service:URLにV1署名を含める

最終更新日:Aug 07, 2024

認証情報を提供するためにHTTP Authorizationヘッダーを使用することに加えて、リクエスト全体をURLで表現する場合に、クエリ文字列パラメーターを使用してリクエストを認証できます。 これにより、アクセス資格情報を公開することなく、指定されたObject Storage Service (OSS) リソースに対する一時的なアクセス権限をユーザーに付与できます。 このトピックでは、URLにV1署名を含める方法について説明します。

重要

より良いセキュリティを提供するV4署名アルゴリズムを使用することを推奨します。 詳細については、「URLにV4署名を含める (推奨) 」をご参照ください。

OSS SDKを使用したV1シグネチャの自動実装

OSS SDKは、V1シグネチャの自動実装をサポートしています。 OSS SDKを使用する場合、リクエストに署名を追加する必要はありません。 特定のプログラミング言語の署名実装の詳細については、そのプログラミング言語のOSS SDKのサンプルコードを参照してください。 次の表に、さまざまなプログラミング言語でOSS SDKを使用する場合に、V1署名アルゴリズムを使用してリクエストに署名するために使用されるサンプルコードへの参照を示します。

SDK

サンプルコード

Java

OSSV1Signer.java

Java

PHP

SignerV1.php

PHP

Node.js

signatureUrl.js

Node.js

Browser.js

Browser.js

Python

auth.py

Python

Android

ObjectURLPresigner.java

アンドロイド

iOS

OSSClient.m

iOS

Go

v1.go

行く

C++

SignerV1.cc

C ++

C

oss_auth.c

C

. ネット

OssClient.cs

. NET

Ruby

bucket.rb

ルビー

使用上の注意

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

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

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

実装方法

  • https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****

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

    https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****&security-token=CAIS****q6Ft5B2yfSjIr****Oz31blR9oWmWBf****DR/xm3Imc****IHxMdHJsCeAcs/Q0lGFR5/sflqJIR****EvCUcZr8szfWcsZos2****u5Jko1be0ewHKeQKZsebWZ+LmNpy/Ht6md1HDkAJq3LL+bk/Mdle5MJqP+/kFC9MMRVuAcCZhDtVbLRcYgq18D3bKMuu3ORPHm3fZCFES2jBxkmRi86+ysIP+phPVlw/90fRH5dazcJW0Zsx0OJo6Wcq+3+FqM6DQlTNM6hwNtoUO1fYUommb54nDXwQIvUjfbtC5qIM/cFVLAYEhAL****TGkvl1h/fejYyfyW****kFCHiPF****JCUSbr4a4sjF6zyPnPWycyCLYXleLzhxPWd/2kagAGaXG69BqwYNvrKKI3W8****bNc1wQDMXQfiHpFCRG6lYhh3****pwH90A3sTlxzRGvi8+****JwrluOHWs+Fj6S6s0cOhKvKRWYE8UuWeXIvv4l6DAGwH****LjLC11f5prUJ****b+3hwuBod32Jx+us/1p996Glao725orcb****

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

    https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?&OSSAccessKeyId=44CF****************&Expires=1475462111&Signature=77Dv****************&x-oss-ac-subnet-mask=32
  • 次の表に、上記のURLのパラメーターを示します。

    パラメーター

    データ型

    必須

    説明

    OSSAccessKeyId

    String

    必須

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

    有効期限

    Numeric

    署名付きURLの有効期限が切れる時刻。 タイムスタンプは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-MD5CanonicalizedOSSHeadersなどの署名V1で定義されているヘッダーは、Authorizationヘッダーに追加する署名の計算に使用されるヘッダーと同じです。 ただし、署名文字列のDateヘッダーをExpireに置き換える必要があります。 リクエストにDateヘッダーを含めることはできますが、署名文字列に含める必要はありません。

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

    • 署名付きURLを使用してリソースをリクエストする場合、OSSはまずリクエストが受信された時刻がExpiresの値より後であるかどうかをチェックし、署名を検証します。

    security-token

    String

    任意

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

    説明

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

    x-oss-ac-source-ip

    String

    任意

    IPアドレスまたはCIDRブロック。

    重要
    • このパラメーターは、署名が生成されるときにのみ使用されます。 このパラメーターをURLに含める必要はありません。

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

    x-oss-ac-subnet-mask

    Numeric

    任意

    サブネットマスクの数字1の数。 このパラメーターが署名付きURLに含まれている場合、OSSはリクエストの送信元のIPアドレスとサブネットマスクに基づいてAND演算を実行します。 操作の結果は、URLの署名を検証するために使用される。 このパラメーターが改ざんされている場合、署名の検証は失敗します。

    x-oss-ac-vpc-id

    String

    任意

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

    x-oss-ac-forward-allow

    ブール値

    任意

    リクエスト転送を許可するかどうかを指定します。 OSSがこのフィールドを検出し、リクエストにX-Forwarded-For (複数のIPアドレスを含む可能性があります) が含まれている場合、OSSは署名検証にX-Forwarded-Forの値を使用します。

    有効な値:

    • true

      重要

      パラメーターをtrueに設定すると、リクエストヘッダーが改ざんされる可能性があります。

    • false (デフォルト)

  • 署名用のPythonサンプルコード (必要なパラメーターのみを含む)

    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())

エラーコード

エラーコード

エラーメッセージ

説明

AccessDenied

403 Forbidden

Signature、Expires、およびOSSAccessKeyIdパラメーターが必要です。 パラメータは、特定の順序に従う必要はない。

AccessDenied

403 Forbidden

リクエストのアクセス時刻が、リクエストで指定されたExpiresパラメーターの値よりも遅いか、リクエストの時刻形式が無効です。

InvalidArgument

400 Bad Request

Signature、Expires、およびOSSAccessKeyIdパラメーターの少なくとも1つがURLに含まれ、署名情報もAuthorizationリクエストヘッダーに含まれます。