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

Object Storage Service:OSS Java SDK V2

最終更新日:Mar 26, 2026

OSS Java SDK 2.0 は、Java アプリケーションが Alibaba Cloud Object Storage Service (OSS) 上のファイルをアップロード、ダウンロード、および管理できるようにする SDK です。クラウドベースのファイルストレージに依存する Web サイトおよびエンタープライズアプリケーションの開発者向けに設計されています。

GitHub | OSS SDK for Java API | mvnrepository | deepwiki

クイックスタート

OSS Java SDK V2 を使用するには、以下の手順に従ってください。

image

前提条件

Java 8 以降。

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

SDK のインストール

OSS Java SDK V2 のインストールには、Maven を使用することを推奨します。

Maven

次の依存関係を pom.xml ファイルに追加します。<version> は、Maven Repository から最新のバージョン番号に置き換えてください。

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

ソースコード

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

mvn clean install -DskipTests -Dgpg.skip=true

アクセス認証情報の設定

RAM ユーザーの AccessKey を環境変数に格納して、アクセス認証情報として使用します。

RAM コンソールで、永続的な AccessKey ペア アクセス権限を持つ RAM ユーザーを作成します。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)

クライアントの初期化

重要

コンプライアンスとセキュリティを向上させるためのポリシー変更により、2025 年 3 月 20 日から、新規 OSS ユーザーは、中国本土リージョンにある OSS バケットでデータ API オペレーションを実行するために、カスタムドメイン名 (CNAME) を使用する必要があります。これらのオペレーションでは、デフォルトのパブリックエンドポイントは制限されます。影響を受けるオペレーションの完全なリストについては、公式発表をご参照ください。HTTPS 経由でデータにアクセスする場合、カスタムドメインに有効な SSL 証明書をバインドする必要があります。これは、コンソールが HTTPS を強制するため、OSS コンソールアクセスに必須です。

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

  • OSSClient インスタンスの再利用には、シングルトンパターンの使用を推奨します。このパターンを使用する際には、リソースリークを防ぐために、アプリケーション終了前に必ず手動で close() メソッドを呼び出す必要があります。

    シングルトンパターン

    サンプルコードを実行する前に、<region-id> を実際の リージョン ID(例: または ap-southeast-1)に置き換えてください。
    public class OssClientSingleton {
        private OssClientSingleton() {}
    
        private static class Holder {
            private static final OSSClient INSTANCE = OSSClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region("<region-id>")
                .build();
        }
    
        public static OSSClient getInstance() {
            return Holder.INSTANCE;
        }
    
        // OSSClient をシャットダウンします。このメソッドは明示的に呼び出す必要があります。
        public static void shutdown() {
            try {
                getInstance().close();
            } catch (Exception e) {
                // close の例外を処理します。
            }
        }
    }
    

同期型 OSSClient

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

サンプルコードを実行する前に、<region-id> を実際の リージョン ID(例: または ap-southeast-1)に置き換えてください。
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 = "<region-id>";

        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 を使用します。

サンプルコードを実行する前に、<region-id> を実際の リージョン ID(例: または ap-southeast-1)に置き換えてください。
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 = "<region-id>";
        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);
        }
    }
}

コードを実行すると、ご利用のアカウントに関連付けられたすべてのリージョンのバケット一覧が出力されます。

クライアント構成

サポートされるクライアント構成

パラメーター

説明

region

(必須)リクエストを送信するリージョン。

credentialsProvider

(必須)認証に使用する認証情報。

endpoint

リクエストエンドポイント。

httpClient

HTTP クライアント。

retryMaxAttempts

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

retryer

HTTP リクエストのリトライポリシー。

connectTimeout

接続タイムアウト。デフォルト値は 5 秒です。

readWriteTimeout

読み取り/書き込みタイムアウト。デフォルト値は 20 秒です。

insecureSkipVerify

SSL 証明書の検証をスキップするかどうか。デフォルト値は false です。

enabledRedirect

HTTP リダイレクトを有効にするかどうか。デフォルト値は false です。

signatureVersion

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

disableSsl

HTTPS を無効にするかどうか。デフォルト値は false です。

usePathStyle

