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

Object Storage Service:OSS SDK for Java 2.0 (プレビュー)

最終更新日:Dec 17, 2025

OSS SDK for Java V2 を使用すると、Alibaba Cloud Object Storage Service (OSS) を Java アプリケーションに統合できます。この SDK を使用して、ファイルのアップロード、ダウンロード、管理ができます。この SDK は、クラウドベースのファイルストレージを必要とする開発者、ウェブサイト、企業に最適です。

Github | OSS SDK for Java API | mvnrepository | deepwiki

クイック統合

以下の手順に従って、OSS SDK for Java V2 を統合します。

image

前提条件

Java 8 以降。

java -version コマンドを実行して、Java バージョンを確認できます。Java がインストールされていない場合、またはバージョンが Java 8 より前の場合は、Java をダウンロードしてインストールしてください。

SDK のインストール

Maven を使用して OSS SDK for Java V2 をインストールできます。

Maven

pom.xml ファイルに以下の依存関係を追加します。<version>Maven リポジトリの最新のバージョン番号に置き換えてください。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-oss-v2</artifactId>
    <version><!-- 最新のバージョン番号を指定します --></version>
</dependency>

ソースコード

Github から OSS SDK for Java V2 の最新バージョンを取得し、Maven を使用してビルドおよびインストールします。

mvn clean install -DskipTests -Dgpg.skip=true

アクセス認証情報の設定

RAM ユーザーの AccessKey ペアを環境変数として設定し、認証情報として使用します。

RAM コンソールで、アクセス用に RAM ユーザーと [永続的な AccessKey ペア] を作成します。 AccessKey ペアを保存し、ユーザーに AliyunOSSFullAccess 権限を付与します。

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 を初期化します。

  • OSSClient は AutoCloseable を実装しています。try-with-resources 文を使用してインスタンスを作成すると、リソースは自動的に解放されるため、手動で close() を呼び出す必要はありません。

  • OSSClient インスタンスの作成と破棄には時間がかかる場合があります。シングルトンパターンを使用して OSSClient インスタンスを再利用することを推奨します。このパターンを使用する場合、リソースリークを防ぐために、アプリケーションが終了する前に手動で close() を呼び出す必要があります。

    シングルトンパターン

    public class OssClientSingleton {
        private OssClientSingleton() {}
    
        private static class Holder {
            private static final OSSClient INSTANCE = OSSClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region("cn-hangzhou")
                .build();
        }
    
        public static OSSClient getInstance() {
            return Holder.INSTANCE;
        }
    
        // OSSClient インスタンスをクローズします。これは明示的に呼び出す必要があります。
        public static void shutdown() {
            try {
                getInstance().close();
            } catch (Exception e) {
                // クローズ例外を処理します。
            }
        }
    }
    

同期 OSSClient

操作が完了するのを待ってから次に進みたい場合は、同期 OSSClient を使用します。

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.exceptions.ServiceException;
import com.aliyun.sdk.service.oss2.models.*;
import com.aliyun.sdk.service.oss2.paginator.ListBucketsIterable;

public class Example {
    public static void main(String[] args) {
        String region = "cn-hangzhou";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
        OSSClientBuilder clientBuilder = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region(region);

        try (OSSClient client = clientBuilder.build()) {

            ListBucketsIterable paginator = client.listBucketsPaginator(
                    ListBucketsRequest.newBuilder()
                            .build());

            for (ListBucketsResult result : paginator) {
                for (BucketSummary info : result.buckets()) {
                    System.out.printf("bucket: name:%s, region:%s, storageClass:%s\n", info.name(), info.region(), info.storageClass());
                }
            }

        } catch (Exception e) {
//            ServiceException se = ServiceException.asCause(e);
//            if (se != null) {
//                System.out.printf("ServiceException: requestId:%s, errorCode:%s\n", se.requestId(), se.errorCode());
//            }
            System.out.printf("error:\n%s", e);
        }
    }
}

