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

Object Storage Service:OSS SDK for C# V2.0

最終更新日:Dec 18, 2025

GitHub | SDK リリース

迅速な統合

OSS SDK for C# 2.0 を統合する手順は次のとおりです。

image

環境準備

  • SDK は .NET Framework 4.7.1 以降をサポートしています。

  • SDK は .NET Standard 2.0 以降をサポートしています。

  • SDK は .NET 5.0 以降をサポートしています。

  • 必要な .NET 環境がない場合、またはバージョンが古い場合は、次の手順に従ってください。

    • .NET Framework の場合: Microsoft の公式サイトにアクセスし、.NET Framework 4.7.1 以降をダウンロードしてインストールしてください。

    • .NET Standard の場合:.NET Standard は、.NET Framework や .NET などのさまざまな .NET プラットフォームでサポートされている実装仕様です。互換性のある .NET 実装がインストールされていることを確認してください。

    • .NET の場合: 公式 .NET サイトから .NET 5.0 以降をダウンロードしてインストールします。

SDK のインストール

このトピックのサンプルコードが期待どおりに実行されるように、最新バージョンの OSS SDK for C# V2 を使用してください。

NuGet を使用したインストール

  • NuGet がインストールされているかの確認:

    • Visual Studio に NuGet パッケージマネージャーがインストールされていることを確認します。インストールされていない場合は、[ツール] -> [ツールと機能を取得] を選択して Visual Studio インストーラーを開きます。[ワークロード] タブで、[.NET デスクトップ開発] または [ASP.NET と Web 開発] を選択します。NuGet パッケージマネージャーは、これらのワークロードに自動的に含まれます。

  • プロジェクトを開く:

    • Visual Studio でプロジェクトを作成するか、既存のプロジェクトを開きます。

  • NuGet パッケージマネージャーを開く:

    • メニューバーで、[ツール] -> [NuGet パッケージマネージャー] -> [ソリューションの NuGet パッケージの管理] を選択します。

  • SDK の検索とインストール

    • NuGet パッケージマネージャーの [参照] タブで、AlibabaCloud.OSS.V2 を検索します。

    • 検索結果で AlibabaCloud.OSS.V2 を見つけて選択します。最新の安定バージョンを選択していることを確認してください。

    • [インストール] をクリックしてパッケージをインストールします。インストールが完了するまで待ちます。

  • インストールの確認

    • インストールが完了すると、ソリューションエクスプローラーの [参照] の下に AlibabaCloud.OSS.V2 が表示されます。これで、プロジェクトで SDK が提供する機能を使用できます。

プロジェクトのインポートによるインストール

  • GitHub リポジトリのクローン:

    • コマンドプロンプトまたは Git Bash を開き、次のコマンドを実行してリポジトリをクローンします。

      git clone https://github.com/aliyun/alibabacloud-oss-csharp-sdk-v2.git
  • ソリューションへのプロジェクトの追加

    • Visual Studio で、ソリューションを右クリックし、[追加] -> [既存のプロジェクト...] を選択します。

    • クローンしたソースコードディレクトリに移動し、AlibabaCloud.OSS.V2.csproj ファイルを選択して、[開く] をクリックします。

  • プロジェクト参照の追加

    • プロジェクトを右クリックし、[追加] -> [参照...] を選択します。

    • 表示されるダイアログボックスで、[プロジェクト] タブに移動し、AlibabaCloud.OSS.V2 プロジェクトを選択して、[OK] をクリックします。

アクセス認証情報の設定

RAM ユーザーの AccessKey ペアを使用してアクセス認証情報を設定します。

  1. RAM コンソールで、[永続的な AccessKey ペア] を使用する RAM ユーザーを作成し、AccessKey ペアを保存してから、RAM ユーザーに AliyunOSSFullAccess 権限を付与します。

  2. RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。

    Linux

    1. コマンドラインインターフェイスで次のコマンドを実行して、環境変数の設定を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 次のコマンドを実行して設定を適用します。

        source ~/.bashrc
      2. 次のコマンドを実行して、環境変数が設定されていることを確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを確認します。

      echo $SHELL
      1. デフォルトのシェルタイプに応じた手順に従います。

        Zsh

        1. 次のコマンドを実行して、環境変数の設定を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 次のコマンドを実行して設定を適用します。

          source ~/.zshrc
        3. 次のコマンドを実行して、環境変数が設定されていることを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数の設定を ~/.bash_profile ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. 次のコマンドを実行して設定を適用します。

          source ~/.bash_profile
        3. 次のコマンドを実行して、環境変数が設定されていることを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. コマンドプロンプトで次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 次のコマンドを実行して、環境変数が設定されていることを確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell で次のコマンドを実行します。

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. 次のコマンドを実行して、環境変数が設定されていることを確認します。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

クライアントの初期化

リージョンとエンドポイントに基づいて OSSClient を初期化し、テストコードを実行します。

using System.Text; // 文字コード (UTF-8 エンコード文字列など) を処理するために System.Text 名前空間をインポートします。
using OSS = AlibabaCloud.OSS.V2; // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。

var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
var bucket = "your bucket name";  // 必須。宛先バケットの名前。
var endpoint = null as string;  // 任意。OSS へのアクセスに使用されるエンドポイント。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var key = "your object key"; // 必須。アップロードするオブジェクトの名前。形式は folder/objectName です。