パススタイルアクセス(例:https://endpoint/bucket-name)を使用するかどうか。デフォルト値は false であり、仮想ホストスタイルアクセス(例:https://bucket-name.endpoint)が使用されます。

useCName

カスタムドメイン名を使用するかどうか。デフォルト値は false です。

useDualStackEndpoint

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

useAccelerateEndpoint

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

useInternalEndpoint

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

additionalHeaders

v4 署名に含める追加のリクエストヘッダー。

userAgent

User-Agent ヘッダーに追加するカスタム文字列。

カスタムドメイン名

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

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

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

        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

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

        // 指定された構成で OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                // 注意:useCName を true に設定します。そうしないと、カスタムドメイン名を使用できません。
                .useCName(true)
                .build()) {

            // クライアントを使用して、その後の操作を行います...

        } catch (Exception e) {
            System.err.println("エラーが発生しました:" + e.getMessage());
        }
    }
}

タイムアウト

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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) {
        // 認証のために環境変数から認証情報を読み込みます。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

        // 指定された構成で 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("エラーが発生しました:" + e.getMessage());
        }
    }
}

リトライポリシー

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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 ステータスコード、サービスエラーコード、クライアントエラーが含まれます。
         *
         * リトライ可能なエラーが発生した場合、SDK はこれらの設定を使用して遅延し、リクエストを再試行します。
         * リトライごとにレイテンシが増加します。デフォルト設定が要件を満たさない場合は、
         * リトライパラメーターまたは実装をカスタマイズできます。
         */

        // 認証のために環境変数から認証情報を読み込みます。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

        // リトライポリシーの構成例:

        // 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("エラーが発生しました:" + e.getMessage());
        }
    }
}

HTTP/HTTPS

HTTPS の代わりに HTTP を使用するには、disableSsl(true) を呼び出します。

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

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

        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

        // 指定された構成で OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // HTTPS リクエストを無効化します。
                .disableSsl(true)
                .build()) {

            // クライアントを使用して、その後の操作を行います...

        } catch (Exception e) {
            System.err.println("エラーが発生しました:" + e.getMessage());
        }
    }
}

内部エンドポイント

同一リージョン内の Alibaba Cloud サービスから OSS リソースにアクセスするには、内部エンドポイントを使用できます。これにより、トラフィックコストを削減し、アクセス速度を向上させることができます。

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

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

        // 方法 1:リージョンを指定し、useInternalEndpoint を true に設定します。
        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

        // // 方法 2:リージョンと内部エンドポイントの両方を指定します。
        // // バケットが配置されているリージョンを指定します。
        // String region = "<region-id>";
        // // バケットのリージョン用の内部エンドポイントを指定します。
        // String endpoint = "<endpoint>";

        // 指定された構成で OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useInternalEndpoint(true)
                // .endpoint(endpoint) // 方法 2 を使用する場合は、この行のコメントを解除し、上記の `useInternalEndpoint(true)` 行のコメントを付けてください。
                .build()) {

            // クライアントを使用して、その後の操作を行います...

        } catch (Exception e) {
            System.err.println("エラーが発生しました:" + e.getMessage());
        }
    }
}

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

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

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

        // 方法 1:リージョンを指定し、useAccelerateEndpoint を true に設定します。
        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

        // // 方法 2:リージョンと転送アクセラレーションエンドポイントの両方を指定します。
        // // バケットが配置されているリージョンを指定します。
        // String region = "<region-id>";
        // // バケットのリージョン用の転送アクセラレーションエンドポイントを指定します(例:'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 を使用する場合は、この行のコメントを解除し、上記の `useAccelerateEndpoint(true)` 行のコメントを付けてください。
                .build()) {

            // クライアントを使用して、その後の操作を行います...

        } catch (Exception e) {
            System.err.println("エラーが発生しました:" + e.getMessage());
        }
    }
}

プライベートドメイン

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

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

        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

        // プライベートドメインを指定します(例: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("エラーが発生しました:" + e.getMessage());
        }
    }
}

カスタム HTTP クライアント

標準構成では要件を満たさない場合、カスタム HTTP クライアントを使用できます。

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
説明

以下の例は、同期型クライアント (OSSClient) のカスタム HTTPClient 構成を示しています。非同期型クライアント (OSSAsyncClient) を使用する場合は、Apache5HttpClientBuilderApache5AsyncHttpClientBuilder に置き換えてください。その他の構成パラメーターは同じです。

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) {
        // 認証のために環境変数から認証情報を読み込みます。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // バケットが配置されているリージョンを指定します。
        String region = "<region-id>";

        // HTTP クライアントのパラメーターを設定します。
        HttpClientOptions httpClientOptions = HttpClientOptions.custom()
                // 接続タイムアウト。デフォルト値は 5 秒です。
                .connectTimeout(Duration.ofSeconds(30))
                // 読み取り/書き込みタイムアウト。デフォルト値は 20 秒です。
                .readWriteTimeout(Duration.ofSeconds(30))
                // 最大接続数。デフォルト値は 1024 です。
                .maxConnections(2048)
                // 証明書検証をスキップするかどうか。デフォルト値は false です。
                .insecureSkipVerify(false)
                // HTTP リダイレクトを有効にするかどうか。デフォルト値は false です。
                .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("エラーが発生しました:" + e.getMessage());
        }
    }
}

