クイックスタート
OSS C# SDK 2.0 を使用するための手順を以下に示します。
環境の準備
.NET Framework 4.7.1以降のバージョンが必要です。.NET Standard 2.0以降のバージョンが必要です。.NET 5.0以降のバージョンが必要です。ご利用の計算環境がこれらの要件を満たさない場合は、以下の手順に従ってください:
Microsoft .NET Framework の場合:「Microsoft の公式 Web サイト」から、Microsoft .NET Framework 4.7.1 以降のバージョンをダウンロードしてインストールしてください。
.NET Standard の場合:仕様である .NET Standard は、.NET Framework や .NET などの .NET 実装によってサポートされます。互換性のある .NET 実装がインストールされていることを確認してください。
.NET の場合: .NET 公式サイトから .NET 5.0 以降のバージョンをダウンロードしてインストールします。
SDK のインストール
このトピックで紹介するサンプルコードが期待通りに動作するよう、OSS C# SDK 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 ペアを使用してアクセス認証情報を設定します。
RAM コンソール から、永続的な AccessKey ペア を持つ RAM ユーザーを作成し、AccessKey ペアを保存した後、ユーザーに
AliyunOSSFullAccess権限を付与します。RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。
Linux
以下のコマンドを実行して、環境変数の設定を
~/.bashrcファイルに追加します。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc以下のコマンドを実行して変更を適用します。
source ~/.bashrc以下のコマンドを実行して、環境変数が正しく設定されたことを確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
デフォルトのシェルタイプを確認するため、以下のコマンドをターミナルで実行します。
echo $SHELLデフォルトのシェルタイプに応じて、以下の手順に従います。
Zsh
以下のコマンドを実行して、環境変数の設定を
~/.zshrcファイルに追加します。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc以下のコマンドを実行して変更を適用します。
source ~/.zshrc以下のコマンドを実行して、環境変数が正しく設定されたことを確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
以下のコマンドを実行して、環境変数の設定を
~/.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以下のコマンドを実行して変更を適用します。
source ~/.bash_profile以下のコマンドを実行して、環境変数が正しく設定されたことを確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
CMD で以下のコマンドを実行して環境変数を設定します。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"以下のコマンドを実行して、環境変数が正しく設定されたことを確認します。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
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)以下のコマンドを実行して、環境変数が正しく設定されたことを確認します。
[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 へのアクセスに使用するエンドポイント。null の場合、SDK がリージョンに基づいてエンドポイントを生成します。例:中国 (杭州) のエンドポイントは "https://oss-cn-hangzhou.aliyuncs.com" です。
var key = "your-object-key"; // 必須。アップロードするオブジェクトのキー。例:folder/objectName。
// デフォルトの 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);
// アップロードするコンテンツを定義します。この例では文字列を使用していますが、ファイルストリームやバイト配列も使用できます。
var content = "hello oss!";
// 文字列を UTF-8 エンコーディングされたバイト配列に変換し、MemoryStream でラップします。
// MemoryStream は小規模なアップロードに適しています。大規模なファイルの場合は FileStream をご検討ください。
var bodyStream = new MemoryStream(Encoding.UTF8.GetBytes(content));
// オブジェクトを非同期でアップロードします。
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(Alibaba Cloud へ問い合わせる際に使用)。
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==クライアント構成
カスタムドメイン名の使用
デフォルトドメイン名を使用して OSS にアクセスすると、ファイルのアクセスが拒否される、またはファイルのプレビューができないなどの問題が発生することがあります。カスタムドメイン名を使用した OSS へのアクセス により、ブラウザでファイルを直接プレビューできるだけでなく、CDN アクセラレーションによるディストリビューションも可能になります。
using OSS = AlibabaCloud.OSS.V2; // 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();
// <code>OSS_ACCESS_KEY_ID</code> および <code>OSS_ACCESS_KEY_SECRET</code> 環境変数から認証情報を取得するようにクライアントを設定します。
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// バケットのリージョンを指定します。
cfg.Region = region;
// エンドポイントが指定されている場合、デフォルトのエンドポイントがオーバーライドされます。
if (endpoint != null)
{
cfg.Endpoint = endpoint;
}
// 注: CNAME を使用してカスタムドメイン名を利用するには、この値を <code>true</code> に設定する必要があります。
cfg.UseCName = true;
// OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg);
// クライアントを使用して操作を実行します...OSS_ACCESS_KEY_SECRETtrue内部エンドポイントの使用
同一リージョン内の 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();
// 認証に環境変数(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);
// 作成したクライアントを使用して、その後の操作を実行します...アクセラレーションエンドポイントの使用
using OSS = AlibabaCloud.OSS.V2; // 簡潔さのため、Alibaba Cloud OSS SDK にエイリアスを作成します。
var region = "cn-hangzhou"; // 必須。バケットのリージョン。例:中国 (杭州) の場合、"cn-hangzhou" を設定します。
var endpoint = "https://oss-accelerate.aliyuncs.com"; // オプション。バケットのリージョン用のアクセラレーションエンドポイント。
// SDK のデフォルト構成を読み込みます。これにより、環境変数(例:AccessKey ペア)から認証情報を自動的に読み取ります。
var cfg = OSS.Configuration.LoadDefault();
// 認証に環境変数を使用するように、プロバイダーを明示的に構成します。
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。
// 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);
// 作成したクライアントを使用して、その後の操作を実行します... Alibaba Gov Cloud エンドポイントの使用
この例では、Alibaba 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";
// 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);
// クライアントを使用して、その後の操作を実行します... アクセス認証情報の構成
OSS では、認証情報を初期化する複数の方法が提供されています。認証および権限付与の要件に応じて、適切な方法を選択してください。
RAM ユーザーの AccessKey ペア
安全な環境で実行され、長期的な OSS アクセスを必要とし、頻繁な認証情報のローテーションに対応できないアプリケーションに対しては、Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペア(AccessKey ID および AccessKey Secret)を使用して認証情報プロバイダーを初期化します。ただし、この方法では AccessKey ペアを手動で管理する必要があり、セキュリティリスクおよびメンテナンスの複雑さが増加します。
Alibaba Cloud アカウントは、すべてのリソースに対して完全な権限を持ちます。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、システム全体が重大なセキュリティリスクにさらされます。そのため、Alibaba Cloud アカウントの AccessKey ペアの使用は推奨しません。代わりに、最小限の必要な権限のみを持つ RAM ユーザーの AccessKey ペアをご利用ください。
RAM ユーザーの AccessKey ペアを作成するには、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID および AccessKey Secret は、作成時にのみ表示されます。必ず直ちに保存してください。AccessKey ペアを忘れてしまった場合は、新しいペアを作成してください。
環境変数
RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。
Linux
-
CLI で以下のコマンドを実行し、環境変数の設定を
~/.bashrcファイルに追加します:echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc-
変更を適用します。
source ~/.bashrc -
環境変数が有効になっていることを確認します:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
-
macOS
-
ターミナルで以下のコマンドを実行し、デフォルトのシェルタイプを確認します:
echo $SHELL-
デフォルトのシェルタイプに応じて、環境変数を設定します。
Zsh
-
以下のコマンドを実行し、環境変数の設定を
~/.zshrcファイルに追加します:echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
変更を適用します。
source ~/.zshrc -
環境変数が有効になっていることを確認します:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
-
以下のコマンドを実行し、環境変数の設定を
~/.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 -
変更を適用します。
source ~/.bash_profile -
環境変数が有効になっていることを確認します:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
-
-
Windows
CMD
-
CMD で以下のコマンドを実行します:
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"-
環境変数が有効になっていることを確認します:
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
-
PowerShell
-
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)-
環境変数が有効になっていることを確認します:
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
-
-
システム環境変数を変更した後は、IDE、コマンドラインインターフェイス、その他のデスクトップアプリケーション、バックエンドサービスなど、コンパイルおよび実行環境を再起動または更新してください。これにより、これらの環境が最新の変数を読み込むことができます。
環境変数を使用して認証情報を渡します。
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);
静的認証情報
以下のサンプルコードでは、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 認証情報の使用
この方法では、STS トークンを手動で管理する必要があり、セキュリティリスクおよびメンテナンスの複雑さが増加します。また、一時的なアクセスを繰り返すために、STS トークンを手動で更新する必要があります。
OpenAPI オペレーションを呼び出して一時的な ID 認証情報を取得するには、「AssumeRole - ロールセッション用の一時的な ID 認証情報の取得」をご参照ください。
SDK を使用して一時的な ID 認証情報を取得するには、「セキュリティトークンサービス (STS) の一時的な ID 認証情報を使用した OSS へのアクセス」をご参照ください。
トークンは有効期限が切れた時点で自動的に無効になります。
STS エンドポイントの一覧については、「エンドポイント」をご参照ください。
環境変数
一時的な ID 認証情報を使用して環境変数を設定します。
macOS、Linux、および UNIX
警告RAM ユーザーの AccessKey ID および AccessKey Secret ではなく、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 ID および AccessKey Secret ではなく、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>環境変数を使用して認証情報を提供します。
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 のデフォルト構成を読み込みます。これにより、環境変数から認証情報を自動的に読み取ります。 var cfg = OSS.Configuration.LoadDefault(); // 認証に環境変数(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 ID、AccessKey Secret、およびセキュリティトークンを直接設定することにより、アクセス認証情報をハードコードする方法を示します。
本番環境のアプリケーションにアクセス認証情報を埋め込まないでください。この方法はテスト目的のみで使用してください。
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();
// STS から取得した一時的な AccessKey ID および AccessKey Secret を指定します。これらは Alibaba Cloud アカウントの認証情報とは異なります。
// STS から取得した AccessKey ID は、以下の例のように "STS." で始まります。
var access_key_id = "STS.****************";
var access_key_secret = "yourAccessKeySecret";
// STS から取得したセキュリティトークンを指定します。
var securityToken = "yourSecurityToken";
// 静的認証情報プロバイダーを作成し、一時的な AccessKey ID、AccessKey Secret、およびセキュリティトークンを明示的に設定します。
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 への委任アクセスを必要とする場合、RAM ロール ARN を使用して認証情報プロバイダーを初期化できます。この方法では内部的に STS トークンが使用されます。RAM ロール ARN を指定すると、Credentials ユーティリティが自動的に AssumeRole オペレーションを呼び出して STS トークンを取得し、有効期限が切れる前に更新します。さらに、policy パラメーターに値を割り当てることで、RAM ロールの権限をさらに制限できます。
Alibaba Cloud アカウントは、すべてのリソースに対して完全な権限を持ちます。Alibaba Cloud アカウントの AccessKey ペアが漏洩すると、システム全体が重大なセキュリティリスクにさらされます。セキュリティを強化するため、最小限の必要な権限のみを持つ RAM ユーザーの AccessKey ペアをご利用ください。
RAM ユーザーの AccessKey ペアを作成するには、「AccessKey ペアの作成」をご参照ください。AccessKey ID および AccessKey Secret は、作成時にのみ表示されます。必ず AccessKey ペアを保存してください。AccessKey ペアを忘れてしまった場合は、新しいペアを作成してください。
RAM ロール ARN を取得するには、「ロールの作成」をご参照ください。
Aliyun.Credentials 依存関係を追加します。
dotnet add package Aliyun.Credentials --source https://api.nuget.org/v3/index.jsonAccessKey ペアおよび 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" に設定します。 // RAM ロール ARN を使用した Alibaba Cloud 認証情報の構成。 // 認証情報タイプのその他の例については、https://github.com/aliyun/credentials-csharp をご参照ください。 var credConfig = new Aliyun.Credentials.Models.Config() { // 認証情報タイプを "ram_role_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>", // オプション。STS トークンの権限を制限するポリシー。 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 のワーカーノード上で実行される場合、ECS RAM ロールを使用して認証情報プロバイダーを初期化することを推奨します。このアプローチでは STS トークンが使用されます。ECS RAM ロールにより、ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes のワーカーノードにロールを関連付けることができ、インスタンス内で STS トークンを自動的に更新できます。この方法により、AccessKey ペアまたは STS トークンを手動で管理することに伴うセキュリティリスクおよびメンテナンス負荷を排除できます。「CreateRole」をご参照ください。
Aliyun.Credentials 依存関係を追加します。
dotnet add package Aliyun.Credentials --source https://api.nuget.org/v3/index.jsonECS RAM ロールを使用してアクセス認証情報を構成します。
using OSS = AlibabaCloud.OSS.V2; // 使用を簡略化するため、OSS SDK にエイリアスを作成します。 using Aliyun.Credentials.Models; // 必須。バケットが配置されているリージョン。例:中国 (杭州) の場合、リージョンを "cn-hangzhou" に設定します。 var region = "cn-hangzhou"; // オプション。OSS へのアクセスエンドポイント。例:中国 (杭州) の場合、エンドポイントは "https://oss-cn-hangzhou.aliyuncs.com" です。 var endpoint = null as string; // 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 の使用
Container Service for Kubernetes のワーカーノードに RAM ロールを設定した後、そのノード上の Pod 内のアプリケーションは、ECS インスタンスにデプロイされたアプリケーションと同様に、メタデータサービスから関連付けられたロールの STS トークンを取得できます。ただし、クラスターに信頼されないアプリケーション(コードを検査できない顧客のアプリケーションなど)をデプロイする場合、メタデータサービスを介してワーカーノードに関連付けられたインスタンス RAM ロールの STS トークンを取得することを防止する必要があります。クラウドリソースを保護しつつ、こうした信頼されないアプリケーションが安全に必要な STS トークンを取得できるようにするには、アプリケーションレベルで最小権限の原則を実装するための「RAM Roles for Service Accounts (RRSA)」を使用できます。クラスターは自動的にサービスアカウント OIDC トークンファイルを作成し、各 Pod にマウントし、構成の詳細を環境変数として挿入します。その後、認証情報ユーティリティがセキュリティトークンサービス (STS) の AssumeRoleWithOIDC オペレーションを呼び出して、OIDC トークンをロールにバインドされた STS トークンと交換します。この方法により、静的な AccessKey ペアや STS トークンを管理することに伴うリスクおよびメンテナンス負荷を排除できます。「RRSA を使用した Pod 権限の分離」をご参照ください。
Aliyun.Credentials 依存関係を追加します。
dotnet add package Aliyun.Credentials --source https://api.nuget.org/v3/index.json
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_PROVIDER_NAME。 // OIDCProviderArn はオプションです。ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を代わりに設定できます。 OIDCProviderArn = "<OIDCProviderArn>", // 形式:path。 // OIDCTokenFilePath はオプションです。ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を代わりに設定できます。 OIDCTokenFilePath = "/Users/xxx/xxx", // ロールセッション名。 RoleSessionName = "<RoleSessionName>", // オプション。STS トークンの権限を制限します。 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-access-key-id"; // 必須。RAM ユーザーまたは一時的なアクセス認証情報の AccessKey ID。
var AccessKeySecret = "your-access-key-secret"; // 必須。RAM ユーザーまたは一時的なアクセス認証情報の AccessKey Secret。
// var SecurityToken = "your-security-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); // セキュリティトークン。
});
// 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 C# SDK V2 では、参考またはアプリケーションへの直接利用を目的とした豊富なサンプルコードが提供されています。
サンプル | GitHub サンプルファイル |