// OSS SDK のデフォルト設定を読み込みます。この設定は、環境変数から AccessKey ペアなどの認証情報を自動的に読み取ります。
var cfg = OSS.Configuration.LoadDefault();
// 環境変数を使用して ID 検証用の認証情報を取得することを明示的に指定します。形式は 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);

// アップロードするオブジェクトのコンテンツ。サンプルコンテンツ:単純な文字列 "hello oss!"。実際のシナリオでは、コンテンツはファイルストリームまたはバイト配列になります。
var content = "hello oss!";
// 文字列を UTF-8 エンコードされたバイト配列に変換し、MemoryStream にラップします。
// MemoryStream はメモリ内のデータストリームを処理するために使用され、小さなファイルのアップロードに適しています。大きなファイルには FileStream を使用します。
var bodyStream = new MemoryStream(Encoding.UTF8.GetBytes(content));

// PutObjectAsync メソッドを呼び出して、オブジェクトを非同期にアップロードします。バケット、キー、および本文を含むリクエストオブジェクトを渡す必要があります。
// このメソッドは、bodyStream 内のデータを指定されたバケット内の指定されたキーパスにアップロードします。
var result = await client.PutObjectAsync(new OSS.Models.PutObjectRequest()
{
    Bucket = bucket,    // 宛先バケットの名前。
    Key = key,          // バケット内のオブジェクトの一意のキー。 
    Body = bodyStream   // アップロードするコンテンツストリーム。この例では、メモリ内の文字列データです。
});

// アップロード結果を出力します。
Console.WriteLine("PutObject done");  // 操作が完了したことを示すメッセージ。
Console.WriteLine($"StatusCode: {result.StatusCode}");  // HTTP ステータスコード。
Console.WriteLine($"RequestId: {result.RequestId}");  // リクエスト ID。トラブルシューティングに使用されます。
Console.WriteLine("Response Headers:");  // レスポンスヘッダー情報。
result.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value));  // すべてのレスポンスヘッダーを走査して出力します。

コードを実行すると、次の結果が返されます。これは、ファイルが正常にアップロードされたことを示します。

PutObject done
StatusCode: 200
RequestId: 68808D6D6A91E53037F7AAE9
Response Headers:
Server : AliyunOSS
Date : Wed, 23 Jul 2025 07:21:17 GMT
Connection : keep-alive
x-oss-request-id : 68808D6D6A91E53037F7AAE9
Vary : Origin
ETag : "968205D07B5A124D6ADA9336826C2C90"
x-oss-hash-crc64ecma : 11833582957755287462
x-oss-version-id : CAEQpgEYgYCA3fPQ2MEZIiA2ZmI4NGZkZWQzMWY0ZDZkOTFmMjUxYzRkNGMxODdkZg--
x-oss-server-time : 90
Content-Length : 0
Content-MD5 : loIF0HtaEk1q2pM2gmwskA==

クライアント設定

クライアント設定オプション

パラメーター

説明

Region

(必須) リクエストが送信されるリージョン。

Configuration.Region = "cn-hangzhou"

Endpoint

エンドポイント

Configuration.Endpoint = "oss-cn-hangzhou.aliyuncs.com"

RetryMaxAttempts

失敗したリクエストの最大リトライ回数。

Configuration.RetryMaxAttempts = 5

Retryer

HTTP リクエストのリトライ実装。

Configuration.Retryer = new Retry.DefaultRetryer()

HttpTransport

カスタム HTTP クライアント。

Configuration.HttpTransport = new HttpTransport()

CredentialsProvider

(必須) アクセス認証情報。

Configuration.CredentialsProvider = new EnvironmentVariableCredentialsProvider()

UsePathStyle

パス形式のアクセスを使用するかどうかを指定します。デフォルトでは、仮想ホスト形式のアクセスが使用されます。

Configuration.UsePathStyle = true

UseCName

カスタムドメイン名を使用して OSS にアクセスするかどうかを指定します。デフォルト値は false です。

Configuration.UseCName = true

ConnectTimeout

接続を確立するためのタイムアウト期間。デフォルト値:10 秒。

Configuration.ConnectTimeout = TimeSpan.FromSeconds(30)

ReadWriteTimeout

データの読み書きのタイムアウト期間。デフォルト値:20 秒。

Configuration.ReadWriteTimeout = TimeSpan.FromMinutes(2)

InsecureSkipVerify

SSL 証明書の検証をスキップするかどうかを指定します。デフォルトでは、SSL 証明書は検証されます。

Configuration.InsecureSkipVerify = true

EnabledRedirect

HTTP リダイレクトを有効にするかどうかを指定します。デフォルトでは、HTTP リダイレクトは無効になっています。

Configuration.EnabledRedirect = true

ProxyHost

プロキシサーバーを設定します。

Configuration.ProxyHost = "http://proxy.example.com:8080"

SignatureVersion

署名バージョン。デフォルト値:v4。

Configuration.SignatureVersion = "v4"

DisableSsl

HTTP リクエストを使用するかどうかを指定します。デフォルトでは、HTTPS リクエストが使用されます。

Configuration.DisableSsl = true

UseDualStackEndpoint

デュアルスタックエンドポイントを使用するかどうかを指定します。デフォルト値は false です。

Configuration.UseDualStackEndpoint = true

UseAccelerateEndpoint

アクセラレーションエンドポイントを使用するかどうかを指定します。デフォルト値は false です。