非同期 OSSClient

各操作の結果を待たずに複数の OSS 操作を同時に処理したい場合は、非同期 OSSClient を使用します。

import com.aliyun.sdk.service.oss2.OSSAsyncClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.exceptions.ServiceException;
import com.aliyun.sdk.service.oss2.models.*;

import java.util.concurrent.CompletableFuture;

public class ExampleAsync {
    public static void main(String[] args) {
        String region = "cn-hangzhou";
        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();

        try (OSSAsyncClient client = OSSAsyncClient.newBuilder()
                .region(region)
                .credentialsProvider(provider)
                .build()) {

            CompletableFuture<ListBucketsResult> future = client.listBucketsAsync(
                    ListBucketsRequest.newBuilder().build()
            );

            future.thenAccept(result -> {
                        for (BucketSummary info : result.buckets()) {
                            System.out.printf("bucket: name:%s, region:%s, storageClass:%s\n",
                                    info.name(), info.region(), info.storageClass());
                        }
                    })
                    .exceptionally(e -> {
//                ServiceException se = ServiceException.asCause(e);
//                if (se != null) {
//                    System.out.printf("Async ServiceException: requestId:%s, errorCode:%s\n",
//                            se.requestId(), se.errorCode());
//                }
                        System.out.printf("async error:\n%s\n", e);
                        return null;
                    });

            future.join();

        } catch (Exception e) {
            System.out.printf("main error:\n%s\n", e);
        }
    }
}

コードを実行すると、アカウントに関連付けられているすべてのリージョンのバケットがリスト表示されます。

bucket: name: examplebucket01, region: cn-hangzhou, storageClass: Standard
bucket: name: examplebucket02, region: cn-hangzhou, storageClass: Standard

クライアント設定

サポートされているクライアント設定

パラメーター

説明

region

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

credentialsProvider

(必須) アクセス認証情報を設定します。

endpoint

アクセス用のエンドポイント。

httpClient

HTTP クライアント。

retryMaxAttempts

HTTP リクエストの最大リトライ回数。デフォルト値は 3 です。

retryer

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

connectTimeout

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

readWriteTimeout

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

insecureSkipVerify

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

enabledRedirect

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

signatureVersion

署名バージョン。デフォルト値は v4 です。

disableSsl

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

usePathStyle

パス形式のリクエストフォーマット (第 2 レベルドメインリクエスト形式) を使用するかどうかを指定します。デフォルトはバケットホストドメイン名です。

useCName

アクセスにカスタムドメイン名を使用するかどうかを指定します。デフォルトでは、この機能は無効になっています。

useDualStackEndpoint

アクセスにデュアルスタックエンドポイントを使用するかどうかを指定します。デフォルトでは、この機能は無効になっています。

useAccelerateEndpoint

アクセスに転送アクセラレーションエンドポイントを使用するかどうかを指定します。デフォルトでは、この機能は無効になっています。

useInternalEndpoint

アクセスに内部の同一リージョンエンドポイントを使用するかどうかを指定します。デフォルトでは、この機能は無効になっています。

additionalHeaders

署名する追加のリクエストヘッダーを指定します。これは V4 署名で有効です。

userAgent

追加の User-Agent 情報を指定します。

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

デフォルトの OSS ドメイン名でアクセスすると、ファイルにアクセスできない、またはプレビューに失敗するなどの問題が発生する可能性があります。カスタムドメイン名を使用して OSS にアクセスすると、ブラウザで直接ファイルをプレビューしたり、CDN を使用してコンテンツ配信を高速化したりできます。

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

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

        // カスタムドメイン名を指定します。例えば、www.example-***.com。
        String endpoint = "https://www.example-***.com";

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                // 注意:useCName を true に設定して CNAME オプションを有効にしないと、カスタムドメイン名を使用できません。
                .useCName(true)
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

