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

Object Storage Service:署名 V1 から署名 V4 へのアップグレードガイド

最終更新日:Dec 12, 2025

Object Storage Service (OSS) は、署名 V1 を段階的に廃止します。アプリケーションをスムーズに実行するために、できるだけ早く、より安全な署名 V4 にアップグレードしてください。

署名 V1 から署名 V4 へのアップグレード方法

現在の使用状況に基づいて、対応するガイドに従ってアップグレードを完了してください。

ツール

タイプ

V4 をサポートするバージョン

アップグレードガイド

OSS SDK

Java

バージョン 3.17.4 以降

OSS SDK

Python V2

すべてのバージョン

Python V1

バージョン 2.18.4 以降

Go V2

すべてのバージョン

Go V1

バージョン 3.0.2 以降

PHP V2

すべてのバージョン

PHP V1

バージョン 2.7.0 以降

C# V2

すべてのバージョン

C# V1

バージョン 2.14.0 以降

JavaScript

バージョン 6.20.0 以降

C++

バージョン 1.10.0 以降

C

バージョン 3.11.0 以降

Swift

すべてのバージョン

Objective-C

バージョン 2.11.1 以降

Android

バージョン 2.3 以降

ossutil

ossutil 2.0

すべてのバージョン

ossutil

ossutil 1.0

バージョン 1.7.12 以降

ossfs

ossfs 2.0

すべてのバージョン

ossfs

ossfs 1.0

バージョン 1.91.4 以降

API (手動での署名構築)

手動で構築した V1 署名アルゴリズムを V4 にアップグレードする方法の詳細については、「API (手動での署名構築)」をご参照ください。

OSS コンソール

OSS は自動的にアップグレードされます。このプロセスはユーザーに対して透過的です。

OSS SDK

Java

  1. OSS Java SDKバージョン 3.17.4 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: SignVersion.V4

コードサンプル

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;

public class OSSClientV4 {

    public static void main(String[] args) throws Exception {
        // バケットが配置されているリージョンのエンドポイントを指定します。この例では、中国 (杭州) リージョンのエンドポイントが使用されます。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // バケットのリージョン ID を指定します。この例では、中国 (杭州) リージョンの ID である cn-hangzhou が使用されます。
        String region = "cn-hangzhou";

        // 環境変数から認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスを使用しなくなった場合は、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムの使用を明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();
        
        // OSSClient インスタンスを使用して、オブジェクトのアップロード、ダウンロード、管理などのリクエストを開始します。
        
        // OSSClient インスタンスを使用しなくなった場合は、shutdown メソッドを呼び出してリソースを解放します。
        ossClient.shutdown();
    }
}

Python

Python SDK V2

  1. OSS Python SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

コードサンプル

import alibabacloud_oss_v2 as oss

def main():
    # 環境変数からアクセス資格情報を取得して認証します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、資格情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 方法 1: リージョンのみを指定します。
    # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
    cfg.region = 'cn-hangzhou'

    # # 方法 2: エンドポイントとリージョンを指定します。
    # # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
    # cfg.region = 'cn-hangzhou'
    # # バケットが配置されているリージョンのパブリックエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    # # HTTP プロトコルを使用するには、エンドポイントを http://oss-cn-hangzhou.aliyuncs.com に設定します。
    # cfg.endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'

    # 設定を使用してクライアントインスタンスを作成します。
    client = oss.Client(cfg)

    # クライアントインスタンスを使用して後続の操作を実行します。

# スクリプトが直接実行されるときに main 関数を呼び出します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。スクリプトが直接実行されると、main 関数が呼び出されます。

Python SDK V1

  1. OSS Python SDK V1バージョン 2.18.4 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: oss2.ProviderAuthV4

コードサンプル

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = 'yourEndpoint'
# エンドポイントのリージョンを指定します。例: cn-hangzhou。
region = 'cn-hangzhou'

# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region) 

Go

Go SDK V2

  1. OSS Go SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

コードサンプル

package main

import (
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/credentials"
)

func main() {
	// 方法 1: リージョンのみを指定します。
	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou")

	// 方法 2: エンドポイントとリージョンを指定します。
	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
	// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。HTTP プロトコルを使用するには、エンドポイントを http://oss-cn-hangzhou.aliyuncs.com に設定します
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("cn-hangzhou").
	//     WithEndpoint("https://oss-cn-hangzhou.aliyuncs.com")

	// OSSClient インスタンスを作成します
	client := oss.NewClient(cfg)

	// OSSClient インスタンスを使用して後続の操作を実行します...
}

Go SDK V1

説明