Configuration.UseAccelerateEndpoint = true

UseInternalEndpoint

内部エンドポイントを使用するかどうかを指定します。デフォルト値は false です。

Configuration.UseInternalEndpoint = true

DisableUploadCrc64Check

アップロード時の 64 ビット巡回冗長検査 (CRC64) を無効にします。デフォルトでは、このチェックは有効です。

Configuration.DisableUploadCrc64Check = true

DisableDownloadCrc64Check

ダウンロード時の CRC64 チェックを無効にします。デフォルトでは、このチェックは有効です。

Configuration.DisableDownloadCrc64Check = true

AdditionalHeaders

署名される追加のリクエストヘッダー。このパラメーターは V4 署名でのみ有効です。

Configuration.AdditionalHeaders = new List<string> { "x-oss-meta-*" }

UserAgent

追加の User-Agent 情報。

Configuration.UserAgent = "MyApp/1.0"

カスタムドメイン名の使用

デフォルトの OSS エンドポイントを使用してオブジェクトにアクセスすると、オブジェクトにアクセスできない、またはブラウザでプレビューできない場合があります。カスタムドメイン名をマッピングして OSS にアクセスできます。これにより、ブラウザでオブジェクトをプレビューしたり、CDN を使用してコンテンツ配信を高速化したりできます。

using OSS = AlibabaCloud.OSS.V2; // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。

var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
var endpoint = "https://www.example-***.com";  // 必須。カスタムドメイン名。例:www.example-***.com。

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

// CNAME オプションを有効にするには、値を true に設定する必要があることに注意してください。そうしないと、カスタムドメイン名を使用できません。
cfg.UseCName = true;

// 設定に基づいて OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);

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

内部エンドポイントの使用

内部エンドポイントを使用して、同じリージョン内の OSS リソースにアクセスできます。これにより、トラフィックコストを削減し、アクセス速度を向上させます。

using OSS = AlibabaCloud.OSS.V2; // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。

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

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

// cfg.UseInternalEndpoint = true を設定して、内部エンドポイントを指定せずに内部エンドポイントを設定することもできます。
// cfg.UseInternalEndpoint = true;

// 設定に基づいて OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);

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

OSS アクセラレーションエンドポイントの使用

using OSS = AlibabaCloud.OSS.V2; // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。

var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
var endpoint = "https://oss-accelerate.aliyuncs.com";  // 任意。バケットが配置されているリージョンのアクセラレーションエンドポイント。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 'https://oss-accelerate.aliyuncs.com' に設定します。

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

// cfg.UseAccelerateEndpoint = true を設定して、アクセラレーションエンドポイントを指定せずにアクセラレーションエンドポイントを設定することもできます。
// cfg.UseAccelerateEndpoint = true;

// 設定に基づいて OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);

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

プライベートドメイン名の使用

using OSS = AlibabaCloud.OSS.V2; // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。

var region = "cn-hangzhou"; // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
var endpoint = "https://service.corp.example.com";  // 必須。専用ドメイン名。例:https://service.corp.example.com。

// OSS SDK のデフォルト設定を読み込みます。この設定は、環境変数から AccessKey ペアなどの認証情報を自動的に読み取ります。
var cfg = OSS.Configuration.LoadDefault();
// 環境変数を使用して ID 検証用の認証情報を取得することを明示的に指定します。形式は 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);

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

Alibaba Gov Cloud エンドポイントの使用

次のサンプルコードは、Gov Cloud エンドポイントを使用して OSSClient を設定する方法を示しています。

using OSS = AlibabaCloud.OSS.V2; // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。

var region = "cn-north-2-gov-1"; // 必須。バケットが配置されているリージョン。たとえば、バケットが中国北部 2 (Ali Gov 1) リージョンにある場合、リージョンを cn-north-2-gov-1 に設定します。
// 必須。バケットが配置されているリージョンの内部エンドポイント。たとえば、バケットが中国北部 2 (Ali Gov 1) リージョンにある場合、エンドポイントを 'https://oss-cn-north-2-gov-1-internal.aliyuncs.com' に設定します。
// HTTP プロトコルを使用するには、エンドポイントを 'http://oss-cn-north-2-gov-1-internal.aliyuncs.com' に設定します。
var endpoint = "https://oss-cn-north-2-gov-1-internal.aliyuncs.com";

// OSS SDK のデフォルト設定を読み込みます。この設定は、環境変数から AccessKey ペアなどの認証情報を自動的に読み取ります。
var cfg = OSS.Configuration.LoadDefault();
// 環境変数を使用して ID 検証用の認証情報を取得することを明示的に指定します。形式は 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);

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

アクセス認証情報の設定

OSS は、認証情報を初期化するための複数のメソッドを提供します。認証と権限付与の要件に基づいてメソッドを選択してください。

アクセス認証情報の選択

認証情報プロバイダーの初期化方法

シナリオ

先行する AccessKey ペアまたは STS トークンが必要か

基盤となる認証情報

認証情報の有効期間

認証情報のローテーションまたは更新方法

RAM ユーザーの AccessKey ペアの使用

外部からの攻撃を受けにくく、安全で安定した環境にデプロイされ、頻繁な認証情報のローテーションを必要とせずに Alibaba Cloud サービスへの長期的なアクセスが必要なアプリケーション。

はい

AK

長期間

手動ローテーション

STS トークンの使用