タイムアウト制御

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;
import java.time.Duration;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

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

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // 接続確立のタイムアウトを設定します。デフォルト値は 5 秒です。
                .connectTimeout(Duration.ofSeconds(30))
                // データの読み書きのタイムアウトを設定します。デフォルト値は 20 秒です。
                .readWriteTimeout(Duration.ofSeconds(30))
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

リトライポリシー

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;
import com.aliyun.sdk.service.oss2.retry.*;
import java.time.Duration;

public class Example {
    public static void main(String[] args) {
        /*
         * SDK リトライポリシー設定の説明:
         *
         * デフォルトのリトライポリシー:
         * リトライポリシーが設定されていない場合、SDK は StandardRetryer をデフォルトのクライアント実装として使用します。
         * そのデフォルト設定は以下の通りです:
         * - maxAttempts: 最大試行回数を設定します。デフォルトは 3 です。
         * - maxBackoff: 最大バックオフ時間を秒単位で設定します。デフォルトは 20 秒です。
         * - baseDelay: 基本遅延時間を秒単位で設定します。デフォルトは 0.2 秒です。
         * - backoffDelayer: バックオフアルゴリズムを設定します。デフォルトは FullJitter バックオフアルゴリズムです。
         *   計算式:[0.0, 1.0) * min(2^attempts * baseDelay, maxBackoff)
         * - errorRetryables: リトライ可能なエラータイプ。HTTP ステータスコード、サービスエラーコード、クライアントエラーが含まれます。
         *
         * リトライ可能なエラーが発生した場合、提供された設定を使用して遅延させ、リクエストを再試行します。
         * リクエストの全体的なレイテンシは、リトライ回数とともに増加します。デフォルト設定が
         * シナリオの要件を満たさない場合は、リトライパラメーターを設定するか、リトライ実装を変更できます。
         */

        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

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

        // リトライポリシー設定の例:

        // 1. 最大リトライ回数をカスタマイズします (デフォルトは 3、ここでは 5 に設定)。
        Retryer customRetryer = StandardRetryer.newBuilder()
                .maxAttempts(5)
                .build();

        // 2. バックオフ遅延時間をカスタマイズします。
        // baseDelay を 0.5 秒 (デフォルト 0.2 秒)、maxBackoff を 25 秒 (デフォルト 20 秒) に調整します。
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FullJitterBackoff(Duration.ofMillis(500), Duration.ofSeconds(25)))
        //         .build();

        // 3. バックオフアルゴリズムをカスタマイズします。
        // デフォルトの FullJitter アルゴリズムの代わりに、固定遅延バックオフアルゴリズムを使用し、毎回 2 秒遅延させます。
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FixedDelayBackoff(Duration.ofSeconds(2)))
        //         .build();

        // 4. リトライポリシーを無効にします。
        // すべてのリトライ試行を無効にするには、NopRetryer 実装を使用します。
        // Retryer customRetryer = new NopRetryer();

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .retryer(customRetryer)
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

HTTP/HTTPS プロトコル

disableSsl(true) を使用して HTTPS プロトコルを無効にできます。

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

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

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // HTTPS リクエストを使用しないように設定します。
                .disableSsl(true)
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

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

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

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 方法 1:リージョンを指定し、useInternalEndpoint を true に設定します。
        // バケットが配置されているリージョンを指定します。例えば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // // 方法 2:リージョンとエンドポイントを直接指定します。
        // // バケットが配置されているリージョンを指定します。例えば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
        // String region = "cn-hangzhou";
        // // バケットのリージョンの内部エンドポイントを指定します。中国 (杭州) の場合、エンドポイントは 'oss-cn-hangzhou-internal.aliyuncs.com' です。
        // String endpoint = "oss-cn-hangzhou-internal.aliyuncs.com";

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useInternalEndpoint(true)
                // .endpoint(endpoint) // 方法 2 を使用する場合は、この行のコメントを解除し、前の行をコメントアウトします。
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

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

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 方法 1:リージョンを指定し、useAccelerateEndpoint を true に設定します。
        // バケットが配置されているリージョンを指定します。例えば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // // 方法 2:リージョンと転送アクセラレーションエンドポイントを直接指定します。
        // // バケットが配置されているリージョンを指定します。例えば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
        // String region = "cn-hangzhou";
        // // バケットのリージョンの転送アクセラレーションエンドポイントを指定します。例えば、'https://oss-accelerate.aliyuncs.com'。
        // String endpoint = "https://oss-accelerate.aliyuncs.com";

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useAccelerateEndpoint(true)
                // .endpoint(endpoint) // 方法 2 を使用する場合は、この行のコメントを解除し、前の行をコメントアウトします。
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

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

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

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

        // プライベートドメインを指定します。例えば:https://service.corp.example.com
        String endpoint = "https://service.corp.example.com";

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