Go SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。Go SDK V1 から Go SDK V2 に移行することをお勧めします。

  1. OSS Go SDK V1バージョン 3.0.2 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: oss.AuthV4

コードサンプル

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

// handleError を呼び出して回復不可能なエラーを処理し、エラーメッセージを記録した後にプログラムを終了します。
func handleError(err error) {
	log.Fatalf("Error: %v", err)
}

// setupClient を使用して OSSClient インスタンスを作成および設定します。
// パラメーター:
//
//	endpoint: バケットが配置されているリージョンのエンドポイント。
//	region: バケットが配置されているリージョン。
//
// 作成された OSSClient インスタンスを返します。
func setupClient(endpoint, region string) (*oss.Client, error) {
	// 環境変数からアクセス資格情報を取得します。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		return nil, err
	}

	// OSSClient インスタンスを作成し、署名アルゴリズム V4 を使用します。
	client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region(region))
	if err != nil {
		return nil, err
	}

	return client, nil
}

func main() {
	// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
	endpoint := "yourEndpoint"

	// エンドポイントにマッピングされるリージョンの ID を指定します。例: cn-hangzhou。
	region := "yourRegion"

	// 環境変数が設定されているかどうかを確認します。
	if endpoint == "" || region == "" {
		log.Fatal("Please set yourEndpoint and yourRegion.")
	}

	// OSSClient インスタンスを作成して設定します。
	client, err := setupClient(endpoint, region)
	if err != nil {
		handleError(err)
	}

	// クライアント情報を表示します。
	log.Printf("Client: %#v\n", client)
}

PHP

PHP SDK V2

  1. OSS PHP SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

<?php

// autoload ファイルをインクルードして依存関係をロードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# SDK のデフォルト設定をロードし、資格情報プロバイダーを指定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 資格情報プロバイダーを指定します。

// 方法 1: リージョンのみを指定します。
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
$cfg->setRegion(region: "cn-hangzhou");

// // 方法 2: エンドポイントとリージョンを指定します。
// // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
// // バケットが配置されているリージョンのパブリックエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
// // HTTP プロトコルを使用するには、エンドポイントを http://oss-cn-hangzhou.aliyuncs.com に設定します。
// $cfg->setRegion(region: 'cn-hangzhou')->setEndpoint(endpoint: 'https://oss-cn-hangzhou.aliyuncs.com');

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// OSSClient インスタンスを使用して後続の操作を実行します。

PHP SDK V1

  1. OSS PHP SDK V1バージョン 2.7.0 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: OSS_SIGNATURE_VERSION_V4

コードサンプル

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;

try {
    // 環境変数からアクセス資格情報を取得し、プロバイダーに保存します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    $provider = new EnvironmentVariableCredentialsProvider();
    // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";    
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,        
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        // エンドポイントに対応するリージョンを指定します。例: cn-hangzhou。
        "region" => "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
    return;
}

C#

C# SDK V2

  1. OSS C# SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

using OSS = AlibabaCloud.OSS.V2; // Alibaba Cloud OSS SDK のエイリアスを作成して、後続の使用を簡素化します

var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョンを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します
var endpoint = null as string;  // オプション。OSS サービスへのアクセスに使用するエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します

// OSS SDK のデフォルト設定をロードします。これにより、環境変数から資格情報 (AccessKey など) が自動的に読み取られます
var cfg = OSS.Configuration.LoadDefault();
// 環境変数を使用して認証用の資格情報を取得するように明示的に設定します (フォーマット: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 設定でバケットリージョンを設定します
cfg.Region = region;
// エンドポイントが指定されている場合は、デフォルトのエンドポイントをオーバーライドします
if(endpoint != null)
{
    cfg.Endpoint = endpoint;
}

// 設定情報を使用して OSS クライアントインスタンスを作成します
using var client = new OSS.Client(cfg);

// 作成したクライアントを使用して後続の操作を実行します...

C# SDK V1

  1. OSS C# SDK V1バージョン 2.14.0 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: SignVersion.V4

コードサンプル

using Aliyun.OSS;
using Aliyun.OSS.Common;
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret=Environment.GetEnvironmentVariable ("OSS_ACCESS_KEY_SECRET"); 

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";

// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();

// V4 署名を指定します。
conf.SignatureVersion = SignatureVersion.V4;

// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);

Node.js

  1. OSS Node.js SDKバージョン 6.20.0 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットの専用 OSS リージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は oss-cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: authorizationV4

const OSS = require('ali-oss');

const client = new OSS({
  // 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
  region: 'oss-cn-hangzhou',
  // V4 署名アルゴリズムを使用します
  authorizationV4: true,
  // バケットの名前を指定します。
  bucket: 'yourBucketName',
  // バケットが配置されているリージョンのパブリックエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
});