アクセス認証情報

OSS Java SDK V2 では、アクセス認証情報の構成方法が複数提供されています。認証および権限付与の要件に応じて、適切な初期化方法を選択してください。

アクセス認証情報の選択

初期化方法

使用シーン

Java SDK V2 対応状況

基盤となる認証情報

有効性

ローテーションおよびリフレッシュ

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

セキュアな環境で実行され、クラウドサービスへの長期アクセスが必要で、頻繁な認証情報のローテーションが不要なアプリケーション向け。

組み込み対応

AccessKey ペア

長期

手動ローテーション

STS トークンの使用

信頼できない環境で実行され、アクセスの有効期間および権限を制御する必要があるアプリケーション向け。

組み込み対応

STS トークン

一時的

手動リフレッシュ

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

OSS リソースへのクロスアカウントアクセスが必要で、RAM ロールを引き受けることによって一時的な認証情報を取得する必要がある場合向け。

延長サポート

STS トークン

一時的

自動リフレッシュ

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

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

拡張サポート

STS トークン

一時的

自動リフレッシュ

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

Container Service for Kubernetes の RAM Roles for Service Accounts (RRSA) 機能を使用して、Pod レベルの権限分離を実現する場合向け。

延長サポート

STS トークン

一時的

自動リフレッシュ

カスタム認証情報プロバイダーの使用

上記のいずれの方法も要件を満たさない場合、独自の方法で認証情報を取得できます。

組み込み対応

カスタム

カスタム

カスタム

匿名アクセス

認証情報なしで公開読み取りの OSS リソースにアクセスします。

組み込み対応

なし

なし

なし

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

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

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

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

  • RAM ユーザーの AccessKey ペアを作成するには、「AccessKey ペアの作成」をご参照ください。 AccessKey ID と AccessKey Secret は、ペアが作成されたときにのみ表示されます。 すぐに保存する必要があります。 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)

コードサンプル

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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) {
        // 認証のために環境変数から認証情報の詳細を読み込みます。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

静的認証情報

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

警告

本番環境のアプリケーションでは、アクセス認証情報をハードコードしないでください。この方法はテスト目的でのみ使用できます。

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + 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>

コードサンプル

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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 へのアクセスに必要な認証情報を環境変数から読み込みます。
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

静的認証情報

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

警告

本番環境のアプリケーションでは、アクセス認証情報をハードコードしないでください。この方法はテスト目的でのみ使用できます。

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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 ペアおよびセキュリティトークンを明示的に設定します。
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                stsAccessKeyId,
                stsAccessKeySecret,
                stsSecurityToken
        );
        
        // OSS クライアントを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

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

アプリケーションがクロスアカウントアクセスなどの承認されたアクセスを必要とする場合、RAM ロールの Alibaba Cloud Resource Name (ARN) を使用して認証情報プロバイダーを初期化できます。この方法では STS トークンを使用します。RAM ロール ARN を指定すると、認証情報ツールが AssumeRole API オペレーションを呼び出して、STS トークンを自動的に取得およびリフレッシュします。また、policy パラメーターを設定して、ロールの権限をさらに制限できます。

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

  • RAM ユーザーの AccessKey ペアを作成するには、「AccessKey ペアの作成」をご参照ください。AccessKey ID および AccessKey Secret は、ペア作成時にのみ表示されます。直ちに保存してください。AccessKey ペアを忘れてしまった場合は、新しいペアを作成して置き換えてください。

  • RAM ロールの ARN を取得するには、「RAM ロールの作成」をご参照ください。

依存関係の追加

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

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

AccessKey ペアおよび RAM ロール ARN の構成

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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
                // ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して RoleArn を設定できます。
                .setRoleArn("acs:ram::123456789012****:role/adminrole")
                // ロールセッション名。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して RoleSessionName を設定できます。
                .setRoleSessionName("your-session-name")
                // オプション。より制限の厳しい権限ポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // オプション。ロールセッションの有効期間(秒単位)。デフォルト値は 3,600 秒(1 時間)です。
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

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

        // OSS クライアントインスタンスを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // クライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

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