ガバメントクラウドのドメイン名の使用

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

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // リージョンとエンドポイントを指定します。
        // バケットが配置されているリージョンを指定します。中国 (北京) ガバメントクラウド 1 の場合、リージョンを cn-north-2-gov-1 に設定します。
        String region = "cn-north-2-gov-1";
        // バケットのリージョンの内部エンドポイントを指定します。中国 (北京) ガバメントクラウド 1 の場合、エンドポイントは 'https://oss-cn-north-2-gov-1-internal.aliyuncs.com' です。
        // HTTP プロトコルを指定するには、ドメインを 'http://oss-cn-north-2-gov-1-internal.aliyuncs.com' に設定します。
        String endpoint = "https://oss-cn-north-2-gov-1-internal.aliyuncs.com";

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

カスタム HTTPClient の使用

標準の設定パラメーターが要件を満たさない場合は、カスタム HTTP クライアントを使用できます。

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;
import com.aliyun.sdk.service.oss2.transport.HttpClient;
import com.aliyun.sdk.service.oss2.transport.HttpClientOptions;
import com.aliyun.sdk.service.oss2.transport.apache5client.Apache5HttpClientBuilder;
import java.time.Duration;

public class Example {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

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

        // HTTP クライアントのパラメーターを設定します。
        HttpClientOptions httpClientOptions = HttpClientOptions.custom()
                // 接続タイムアウト。デフォルト値は 5 秒です。
                .connectTimeout(Duration.ofSeconds(30))
                // データの読み書きのタイムアウト。デフォルト値は 20 秒です。
                .readWriteTimeout(Duration.ofSeconds(30))
                // 最大接続数。デフォルト値は 1024 です。
                .maxConnections(2048)
                // 証明書検証をスキップするかどうかを指定します。デフォルトでは false です。
                .insecureSkipVerify(false)
                // HTTP リダイレクトを有効にするかどうかを指定します。デフォルトでは無効です。
                .redirectsEnabled(false)
                // プロキシサーバーを設定します。
                // .proxyHost("http://user:passswd@proxy.example-***.com")
                .build();

        // HTTP クライアントを作成し、HTTP クライアントパラメーターを渡します。
        HttpClient httpClient = Apache5HttpClientBuilder.create()
                .options(httpClientOptions)
                .build();