Browser.js

  1. OSS Browser.js SDKバージョン 6.20.0 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットの専用 OSS リージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は oss-cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: authorizationV4

コードサンプル

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <!-- SDK ファイルをインポートします -->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.20.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
        region: 'yourRegion',
	authorizationV4: true,
        // セキュリティトークンサービス (STS) から取得した一時的な AccessKey ペアを指定します。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。
        accessKeyId: 'yourAccessKeyId',
        accessKeySecret: 'yourAccessKeySecret',
        // STS から取得したセキュリティトークンを指定します。
        stsToken: 'yourSecurityToken',
        // バケットの名前を指定します。例: examplebucket。
        bucket: "examplebucket",
      });
    </script>
  </body>
</html>

C++

  1. OSS C++ SDKバージョン 1.10.0 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: SignatureVersionType::V4

コードサンプル

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS へのアクセスに使用するアカウントに関する情報を初期化します。*/
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    
    /* ネットワークリソースなどのリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* ネットワークリソースなどのリソースを解放します。*/
    ShutdownSdk();
    return 0;
}

C

  1. OSS C SDKバージョン 3.11.0 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: signature_version = 4

コードサンプル

#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。*/
const char *region = "yourRegion";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* char* 文字列を使用して aos_string_t データ型を初期化します。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/  
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 2 つの追加パラメーターを指定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME を使用して OSS にアクセスするかどうかを指定します。値 0 は CNAME が使用されないことを示します。*/
    options->config->is_cname = 0;
    /* ネットワークパラメーターを指定します。この関数の 2 番目のパラメーターは ctl の所有権を指定します。デフォルトでは、2 番目のパラメーターの値は 0 です。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main() {
    aos_pool_t *p;
    oss_request_options_t *options;
    /* グローバル変数を初期化します。プログラムのライフサイクルでグローバル変数を初期化する必要があるのは 1 回だけです。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        return -1;
    }
    /* メモリプールとオプションを初期化します。*/
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    /* ロジックコード。この例では、ロジックコードは省略されています。*/
    /* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
    aos_pool_destroy(p);
    /* 割り当てられたグローバルリソースを解放します。プログラムのライフサイクルでグローバルリソースを解放する必要があるのは 1 回だけです。*/
    aos_http_io_deinitialize();
    return 0;
}

Swift

  1. OSS Swift SDK のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

import AlibabaCloudOSS
import Foundation

@main
struct Main {
    static func main() async {
        // バケットが配置されているリージョンを指定します。例: 中国 (杭州) は cn-hangzhou です。
        let region = "cn-hangzhou"
        // オプション。OSS にアクセスするエンドポイントを指定します。中国 (杭州) の場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
        let endpoint: String? = nil

        // 環境変数からアクセス資格情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        let credentialsProvider = EnvironmentCredentialsProvider()

        // OSS クライアントのパラメーターを設定します。
        let config = Configuration.default()
            .withRegion(region)        // バケットが配置されているリージョンを設定します。
            .withCredentialsProvider(credentialsProvider)  // アクセス資格情報を設定します。
            
        // カスタムエンドポイントを設定します。
        if let endpoint = endpoint {
            config.withEndpoint(endpoint)
        }
        
        // OSS クライアントインスタンスを作成します。
        let client = Client(config)
    }
}

iOS

  1. OSS iOS SDKバージョン 2.11.1 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: OSSSignVersionV4

コードサンプル

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
NSString *endpoint = @"yourEndpoint";
// STS から取得した一時的な AccessKey ペアを指定します。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// STS から取得したセキュリティトークンを指定します。
NSString *securityToken = @"yourSecurityToken";
NSString *region = @"yourRegion";

id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClientConfiguration *configuration = [OSSClientConfiguration new];
configuration.signVersion = OSSSignVersionV4;
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider clientConfiguration:configuration];
client.region = region;

Android

  1. OSS Android SDKバージョン 2.3 以降にアップグレードします。

  2. 署名 V4 で OSS クライアントを初期化するときは、次のステップを実行する必要があります。

    • リクエストリージョンの識別子として、バケットのリージョン ID を指定します。たとえば、中国 (杭州) のリージョン ID は cn-hangzhou です。

    • V4 署名アルゴリズムの使用を明示的に宣言します。例: SignVersion.V4

コードサンプル

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
String endpoint = "yourEndpoint";
// STS から取得した一時的な AccessKey ペアを指定します。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// STS から取得したセキュリティトークンを指定します。
String securityToken = "yourSecurityToken";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "yourRegion";

OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// OSSClient インスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);