信頼できない環境にデプロイされ、アクセスの有効期間と権限の制御が必要なアプリケーション。

はい

STS トークン

一時的

手動更新

RAM ロール ARN の使用

Alibaba Cloud アカウント間で Alibaba Cloud サービスにアクセスする必要があるアプリケーションなど、Alibaba Cloud サービスへのアクセスに権限付与が必要なアプリケーション。

はい

STS トークン

一時的

自動更新

ECS RAM ロールの使用

Alibaba Cloud ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes のワーカーノードにデプロイされるアプリケーション。

いいえ

STS トークン

一時的

自動更新

OIDC ロール ARN の使用

Container Service for Kubernetes のワーカーノードにデプロイされる信頼できないアプリケーション。

いいえ

STS トークン

一時的

自動更新

カスタムアクセス認証情報の使用

上記の認証情報設定方法のいずれも要件を満たさない場合、認証情報を取得する方法をカスタマイズできます。

カスタム

カスタム

カスタム

カスタム

RAM ユーザーの AccessKey ペアの使用

Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペア (AccessKey ID と AccessKey Secret) を使用して、認証情報プロバイダーを初期化できます。この方法は、アプリケーションが安全で安定した環境にデプロイされ、OSS リソースへの長期的なアクセスが必要で、頻繁な認証情報のローテーションが不要な場合に適しています。ただし、この方法では AccessKey ペアを手動でメンテナンスする必要があり、セキュリティリスクとメンテナンスの複雑さが増します。

警告
  • Alibaba Cloud アカウントはすべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、システムは重大なセキュリティリスクにさらされます。Alibaba Cloud アカウントの AccessKey ペアは使用せず、代わりに最小限の権限を付与した RAM ユーザーの AccessKey ペアを使用してください。

  • RAM ユーザーの AccessKey ペアを作成する方法の詳細については、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID と AccessKey Secret は、AccessKey ペアが作成されたときにのみ表示されます。作成時に AccessKey ペアを保存する必要があります。AccessKey ペアを忘れた場合は、新しいものを作成する必要があります。

環境変数

  1. RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。

    Linux

    1. CLI で次のコマンドを実行して、環境変数の設定を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 変更を適用します。

        source ~/.bashrc
      2. 環境変数が有効になったかどうかを確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。

      echo $SHELL
      1. デフォルトのシェルタイプに基づいて環境変数を設定します。

        Zsh

        1. 次のコマンドを実行して、環境変数の設定を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 変更を適用します。

          source ~/.zshrc
        3. 環境変数が有効になったかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数の設定を ~/.bash_profile ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. 変更を適用します。

          source ~/.bash_profile
        3. 環境変数が有効になったかどうかを確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. CMD で次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 環境変数が有効になったかどうかを確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. PowerShell で次のコマンドを実行します。

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. 環境変数が有効になったかどうかを確認します。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. システム環境変数を変更した後、コンパイル環境とランタイム環境を再起動またはリフレッシュします。これらの環境には、IDE、コマンドラインインターフェイス、その他のデスクトップアプリケーション、およびバックエンドサービスが含まれます。これにより、最新のシステム環境変数が読み込まれます。

  3. 環境変数を使用して認証情報を渡します。

    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();
    // 環境変数を使用して ID 検証用の認証情報を取得することを明示的に指定します。形式は 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);

静的認証情報

次のサンプルコードは、AccessKey ペアを明示的に設定してアクセス認証情報をハードコーディングする方法を示しています。

警告

本番環境のアプリケーションにアクセス認証情報を埋め込まないでください。この方法はテスト目的でのみ使用されます。

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 に設定します。

var cfg = OSS.Configuration.LoadDefault();

// RAM ユーザーの AccessKey ID と AccessKey Secret を指定します。
var access_key_id = "yourAccessKeyId";
var access_key_secret = "yourAccessKeySecret";
// 静的な認証情報プロバイダーを作成し、RAM ユーザーの AccessKey ID と AccessKey Secret を明示的に設定します。
cfg.CredentialsProvider = new OSS.Credentials.StaticCredentialsProvider(access_key_id,access_key_secret);

// バケットのリージョンを設定します。
cfg.Region = region;   
// エンドポイントが指定されている場合、デフォルトのエンドポイントは上書きされます。 
if(endpoint != null) 
{
    cfg.Endpoint = endpoint;
} 

// 設定に基づいて OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);

STS トークンの使用

アプリケーションが OSS への一時的なアクセスを必要とする場合、Security Token Service (STS) から取得した一時的な ID 認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) を使用して認証情報プロバイダーを初期化できます。ただし、この方法では STS トークンを手動でメンテナンスする必要があり、セキュリティリスクとメンテナンスの複雑さが増します。さらに、OSS に複数回一時的にアクセスするには、STS トークンを手動で更新する必要があります。

重要
  • OpenAPI 操作を呼び出して STS トークンを迅速に取得する方法については、「AssumeRole」をご参照ください。

  • SDK を使用して STS トークンを取得する方法については、「STS トークンを使用した OSS へのアクセス」をご参照ください。

  • STS トークンを生成する際には、有効期限を指定する必要があります。STS トークンは有効期限が切れると無効になり、使用できなくなります。

  • STS エンドポイントのリストについては、「エンドポイント」をご参照ください。