        // 設定情報を使用して OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .httpClient(httpClient)
                .build()) {

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

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

アクセス認証情報の種類と設定

OSS SDK for Java V2 は、アクセス認証情報を設定するための複数の方法を提供します。認証と権限付与のニーズに応じて、適切な初期化方法を選択できます。

アクセス認証情報の選択方法

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

シナリオ

Java SDK V2 のサポート

基盤となる認証情報の種類

認証情報の有効期間

認証情報のローテーションまたはリフレッシュ方法

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

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

組み込みサポート

AccessKey

長期間

手動ローテーション

STS トークンの使用

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

組み込みサポート

Security Token Service トークン

一時的

手動リフレッシュ

RAM ロール ARN 認証情報の使用

RAM ロールを引き受けることで取得した一時的な認証情報を必要とする、OSS リソースへのクロスアカウントアクセス。

拡張サポート

Security Token Service トークン

一時的

自動リフレッシュ

ECS RAM ロール認証情報の使用

ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes で実行されるアプリケーション。

拡張サポート

Security Token Service トークン

一時的

自動リフレッシュ

OIDC ロール ARN 認証情報の使用

Pod レベルの権限分離を実装する Container Service for Kubernetes の RRSA 機能。

拡張サポート

Security Token Service トークン

一時的

自動リフレッシュ

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

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

組み込みサポート

カスタム

カスタム

カスタム

匿名アクセス

認証情報を提供せずに公開読み取り可能な OSS リソースにアクセスします。

組み込みサポート

なし

なし

なし

拡張サポートとマークされた認証機能は、カスタムアクセス認証情報の方法と Alibaba Cloud 認証情報管理ライブラリを併用して実装する必要があります。SDK は基本的な認証情報設定方法を組み込みでサポートしています。credentials-java ライブラリを統合することで、拡張機能を実装できます。

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

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

重要
  • Alibaba Cloud アカウントは、そのリソースに対する完全な権限を持っています。AccessKey ペアが漏洩すると、システムに重大なセキュリティリスクをもたらします。Alibaba Cloud アカウントの AccessKey ペアを使用せず、最小限の必要な権限を持つ RAM ユーザーの AccessKey ペアを使用することを推奨します。

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

環境変数の設定

Linux/macOS

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

    export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'
    export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'
  2. 以下のコマンドを実行して、環境変数が設定されていることを確認します。

    echo $OSS_ACCESS_KEY_ID
    echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"

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)

コードサンプル

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // 環境変数から認証情報を読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

静的な認証情報の設定

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

警告

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

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // 静的な認証情報プロバイダーを作成し、AccessKey ペアを明示的に設定します。
        // ご利用の RAM ユーザーの AccessKey ID と AccessKey Secret に置き換えてください。
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                "YOUR_ACCESS_KEY_ID",
                "YOUR_ACCESS_KEY_SECRET"
        );
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

STS トークンの使用

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

環境変数の設定

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

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

Linux/macOS

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

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>

コードサンプル

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // OSS へのアクセスに必要な認証情報を環境変数から読み込み、ID 検証を行います。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

静的な認証情報の設定

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

警告

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

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // 取得した一時的な AccessKey ID と AccessKey Secret を指定します。
        // STS から取得した AccessKey ID は「STS」で始まることに注意してください。
        String stsAccessKeyId = "STS.****************";
        String stsAccessKeySecret = "yourAccessKeySecret";
        String stsSecurityToken = "yourSecurityToken";
        
        // 静的な認証情報プロバイダーを作成し、一時的な AccessKey ペアと STS トークンを明示的に設定します。
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                stsAccessKeyId,
                stsAccessKeySecret,
                stsSecurityToken
        );
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

RAM ロール ARN 認証情報の使用

アプリケーションがクロスアカウントアクセスなどのシナリオで OSS への認可されたアクセスを必要とする場合、RAM ロールの ARN を使用して認証情報プロバイダーを初期化できます。基盤となる実装では、Security Token Service (STS) のトークンを使用します。RAM ロールの ARN を指定すると、認証情報ツールは STS トークンを取得し、現在のトークンが期限切れになる前に AssumeRole API 操作を呼び出して新しいトークンを要求します。さらに、policy パラメーターを設定して RAM ロールの権限を制限できます。

重要
  • Alibaba Cloud アカウントは、そのリソースに対する完全な権限を持っています。AccessKey ペアが漏洩すると、システムに重大なセキュリティリスクをもたらします。Alibaba Cloud アカウントの AccessKey ペアを使用せず、最小限の必要な権限を持つ RAM ユーザーの AccessKey ペアを使用することを推奨します。

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

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

依存関係の追加

