Object Storage Service (OSS) は、署名 V1 を段階的に廃止します。アプリケーションをスムーズに実行するために、できるだけ早く、より安全な署名 V4 にアップグレードしてください。
署名 V1 から署名 V4 へのアップグレード方法
現在の使用状況に基づいて、対応するガイドに従ってアップグレードを完了してください。
ツール | タイプ | V4 をサポートするバージョン | アップグレードガイド |
OSS SDK | Java | ||
Python V2 | |||
Python V1 | |||
Go V2 | |||
Go V1 | |||
PHP V2 | |||
PHP V1 | |||
C# V2 | |||
C# V1 | |||
JavaScript | |||
C++ | |||
C | |||
Swift | |||
Objective-C | |||
Android | |||
ossutil | ossutil 2.0 | ||
ossutil 1.0 | |||
ossfs | ossfs 2.0 | ||
ossfs 1.0 | |||
API (手動での署名構築) | 手動で構築した V1 署名アルゴリズムを V4 にアップグレードする方法の詳細については、「API (手動での署名構築)」をご参照ください。 | ||
OSS コンソール | OSS は自動的にアップグレードされます。このプロセスはユーザーに対して透過的です。 | ||
OSS SDK
Java
OSS Java SDK をバージョン 3.17.4 以降にアップグレードします。
署名 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
OSS Python SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。
署名 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
OSS Python SDK V1 をバージョン 2.18.4 以降にアップグレードします。
署名 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
OSS Go SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。
署名 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 に移行することをお勧めします。
OSS Go SDK V1 をバージョン 3.0.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
OSS PHP SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。
署名 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
OSS PHP SDK V1 をバージョン 2.7.0 以降にアップグレードします。
署名 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
OSS C# SDK V2 のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。
署名 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
OSS C# SDK V1 をバージョン 2.14.0 以降にアップグレードします。
署名 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
OSS Node.js SDK をバージョン 6.20.0 以降にアップグレードします。
署名 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
OSS Browser.js SDK をバージョン 6.20.0 以降にアップグレードします。
署名 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++
OSS C++ SDK をバージョン 1.10.0 以降にアップグレードします。
署名 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
OSS C SDK をバージョン 3.11.0 以降にアップグレードします。
署名 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
OSS Swift SDK のすべてのバージョンは、デフォルトで署名 V4 をサポートしています。
署名 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
OSS iOS SDK をバージョン 2.11.1 以降にアップグレードします。
署名 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
OSS Android SDK をバージョン 2.3 以降にアップグレードします。
署名 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-hangzhouossutil 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://examplebucketossfs
ossfs 2.0
ossfs 2.0 (プレビュー) のすべてのバージョンは署名 V4 をサポートしていますが、デフォルトでは署名 V1 を使用します。
アップグレードする前に、
ossfs --versionコマンドを実行して現在のバージョンを確認し、バージョンに基づいて次の前提条件を完了してください。重要アンインストールするとサービスが中断されます。この操作はオフピーク時に実行することをお勧めします。
マウントされた OSS ファイルシステムをアンマウントします。
<mountpoint>を実際のディレクトリに置き換えてください。sudo umount <mountpoint>アンマウント後、サンプルコマンドに従ってアップグレードします。
署名 V1 と比較して、署名 V4 を使用する場合は、マウントコマンドで次の操作を行う必要があります。
oss_regionオプションをバケットのリージョン ID に設定します。
サンプルコマンド
ossfs2 mount /tmp/ossfs2-bucket/ -c /etc/ossfs2.conf --oss_region=cn-hongkongossfs 1.0
ossfs 1.0 のバージョン 1.91.4 以降は、署名 V4 をサポートしています。
アップグレードする前に、
ossfs --versionコマンドを実行して現在のバージョンを確認し、バージョンに基づいて次の前提条件を完了してください。重要アンインストールするとサービスが中断されます。この操作はオフピーク時に実行することをお勧めします。
バージョン要件が満たされている場合は V4 にアップグレード
マウントされた OSS ファイルシステムをアンマウントします。
<mountpoint>を実際のディレクトリに置き換えてください。sudo umount <mountpoint>アンマウント後、サンプルコマンドに従ってアップグレードします。
バージョン要件が満たされていない場合は V4 にアップグレード
マウントされた OSS ファイルシステムをアンマウントします。
<mountpoint>を実際のディレクトリに置き換えてください。sudo umount <mountpoint>古いバージョンをアンインストールします。
aptやyumなどのパッケージマネージャを使用して ossfs をインストールした場合は、次のコマンドを実行します。sudo apt remove ossfs # Ubuntu/Debian システムの場合 sudo yum remove ossfs # CentOS/Anolis/Alibaba Cloud Linux システムの場合ソースコードから ossfs をコンパイルしてインストールした場合は、インストールディレクトリに移動して次のコマンドを実行します。
sudo make uninstall
新しいバージョンをインストールした後、サンプルコマンドに従ってアップグレードします。
署名 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 ヘッダーによる認証が必要です。 | |
URL に署名を含める | 署名やその他の必要なリクエスト情報を含む署名付き URL を生成することで、アクセス資格情報を公開することなく、特定の有効期間、OSS リソースへのサードパーティアクセスを許可できます。 | |
POST リクエスト署名 | PostObject 署名は、HTML フォームを介して OSS にファイルを直接アップロードできるメカニズムです。このメカニズムにより、ユーザーは Web ブラウザーなどのクライアントで HTML フォームを構築できます。フォームには、アップロードするファイルや、署名、AccessKey ペア、バケット名、オブジェクトキーなどのその他の必要なパラメーターのフィールドが含まれます。フォームが送信されると、この情報は HTTP POST リクエストを介して OSS に送信され、OSS は POST リクエストの有効性を検証します。 |
署名 V1 の廃止スケジュールと影響
Alibaba Cloud Object Storage Service 署名バージョン 1 廃止のお知らせによると、Alibaba Cloud Object Storage Service の署名 V1 は、2025 年 3 月 1 日から新規のお客様 (新規 UID) に対して段階的に廃止されます。2025 年 9 月 1 日以降、署名 V1 は更新または維持されなくなり、新しいバケットでは利用できなくなります。
署名 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` など) が正規化されます。追加の署名付きヘッダーもサポートされています。 |
リソースパスのエンコーディング | リソースパスのスラッシュ (/) はエンコードされます。 | リソースパスの |
タイムスタンプと日付フォーマット | 標準の 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が一致しない場合、派生キーの計算または署名アルゴリズムの実装に問題がある可能性があります。