環境変数

  1. 一時的な ID 認証情報を使用して環境変数を設定します。

    Mac OS X/Linux/UNIX

    警告
    • RAM ユーザーの AccessKey ペアではなく、STS から取得した一時的な ID 認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) を使用します。

    • STS から取得した AccessKey ID は `STS.` で始まります。例:`STS.L4aBSCSJVMuKg5U1****`。

    export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>

    Windows

    警告
    • RAM ユーザーの AccessKey ペアではなく、STS から取得した一時的な ID 認証情報 (AccessKey ID、AccessKey Secret、およびセキュリティトークン) を使用します。

    • STS から取得した AccessKey ID は `STS.` で始まります。例:`STS.L4aBSCSJVMuKg5U1****`。

    set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>
  2. 環境変数を使用して認証情報を渡します。

    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();
    // 環境変数を使用して ID 検証用の認証情報を取得することを明示的に指定します。形式は OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET、および OSS_SESSION_TOKEN です。
    cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
    // バケットのリージョンを設定します。
    cfg.Region = region;   
    // エンドポイントが指定されている場合、デフォルトのエンドポイントは上書きされます。 
    if(endpoint != null) 
    {
        cfg.Endpoint = endpoint;
    } 
    
    // 設定に基づいて OSS クライアントインスタンスを作成します。
    using var client = new OSS.Client(cfg);

静的認証情報

次のサンプルコードは、一時的な AccessKey ペアを明示的に設定してアクセス認証情報をハードコーディングする方法を示しています。

警告

本番環境のアプリケーションにアクセス認証情報を埋め込まないでください。この方法はテスト目的でのみ使用されます。

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 に設定します。

var cfg = OSS.Configuration.LoadDefault();

// Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret ではなく、一時的な AccessKey ID と AccessKey Secret を指定します。
// STS から取得した AccessKey ID は、次のコードに示すように STS で始まることに注意してください。
var access_key_id = "STS.****************";
var access_key_secret = "yourAccessKeySecret";
// 取得した STS トークンを指定します。
var securityToken = "yourSecurityToken";
// 静的な認証情報プロバイダーを作成し、一時的な AccessKey ID、AccessKey Secret、および STS トークンを明示的に設定します。
cfg.CredentialsProvider = new OSS.Credentials.StaticCredentialsProvider(access_key_id, access_key_secret, securityToken);

// バケットのリージョンを設定します。
cfg.Region = region;   
// エンドポイントが指定されている場合、デフォルトのエンドポイントは上書きされます。 
if(endpoint != null) 
{
    cfg.Endpoint = endpoint;
} 

// 設定に基づいて OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);

RAM ロール ARN の使用

アプリケーションが OSS へのアクセスに権限付与を必要とする場合 (異なる Alibaba Cloud アカウント間で OSS にアクセスするなど)、RAM ロールの Alibaba Cloud リソースネーム (ARN) を使用して認証情報プロバイダーを初期化できます。このメソッドの基盤となる実装では、STS トークンが使用されます。RAM ロールの ARN を指定すると、Credentials ツールは STS から STS トークンを取得します。このツールはまた、現在のセッションが期限切れになる前に AssumeRole 操作を呼び出して新しい STS トークンを要求します。さらに、policy パラメーターに値を割り当てて、RAM ロールをより小さな権限セットに制限することもできます。

重要
  • Alibaba Cloud アカウントはすべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、システムは重大なセキュリティリスクにさらされます。Alibaba Cloud アカウントの AccessKey ペアは使用せず、代わりに最小限の権限を付与した RAM ユーザーの AccessKey ペアを使用してください。

  • RAM ユーザーの AccessKey ペアを作成する方法の詳細については、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID と AccessKey Secret は、AccessKey ペアが作成されたときにのみ表示されます。作成時に AccessKey ペアを保存する必要があります。AccessKey ペアを忘れた場合は、新しいものを作成する必要があります。

  • RAM ロール ARN を取得する方法の詳細については、「CreateRole」をご参照ください。

  1. Aliyun.Credentials 依存関係を追加します。

    dotnet add package Aliyun.Credentials --source https://api.nuget.org/v3/index.json
  2. AccessKey ペアと RAM ロール ARN を使用してアクセス認証情報を設定します。

    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 に設定します。
    
    // Alibaba Cloud 認証情報設定 - RAM ロール ARN を使用します。
    // 認証情報の種類の詳細については、https://github.com/aliyun/credentials-csharp をご参照ください。
    var credConfig = new Aliyun.Credentials.Models.Config()
    {
        // 認証情報の種類を RAM ロール ARN として指定します。
        Type = "ram_role_arn",
        // 環境変数から AccessKey ID を読み取ります。
        AccessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"),
        // 環境変数から AccessKey Secret を読み取ります。
        AccessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"),
        // RAM ロールの ARN。形式:acs:ram::USER_Id:role/ROLE_NAME。
        // このパラメーターは、ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定することもできます。
        RoleArn = "acs:ram::***************:role/******",
        // ロールセッションの名前。このパラメーターは現在のセッションを識別するために使用されます。
        RoleSessionName = "<RoleSessionName>",
        // 任意。引き受ける権限ポリシー。
        Policy = "<Policy>",
        // 任意。STS トークンの有効期間 (秒単位)。
        RoleSessionExpiration = 3600,
    };
    
    // 認証情報クライアントインスタンスを作成して、一時的なアクセス認証情報を取得します。
    var credClient = new Aliyun.Credentials.Client(credConfig);
    
    // 共通の認証情報を OSS SDK が要求する認証情報プロバイダーに変換します。
    var credentialsProvider = new OSS.Credentials.CredentialsProvideFunc(() =>
    {
        // 一時的な認証情報を取得します。
        var credential = credClient.GetCredential();
    
        // OSS SDK が要求する認証情報オブジェクトを構築します。
        return new OSS.Credentials.Credentials(
            credential.AccessKeyId,      // 一時的な AccessKey ID。
            credential.AccessKeySecret,  // 一時的な AccessKey Secret。
            credential.SecurityToken);   // STS トークン。
    });
    
    // OSS SDK のデフォルト設定を読み込みます。
    // デフォルトでは、認証情報は環境変数から読み込まれます。この例では、カスタム認証情報によって上書きされます。
    var cfg = OSS.Configuration.LoadDefault();
    // OSS リージョンを設定します。
    cfg.Region = region;
    // カスタム認証情報プロバイダーを設定します。
    cfg.CredentialsProvider = credentialsProvider;
    
    // カスタムエンドポイントが指定されている場合、デフォルト設定は上書きされます。
    if (endpoint != null)
    {
        cfg.Endpoint = endpoint;
    }
    
    // 設定に基づいて OSS クライアントインスタンスを作成します。
    using var client = new OSS.Client(cfg);
    
    // ListBuckets 操作用のページネーターを作成します。
    // これは、現在のアカウント配下にあるすべての OSS バケットを取得するために使用されます。
    var paginator = client.ListBucketsPaginator(new OSS.Models.ListBucketsRequest());
    
    // バケットのページ分割された結果を非同期で反復処理します。
    Console.WriteLine("Buckets:");
    await foreach (var page in paginator.IterPageAsync())
    {
        // 各ページのバケットを走査します。
        foreach (var bucket in page.Buckets ?? [])
        {
            // バケット情報 (名前、ストレージクラス、ロケーション) を出力します。
            Console.WriteLine($"Bucket:{bucket.Name}, {bucket.StorageClass}, {bucket.Location}");
        }
    }
    