Alibaba Cloud 認証情報管理の依存関係を pom.xml ファイルに追加します。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>credentials-java</artifactId>
    <version>0.3.4</version>
</dependency>

AccessKey ペアと RAM ロール ARN をアクセス認証情報として設定

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;
// 注意:以下のインポートは外部依存関係 credentials-java からのものです
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // RAM ロール ARN 認証情報を設定します。
        Config credentialConfig = new Config()
                .setType("ram_role_arn")
                // 環境変数から RAM ユーザーの AccessKey ペア (AccessKey ID と AccessKey Secret) を取得します。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // 引き受ける RAM ロールの ARN。値の例:acs:ram::123456789012****:role/adminrole
                // RoleArn は ALIBABA_CLOUD_ROLE_ARN 環境変数を介して設定できます。
                .setRoleArn("acs:ram::123456789012****:role/adminrole")
                // ロールセッション名。RoleSessionName は ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を介して設定できます。
                .setRoleSessionName("your-session-name")
                // より制限的な権限ポリシーを設定します。これはオプションです。値の例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // ロールセッションの有効期間を秒単位で設定します。デフォルトは 3600 秒 (1 時間) です。これはオプションです。
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // 動的な認証情報読み込みのための認証情報プロバイダーを作成します。
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            try {
                com.aliyun.credentials.models.Credentials cred = credentialClient.getCredential();
                return new Credentials(
                    cred.getAccessKeyId(),
                    cred.getAccessKeySecret(),
                    cred.getSecurityToken()
                );
            } catch (Exception e) {
                throw new RuntimeException("Failed to obtain credentials", e);
            }
        });

        // OSS クライアントインスタンスを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。例えば、中国 (杭州)。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

ECS RAM ロール認証情報の使用

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

依存関係の追加

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>credentials-java</artifactId>
    <version>0.3.4</version>
</dependency>

ECS RAM ロールをアクセス認証情報として設定

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;
// 注意:以下のインポートは外部依存関係 credentials-java からのものです
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // ECS RAM ロール認証情報を設定します。
        Config credentialConfig = new Config()
                .setType("ecs_ram_role")      // アクセス認証情報の種類。ecs_ram_role に固定。
                .setRoleName("EcsRoleExample"); // ECS インスタンスに付与された RAM ロールの名前。オプションのパラメーター。設定しない場合、自動的に取得されます。リクエストを減らすために設定することを強く推奨します。

        Client credentialClient = new Client(credentialConfig);

        // 動的な認証情報読み込みのための認証情報プロバイダーを作成します。
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            try {
                com.aliyun.credentials.models.Credentials cred = credentialClient.getCredential();
                return new Credentials(
                    cred.getAccessKeyId(),
                    cred.getAccessKeySecret(),
                    cred.getSecurityToken()
                );
            } catch (Exception e) {
                throw new RuntimeException("Failed to obtain credentials", e);
            }
        });

        // OSS クライアントインスタンスを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。例えば、中国 (杭州)。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

OIDC ロール ARN 認証情報の使用

Container Service for Kubernetes (ACK) でワーカーノードの RAM ロールを設定すると、そのノード上の Pod 内のアプリケーションは、ECS にデプロイされたアプリケーションと同様に、グローバルメタサービスを通じて関連付けられたロールの STS トークンを取得できます。ただし、コンテナクラスター上に信頼できないアプリケーション (例えば、ソースコードにアクセスできない顧客から提出されたアプリケーション) をデプロイする場合、それらがワーカーノードに関連付けられたインスタンス RAM ロールの STS トークンをグローバルメタサービスを通じて取得するのを防ぎたい場合があります。これらの信頼できないアプリケーションが必要な STS トークンを安全に取得し、アプリケーションレベルで最小権限の原則を実装しながらクラウドリソースを保護するために、RAM Roles for Service Account (RRSA) 機能を使用できます。基盤となる実装では STS トークンを使用します。Alibaba Cloud コンテナクラスターは、異なるアプリケーション Pod に対して対応するサービスアカウント OIDC トークンファイルを作成・マウントし、関連する設定情報を環境変数に注入します。認証情報ツールは、STS サービスの AssumeRoleWithOIDC API を呼び出し、環境変数からの設定情報を使用して、バインドされたロールの STS トークンを取得します。この方法では、AccessKey ペアや STS トークンを提供する必要がなく、手動メンテナンスのリスクを軽減します。詳細については、「RRSA を通じて ServiceAccount の RAM 権限を設定し、Pod の権限分離を実現する」をご参照ください。