ossutil

ossutil 2.0

ossutil 2.0 コマンドラインインターフェイス のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。

署名 V1 と比較して、署名 V4 を使用する場合、ossutil を設定する際に、Region パラメーターをバケットのリージョン ID に設定する必要があります。

サンプルコマンド

Please enter Region [cn-hangzhou]:cn-hangzhou

ossutil 1.0

説明

ossutil 2.0 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。ossutil 1.0 から ossutil 2.0 に移行することをお勧めします。

ossutil 1.0 コマンドラインインターフェイス のバージョン 1.7.12 以降は、署名 V4 をサポートしています。

署名 V1 と比較して、署名 V4 を使用する場合は、コマンドで次の操作を行う必要があります。

  • --sign-version オプションを v4 に設定します。

  • --region オプションをバケットのリージョン ID に設定します。

サンプルコマンド

./ossutil64 --sign-version v4 --region cn-hangzhou mb oss://examplebucket

ossfs

ossfs 2.0

ossfs 2.0 (プレビュー) のすべてのバージョンは署名 V4 をサポートしていますが、デフォルトでは署名 V1 を使用します。

  1. アップグレードする前に、ossfs --version コマンドを実行して現在のバージョンを確認し、バージョンに基づいて次の前提条件を完了してください。

    重要

    アンインストールするとサービスが中断されます。この操作はオフピーク時に実行することをお勧めします。

    マウントされた OSS ファイルシステムをアンマウントします。<mountpoint> を実際のディレクトリに置き換えてください。

    sudo umount <mountpoint>

    アンマウント後、サンプルコマンドに従ってアップグレードします。

  2. 署名 V1 と比較して、署名 V4 を使用する場合は、マウントコマンドで次の操作を行う必要があります。

サンプルコマンド

ossfs2 mount /tmp/ossfs2-bucket/ -c /etc/ossfs2.conf   --oss_region=cn-hongkong

ossfs 1.0

ossfs 1.0 のバージョン 1.91.4 以降は、署名 V4 をサポートしています。

  1. アップグレードする前に、ossfs --version コマンドを実行して現在のバージョンを確認し、バージョンに基づいて次の前提条件を完了してください。

    重要

    アンインストールするとサービスが中断されます。この操作はオフピーク時に実行することをお勧めします。

    バージョン要件が満たされている場合は V4 にアップグレード

    マウントされた OSS ファイルシステムをアンマウントします。<mountpoint> を実際のディレクトリに置き換えてください。

    sudo umount <mountpoint>

    アンマウント後、サンプルコマンドに従ってアップグレードします。

    バージョン要件が満たされていない場合は V4 にアップグレード

    1. マウントされた OSS ファイルシステムをアンマウントします。<mountpoint> を実際のディレクトリに置き換えてください。

      sudo umount <mountpoint>
    2. 古いバージョンをアンインストールします。

      aptyum などのパッケージマネージャを使用して ossfs をインストールした場合は、次のコマンドを実行します。

      sudo apt remove ossfs  # Ubuntu/Debian システムの場合
      sudo yum remove ossfs  # CentOS/Anolis/Alibaba Cloud Linux システムの場合

      ソースコードから ossfs をコンパイルしてインストールした場合は、インストールディレクトリに移動して次のコマンドを実行します。

      sudo make uninstall
    3. 新しいバージョンをダウンロードしてインストールします

    新しいバージョンをインストールした後、サンプルコマンドに従ってアップグレードします。

  2. 署名 V1 と比較して、署名 V4 を使用する場合は、マウントコマンドで次の操作を行う必要があります。

  • sigv4 オプションを設定します。

  • region オプションをバケットのリージョン ID に設定します。

サンプルコマンド

ossfs examplebucket -o sigv4 -o region=cn-hangzhou  /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com 

API (手動での署名構築)

SDK は自動的に署名を計算するため、OSS ソフトウェア開発キット (SDK) を使用してリクエストを送信することをお勧めします。OSS SDK を使用できない場合は、手動で V4 署名を構築し、リクエストが正しいことを確認する必要があります。

署名メソッド

説明

リファレンス

ヘッダーに署名を含める

OSS では、ID 検証の最も一般的な方法は、HTTP リクエストの Authorization ヘッダーに署名を含めることです。POST 署名または URL 署名を使用する操作を除き、すべての OSS 操作では Authorization ヘッダーによる認証が必要です。

ヘッダーに V4 署名を含める

URL に署名を含める

署名やその他の必要なリクエスト情報を含む署名付き URL を生成することで、アクセス資格情報を公開することなく、特定の有効期間、OSS リソースへのサードパーティアクセスを許可できます。