ECS RAM ロールの使用

アプリケーションが ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes (ACK) のワーカーノードで実行される場合、ECS RAM ロールを使用して認証情報プロバイダーを初期化することを推奨します。このメソッドの基盤となる実装では、STS トークンが使用されます。ECS RAM ロールを使用すると、ロールを ECS インスタンス、ECI インスタンス、または ACK のワーカーノードに関連付けて、インスタンス内で STS トークンを自動的に更新できます。この方法では、AccessKey ペアや STS トークンを提供する必要がないため、それらを手動で管理する際のセキュリティリスクとメンテナンスのオーバーヘッドがなくなります。ECS RAM ロールを取得する方法の詳細については、「CreateRole」をご参照ください。

  1. Aliyun.Credentials 依存関係を追加します。

    dotnet add package Aliyun.Credentials --source https://api.nuget.org/v3/index.json
  2. ECS RAM ロールを使用してアクセス認証情報を設定します。

    using OSS = AlibabaCloud.OSS.V2;  // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。
    using Aliyun.Credentials.Models;
    
    var region = "cn-hangzhou";  // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
    var endpoint = null as string;  // 任意。OSS へのアクセスに使用されるエンドポイント。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    
    // 認証情報設定を作成し、認証に ECS RAM ロールを使用します。
    var credConfig = new Aliyun.Credentials.Models.Config()
    {
        // 認証情報の種類。
        Type = "ecs_ram_role",
        // ロール名。このパラメーターは任意です。このパラメーターを指定しない場合、ロール名は自動的に取得されます。リクエストを減らすために、このパラメーターを設定することを推奨します。
        RoleName = "<RoleName>"
    };
    
    // 認証情報クライアントを作成して、一時的なアクセス認証情報を取得します。
    var credClient = new Aliyun.Credentials.Client(credConfig);
    
    // 共通の認証情報を OSS SDK が要求する認証情報プロバイダーに変換します。
    var credentialsProvider = new OSS.Credentials.CredentialsProviderFunc(() =>
    {
        // 一時的な認証情報を取得します。
        var credential = credClient.GetCredential();
    
        // OSS SDK が要求する認証情報オブジェクトを構築します。
        return new OSS.Credentials.Credentials(
            credential.AccessKeyId,      // 一時的な AccessKey ID。
            credential.AccessKeySecret,  // 一時的な AccessKey Secret。
            credential.SecurityToken);   // STS トークン。
    });
    
    // OSS クライアントのデフォルト設定を読み込みます。
    var cfg = OSS.Configuration.LoadDefault();
    
    // OSS リージョンを設定します。
    cfg.Region = region;
    
    // カスタム認証情報プロバイダーを設定します。
    cfg.CredentialsProvider = credentialsProvider;
    
    // カスタムエンドポイントが指定されている場合、デフォルト設定は上書きされます。
    if (endpoint != null)
    {
        cfg.Endpoint = endpoint;
    }
    
    // 設定に基づいて OSS クライアントインスタンスを作成します。
    using var client = new OSS.Client(cfg);
    
    // 現在のロールアカウント配下にあるすべての OSS バケットを取得します。
    var paginator = client.ListBucketsPaginator(new OSS.Models.ListBucketsRequest());
    
    // バケットのページ分割された結果を非同期で反復処理します。
    Console.WriteLine("Buckets:");
    await foreach (var page in paginator.IterPageAsync())
    {
        // 各ページのバケットを走査します。
        foreach (var bucket in page.Buckets ?? [])
        {
            // バケット情報 (名前、ストレージクラス、ロケーション) を出力します。
            Console.WriteLine($"Bucket:{bucket.Name}, {bucket.StorageClass}, {bucket.Location}");
        }
    }