アプリケーションが ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes のワーカーノード上で実行される場合、ECS RAM ロールを使用して認証情報プロバイダーを初期化することを推奨します。この方法では STS トークンを使用します。ECS RAM ロールをインスタンスにアタッチすると、SDK がロールの一時的な STS トークンを自動的に取得およびリフレッシュします。この方法により、AccessKey ペアまたは STS トークンを手動で管理するリスクが排除されます。「RAM ロールの作成」について詳しくは、こちらをご参照ください。

依存関係の追加

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

ECS RAM ロールの構成

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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.CredentialModel cred = credentialClient.getCredential();
                return new Credentials(
                    cred.getAccessKeyId(),
                    cred.getAccessKeySecret(),
                    cred.getSecurityToken()
                );
            } catch (Exception e) {
                throw new RuntimeException("認証情報の取得に失敗しました", e);
            }
        });

        // OSS クライアントインスタンスを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // クライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

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

Container Service for Kubernetes のワーカーノードに RAM ロールを構成した後、これらのノード上の Pod 内のアプリケーションは、メタデータサービスを介してアタッチされたロールの STS トークンを取得できます。これは、ECS 上のアプリケーションと同様です。ただし、お客様が提出したような信頼できないアプリケーションが、ワーカーノードのインスタンス RAM ロールの STS トークンを取得することを許可したくない場合があります。このようなアプリケーションが、クラウドリソースを保護しながら最小限の権限で必要な STS トークンを取得できるようにするには、RAM Roles for Service Accounts (RRSA) を使用できます。この方法では STS トークンを使用します。Alibaba Cloud コンテナクラスターは、異なるアプリケーション Pod 用に、対応するサービスアカウント OpenID Connect (OIDC) トークンファイルを作成およびマウントし、構成情報を環境変数に挿入します。認証情報ツールはこの構成を使用して、AssumeRoleWithOIDC STS オペレーションを呼び出し、OIDC トークンをロールに紐付けられた STS トークンと交換します。この方法により、AccessKey ペアまたは STS トークンを手動で管理するリスクが排除されます。「RRSA を使用した ServiceAccount の RAM 権限の設定および Pod 権限の分離」について詳しくは、こちらをご参照ください。

依存関係の追加

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

OIDC ロール ARN の構成

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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。ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して RoleArn を設定できます。
                .setRoleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
                // OIDC プロバイダーの ARN。ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を使用して OidcProviderArn を設定できます。
                .setOidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // OIDC トークンのファイルパス。ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を使用して OidcTokenFilePath を設定できます。
                .setOidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // ロールセッション名。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して RoleSessionName を設定できます。
                .setRoleSessionName("your-session-name")
                // オプション。より制限の厳しい権限ポリシー。例:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // オプション。ロールセッションの有効期間(秒単位)。デフォルト値は 3,600 秒(1 時間)です。
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

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

        // OSS クライアントインスタンスを作成します。
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // クライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

カスタム認証情報プロバイダー

上記の方法が要件を満たさない場合、カスタム認証情報プロバイダーを実装できます。Java SDK では、この実装をサポートする複数の方法が提供されています。

Supplier インターフェイス

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

CredentialsProvider インターフェイス

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを使用して、その後の操作を行います。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + e.getMessage());
        }
    }
}

匿名アクセス

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

サンプルコードを実行する前に、<region-id> を実際の リージョンおよびエンドポイント(例: または ap-southeast-1)に置き換えてください。
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("<region-id>") // バケットが配置されているリージョンを指定します。
                .build()) {
            
            // 作成したクライアントを使用して、その後の操作を行います。
            // 注:匿名アクセスは、公開読み取りリソースにのみ適用されます。
            
        } catch (Exception e) {
            System.err.println("操作に失敗しました:" + 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

アクセス制御

バケット 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

Cross-Origin Resource Sharing (CORS)

CORS ルールの設定

PutBucketCors.java

PutBucketCorsAsync.java

CORS ルールの取得

GetBucketCors.java

GetBucketCorsAsync.java

CORS ルールの削除

DeleteBucketCors.java

DeleteBucketCorsAsync.java

プリフライトリクエスト

OptionObject.java

OptionObjectAsync.java

システム機能

エンドポイント情報の照会

DescribeRegions.java

DescribeRegionsAsync.java