依存関係の追加

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>credentials-java</artifactId>
    <version>0.3.4</version>
</dependency>

OIDC ロール ARN をアクセス認証情報として設定

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;
// 注意:以下のインポートは外部依存関係 credentials-java からのものです
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // OIDC ロール ARN 認証情報を設定します。
        Config credentialConfig = new Config()
                // 認証情報の種類を指定します。oidc_role_arn に固定。
                .setType("oidc_role_arn")
                // RAM ロール ARN。RoleArn は ALIBABA_CLOUD_ROLE_ARN 環境変数を介して設定できます。
                .setRoleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
                // OIDC プロバイダー ARN。OidcProviderArn は ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を介して設定できます。
                .setOidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // OIDC トークンファイルパス。OidcTokenFilePath は ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を介して設定できます。
                .setOidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // ロールセッション名。RoleSessionName は ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を介して設定できます。
                .setRoleSessionName("your-session-name")
                // より制限的な権限ポリシーを設定します。これはオプションです。値の例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // ロールセッションの有効期間を秒単位で設定します。デフォルトは 3600 秒 (1 時間) です。これはオプションです。
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // 動的な認証情報読み込みのための認証情報プロバイダーを作成します。
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            try {
                com.aliyun.credentials.models.Credentials cred = credentialClient.getCredential();
                return new Credentials(
                    cred.getAccessKeyId(),
                    cred.getAccessKeySecret(),
                    cred.getSecurityToken()
                );
            } catch (Exception e) {
                throw new RuntimeException("Failed to obtain credentials", e);
            }
        });

        // OSS クライアントインスタンスを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。例えば、中国 (杭州)。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

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

前述の認証情報設定方法が要件を満たさない場合、認証情報の取得方法をカスタマイズできます。Java SDK はこの目的のために複数の実装方法をサポートしています。

Supplier インターフェイスによる実装

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;

public class OSSExample {
    public static void main(String[] args) {
        // カスタム認証情報プロバイダーを作成します。
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            // TODO: カスタムの認証情報取得ロジックを実装します。
            
            // 長期的な認証情報を返します。
            return new Credentials("access_key_id", "access_key_secret");
            
            // STS トークンを返します (必要な場合)。
            // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
        });
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

CredentialsProvider インターフェイスの実装

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;

public class CustomCredentialsProvider implements CredentialsProvider {
    
    @Override
    public Credentials getCredentials() {
        // TODO: カスタムの認証情報取得ロジックを実装します。
        
        // 長期的な認証情報を返します。
        return new Credentials("access_key_id", "access_key_secret");
        
        // STS トークンを返します (必要な場合)。
        // 一時的な認証情報の場合、有効期限に基づいてリフレッシュする必要があります。
        // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
    }
}