OIDC ロール ARN の使用

ACK のワーカーノードに RAM ロールを設定した後、そのノード上の Pod 内のアプリケーションは、ECS にデプロイされたアプリケーションと同様に、グローバルメタサービスを通じて関連付けられたロールの STS トークンを取得できます。ただし、信頼できないアプリケーションがコンテナークラスターにデプロイされている場合、それらのアプリケーションがワーカーノードに関連付けられたインスタンス RAM ロールの STS トークンをグローバルメタサービスを通じて取得することを望まない場合があります。信頼できないアプリケーションの例としては、コードが公開されていない顧客から提出されたアプリケーションが挙げられます。これらの信頼できないアプリケーションが必要な STS トークンを安全に取得できるようにし、アプリケーションレベルで権限を最小限に抑えつつ、クラウドリソースのセキュリティを損なわないようにするために、RAM Roles for Service Accounts (RRSA) 機能を使用できます。このメソッドの基盤となる実装では、STS トークンが使用されます。Alibaba Cloud コンテナークラスターは、各アプリケーション Pod に対応するサービスアカウント OpenID Connect (OIDC) トークンファイルを作成してマウントし、関連する設定情報を環境変数に注入します。Credentials ツールは環境変数から設定情報を取得し、STS の AssumeRoleWithOIDC 操作を呼び出して、バインドされたロールの STS トークンを取得します。この方法では、AccessKey ペアや STS トークンを提供する必要がないため、それらを手動で管理する際のセキュリティリスクとメンテナンスのオーバーヘッドがなくなります。詳細については、「RRSA に基づく Pod 権限の分離」をご参照ください。

  1. Aliyun.Credentials 依存関係を追加します。

    dotnet add package Aliyun.Credentials --source https://api.nuget.org/v3/index.json
  1. OIDC ロール ARN を使用してアクセス認証情報を設定します。

    using OSS = AlibabaCloud.OSS.V2;  // 後続の使用を簡略化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。
    using Aliyun.Credentials.Models;
    
    var region = "cn-hangzhou";  // 必須。バケットが配置されているリージョン。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
    var endpoint = null as string;  // 任意。OSS へのアクセスに使用されるエンドポイント。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    
    // 認証情報設定を作成し、認証に OIDC ロール ARN を使用します。
    var credConfig = new Aliyun.Credentials.Models.Config()
    {
       // 認証情報の種類。
        Type = "oidc_role_arn",
        // 形式:acs:ram::USER_Id:role/ROLE_NAME。
        // roleArn は任意です。代わりに ALIBABA_CLOUD_ROLE_ARN 環境変数を設定できます。
        RoleArn = "<RoleArn>",
        // 形式:acs:ram::USER_Id:oidc-provider/OIDC_IdP_name。
        // OIDCProviderArn は任意です。代わりに ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を設定できます。
        OIDCProviderArn = "<OIDCProviderArn>",
        // 形式:path。
        // OIDCTokenFilePath は任意です。代わりに ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を設定できます。
        OIDCTokenFilePath = "/Users/xxx/xxx",
        // ロールセッションの名前。
        RoleSessionName = "<RoleSessionName>",
        // 任意。引き受ける権限ポリシー。
        Policy = "<Policy>",
        // 任意。STS トークンの有効期間。
        RoleSessionExpiration = 3600,
    };
    
    // 認証情報クライアントを作成して、一時的なアクセス認証情報を取得します。
    var credClient = new Aliyun.Credentials.Client(credConfig);
    
    // 共通の認証情報を OSS SDK が要求する認証情報プロバイダーに変換します。
    var credentialsProvider = new OSS.Credentials.CredentialsProvideFunc(() =>
    {
        // 一時的な認証情報を取得します。
        var credential = credClient.GetCredential();
    
        // OSS SDK が要求する認証情報オブジェクトを構築します。
        return new OSS.Credentials.Credentials(
            credential.AccessKeyId,      // 一時的な AccessKey ID。
            credential.AccessKeySecret,  // 一時的な AccessKey Secret。
            credential.SecurityToken);   // STS トークン。
    });
    
    // OSS クライアントのデフォルト設定を読み込みます。
    var cfg = OSS.Configuration.LoadDefault();
    
    // OSS リージョンを設定します。
    cfg.Region = region;
    
    // カスタム認証情報プロバイダーを設定します。
    cfg.CredentialsProvider = credentialsProvider;
    
    // カスタムエンドポイントが指定されている場合、デフォルト設定は上書きされます。
    if (endpoint != null)
    {
        cfg.Endpoint = endpoint;
    }
    
    // 設定に基づいて OSS クライアントインスタンスを作成します。
    using var client = new OSS.Client(cfg);
    
    // 現在のロールアカウント配下にあるすべての OSS バケットを取得します。
    var paginator = client.ListBucketsPaginator(new OSS.Models.ListBucketsRequest());
    
    // バケットのページ分割された結果を非同期で反復処理します。
    Console.WriteLine("Buckets:");
    await foreach (var page in paginator.IterPageAsync())
    {
        // 各ページのバケットを走査します。
        foreach (var bucket in page.Buckets ?? [])
        {
            // バケット情報 (名前、ストレージクラス、ロケーション) を出力します。
            Console.WriteLine($"Bucket:{bucket.Name}, {bucket.StorageClass}, {bucket.Location}");
        }
    }