URL に V4 署名を含める

POST リクエスト署名

PostObject 署名は、HTML フォームを介して OSS にファイルを直接アップロードできるメカニズムです。このメカニズムにより、ユーザーは Web ブラウザーなどのクライアントで HTML フォームを構築できます。フォームには、アップロードするファイルや、署名、AccessKey ペア、バケット名、オブジェクトキーなどのその他の必要なパラメーターのフィールドが含まれます。フォームが送信されると、この情報は HTTP POST リクエストを介して OSS に送信され、OSS は POST リクエストの有効性を検証します。

POST リクエストの V4 署名

署名 V1 の廃止スケジュールと影響

Alibaba Cloud Object Storage Service 署名バージョン 1 廃止のお知らせによると、Alibaba Cloud Object Storage Service の署名 V1 は、2025 年 3 月 1 日から新規のお客様 (新規 UID) に対して段階的に廃止されます。2025 年 9 月 1 日以降、署名 V1 は更新または維持されなくなり、新しいバケットでは利用できなくなります。

署名 V1 と署名 V4 の比較

項目

署名 V1

署名 V4

署名アルゴリズム

HMAC-SHA1

HMAC-SHA256

署名付き URL の有効期間

署名時刻は過去 7 日以上前でもかまいません。有効期間は 7 日を超えることができます。

署名時刻は過去 7 日間に制限されます。有効期間は 7 日間に制限されます。

署名文字列の構築

署名文字列には、HTTP メソッド、Content-MD5、Content-Type、日付、正規化されたヘッダー、およびリソースパスが含まれます。

署名文字列はより複雑な構造を持ち、リクエストメソッド、正規化された URI、正規化されたクエリパラメーター、正規化されたヘッダー、追加の署名付きヘッダー、およびペイロードハッシュが含まれます。

正規化されたヘッダーとクエリパラメーター

`x-oss-` プレフィックスを持つヘッダーのみが正規化されます。一部のクエリパラメーターのみが署名に含まれます。

`x-oss-` プレフィックスを持つすべてのヘッダーとデフォルトの署名付きヘッダー (`content-type` や `content-md5` など) が正規化されます。追加の署名付きヘッダーもサポートされています。

リソースパスのエンコーディング

リソースパスのスラッシュ (/) はエンコードされます。

リソースパスの / はエスケープされませんが、クエリパラメーターの /%2F としてエスケープする必要があります。

タイムスタンプと日付フォーマット

標準の HTTP 日付フォーマットを使用します。例: Wed, 21 Oct 2015 07:28:00 GMT。

UTC 時刻には ISO 8601 フォーマットを使用します。例: 20151021T072800Z。

リージョン情報

署名にはリージョン情報が含まれていません。

署名ルールではリージョンの概念が導入されています。署名文字列と署名キーの両方にリージョン ID を含める必要があります。

よくある質問

署名 V1 と署名 V4 のどちらを使用しているかをすばやく確認するにはどうすればよいですか。

LogSearch または Wireshark や Fiddler などのパケットキャプチャツールを使用して、OSS に送信される HTTP リクエストヘッダーの Authorization フィールドを表示できます。

  • 署名 V1: Authorization フィールドは OSS で始まり、次のフォーマットになります。

    Authorization: OSS <AccessKeyId>:<Signature>
  • 署名 V4: Authorization フィールドは OSS4-HMAC-SHA256 で始まり、次のフォーマットになります。

    Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<Date>/<Region>/oss/aliyun_v4_request, AdditionalHeaders=<Headers>, Signature=<Signature>

SignatureDoesNotMatch エラーを迅速にトラブルシューティングする方法

署名の計算が正しくない場合、システムは SignatureDoesNotMatch エラーコードを返します。問題をすばやく特定するには、サーバーとクライアントによって生成された署名関連の情報を比較します。サーバーから返される応答には、次の主要な情報が含まれています。

  • CanonicalRequest: サーバーによって生成された正規化されたクエリ文字列。

  • StringToSign: 正規化されたリクエストに基づいてサーバーによって生成された署名対象文字列。

  • Signature: サーバーによって計算された最終的な署名値。

これらのフィールドをクライアントによって生成された対応するフィールドと比較することで、違いをすばやく特定し、エラーの原因を見つけることができます。例:

  • CanonicalRequest が一致しない場合、リクエストパラメーターの連結順序またはフォーマットが正しくない可能性があります。

  • StringToSign が一致しない場合、日付、リージョン、またはクラウドプロダクト情報が正しく設定されていない可能性があります。

  • Signature が一致しない場合、派生キーの計算または署名アルゴリズムの実装に問題がある可能性があります。