public class OSSExample {
    public static void main(String[] args) {
        // カスタム認証情報プロバイダーを作成します。
        CredentialsProvider credentialsProvider = new CustomCredentialsProvider();
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

匿名アクセス

公開読み取り可能な OSS リソースにのみアクセスする必要がある場合は、認証情報を提供せずに匿名アクセスを使用できます。

import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.AnonymousCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // 匿名認証情報プロバイダーを作成します。
        CredentialsProvider credentialsProvider = new AnonymousCredentialsProvider();
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを後続の操作で使用します...
            // 注意:匿名アクセスは公開読み取り権限を持つリソースにのみ使用できます。
            
        } catch (Exception e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

サンプルコード

機能分類

サンプル説明

同期バージョン

非同期バージョン

バケット

バケットの作成

PutBucket.java

PutBucketAsync.java

バケットのリスト表示

ListBuckets.java

ListBucketsAsync.java

バケット情報の取得

GetBucketInfo.java

GetBucketInfoAsync.java

バケットリージョンの取得

GetBucketLocation.java

GetBucketLocationAsync.java

バケットストレージ統計の取得

GetBucketStat.java

GetBucketStatAsync.java

バケットの削除

DeleteBucket.java

DeleteBucketAsync.java

ファイルのアップロード

シンプルアップロード

PutObject.java

PutObjectAsync.java

追加アップロード

AppendObject.java

AppendObjectAsync.java

マルチパートアップロード

MultipartUpload.java

MultipartUploadAsync.java

マルチパートアップロードタスクのリスト表示

ListMultipartUploads.java

ListMultipartUploadsAsync.java

アップロード済みパートのリスト表示

ListParts.java

ListPartsAsync.java

マルチパートアップロードのキャンセル

AbortMultipartUpload.java

AbortMultipartUploadAsync.java

ファイルのダウンロード

シンプルダウンロード

GetObject.java

GetObjectAsync.java

ファイル管理

ファイルのコピー

CopyObject.java

CopyObjectAsync.java

ファイルの存在確認

HeadObject.java

HeadObjectAsync.java

ファイルのリスト表示

ListObjects.java

ListObjectsAsync.java

ファイルのリスト表示 V2

ListObjectsV2.java

ListObjectsV2Async.java

ファイルの削除

DeleteObject.java

DeleteObjectAsync.java

複数ファイルの削除

DeleteMultipleObjects.java

DeleteMultipleObjectsAsync.java

ファイルメタデータの取得

GetObjectMeta.java

GetObjectMetaAsync.java

アーカイブオブジェクト

ファイルの復元

RestoreObject.java

RestoreObjectAsync.java

復元されたファイルのクリーンアップ

CleanRestoredObject.java

CleanRestoredObjectAsync.java

シンボリックリンク

シンボリックリンクの作成

PutSymlink.java

PutSymlinkAsync.java

シンボリックリンクの取得

GetSymlink.java

GetSymlinkAsync.java

オブジェクトタグ付け

オブジェクトタグの設定

PutObjectTagging.java

PutObjectTaggingAsync.java

オブジェクトタグの取得

GetObjectTagging.java

GetObjectTaggingAsync.java

オブジェクトタグの削除

DeleteObjectTagging.java

DeleteObjectTaggingAsync.java

Resource Access Management

バケット ACL の設定

PutBucketAcl.java

PutBucketAclAsync.java

バケット ACL の取得

GetBucketAcl.java

GetBucketAclAsync.java

オブジェクト ACL の設定

PutObjectAcl.java

PutObjectAclAsync.java

オブジェクト ACL の取得

GetObjectAcl.java

GetObjectAclAsync.java

バージョン管理

バージョン管理の設定

PutBucketVersioning.java

PutBucketVersioningAsync.java

バージョン管理ステータスの取得

GetBucketVersioning.java

GetBucketVersioningAsync.java

オブジェクトバージョンのリスト表示

ListObjectVersions.java

ListObjectVersionsAsync.java

クロスドメインアクセス

CORS ルールの設定

PutBucketCors.java

PutBucketCorsAsync.java

CORS ルールの取得

GetBucketCors.java

GetBucketCorsAsync.java

CORS ルールの削除

DeleteBucketCors.java

DeleteBucketCorsAsync.java

プリフライトリクエスト

OptionObject.java

OptionObjectAsync.java

システム機能

エンドポイント情報のクエリ

DescribeRegions.java

DescribeRegionsAsync.java