カスタムアクセス認証情報の使用

上記の認証情報設定方法のいずれも要件を満たさない場合、認証情報を取得するカスタムメソッドを実装できます。

Credentials.CredentialsProvideFunc インターフェイスの使用

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 に設定します。

// アクセス認証情報を明示的に設定します。これはデモンストレーション目的のみです。実際のプロジェクトでは、環境変数から認証情報を取得できます。
var AccessKeyId = "your AccessKeyId";  // 必須。RAM ユーザーの AccessKey ID または STS から取得した一時的な AccessKey ID。
var AccessKeySecret = "your AccessKeySecret";  // 必須。RAM ユーザーの AccessKey Secret または STS から取得した一時的な AccessKey Secret。
// var SecurityToken = "your STS Token";  // 任意。一時的なアクセス認証情報を使用する場合にこの変数を設定できます。

// 共通の認証情報を OSS SDK が要求する認証情報プロバイダーに変換します。
var credentialsProvider = new OSS.Credentials.CredentialsProvideFunc(() =>
{
   
    // 長期的な認証情報を使用して、OSS SDK が要求する認証情報オブジェクトを構築します。 
    return new OSS.Credentials.Credentials(
        AccessKeyId,        // RAM ユーザーの AccessKey ID。
        AccessKeySecret);   // RAM ユーザーの AccessKey Secret。

    // 一時的なアクセス認証情報を使用して、OSS SDK が要求する認証情報オブジェクトを構築します。 
    // return new OSS.Credentials.Credentials(
    //     AccessKeyId,      // 一時的な AccessKey ID。
    //     AccessKeySecret,  // 一時的な AccessKey Secret。
    //     SecurityToken);   // STS トークン。
});

// OSS クライアントのデフォルト設定を読み込みます。
var cfg = OSS.Configuration.LoadDefault();

// OSS リージョンを設定します。
cfg.Region = region;

// カスタム認証情報プロバイダーを設定します。
cfg.CredentialsProvider = credentialsProvider;

// カスタムエンドポイントが指定されている場合、デフォルト設定は上書きされます。
if (endpoint != null)
{
    cfg.Endpoint = endpoint;
}

// 設定に基づいて OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);

// 現在のロールアカウント配下にあるすべての OSS バケットを取得します。
var paginator = client.ListBucketsPaginator(new OSS.Models.ListBucketsRequest());

// バケットのページ分割された結果を非同期で反復処理します。
Console.WriteLine("Buckets:");
await foreach (var page in paginator.IterPageAsync())
{
    // 各ページのバケットを走査します。
    foreach (var bucket in page.Buckets ?? [])
    {
        // バケット情報 (名前、ストレージクラス、ロケーション) を出力します。
        Console.WriteLine($"Bucket:{bucket.Name}, {bucket.StorageClass}, {bucket.Location}");
    }
}

サンプルコード

OSS SDK for C# V2 は、参照用にさまざまなサンプルコードを提供しています。

サンプル

GitHub サンプルファイル

バケットの作成 (C# SDK V2)

PutBucket.cs

バケットの一覧表示 (C# SDK V2)

ListBuckets.cs

バケットの存在確認 (C# SDK V2)

IsBucketExist.cs

バケットのリージョン取得 (C# SDK V2)

GetBucketLocation.cs

バケット情報の取得 (C# SDK V2)

GetBucketInfo.cs

バケットのストレージ容量取得 (C# SDK V2)

GetBucketStat.cs

バケットの削除 (C# SDK V2)

DeleteBucket.cs

シンプルアップロード (C# SDK V2)

PutObject.cs

追加アップロード (C# SDK V2)

AppendObject.cs

マルチパートアップロード (C# SDK V2)

MultipartUpload.cs

フォームアップロード (C# SDK V2)

PostObject.cs

署名付き URL を使用したオブジェクトのアップロード (C# SDK V2)

PresignPutObject.cs

オブジェクトのメモリへのダウンロード (C# SDK V2)

GetObject.cs

オブジェクトのローカルファイルへのダウンロード (C# SDK V2)

GetObjectToFile.cs

署名付き URL を使用したオブジェクトのダウンロード (C# SDK V2)

PresignGetObject.cs

オブジェクトのコピー (C# SDK V2)

CopyObject.cs

オブジェクトの存在確認 (C# SDK V2)

IsObjectExist.cs

オブジェクトの一覧表示 (C# SDK V2)

ListObjects.cs

オブジェクトの削除 (C# SDK V2)

DeleteObject.cs

シンボリックリンクの管理 (C# SDK V2)

オブジェクトタグの設定 (C# SDK V2)

PutObjectTagging.cs

オブジェクトタグの取得 (C# SDK V2)

GetObjectTagging.cs

オブジェクトタグの削除 (C# SDK V2)

DeleteObjectTagging.cs

バケット ACL の管理 (C# SDK V2)

オブジェクト ACL の管理 (C# SDK V2)

バージョン管理の管理 (C# SDK V2)

同期処理 (C# SDK V2)

ProcessObject.cs

非同期処理 (C# SDK V2)

AsyncProcessObject.cs