全部产品
Search
文档中心

Object Storage Service:OSS SDK for Java 2.0 (preview)

更新时间:Dec 17, 2025

OSS SDK for Java V2 memungkinkan Anda mengintegrasikan Alibaba Cloud Object Storage Service (OSS) ke dalam aplikasi Java. SDK ini dapat digunakan untuk mengunggah, mengunduh, dan mengelola file, serta ideal bagi pengembang, situs web, dan perusahaan yang memerlukan penyimpanan file berbasis cloud.

Github | OSS SDK for Java API | mvnrepository | deepwiki

Integrasi cepat

Ikuti langkah-langkah berikut untuk mengintegrasikan OSS SDK for Java V2.

image

Prasyarat

Java 8 atau versi yang lebih baru.

Anda dapat menjalankan perintah java -version untuk memeriksa versi Java Anda. Jika Java belum terinstal atau versinya lebih lama dari Java 8, unduh dan instal Java.

Instal SDK

Anda dapat menggunakan Maven untuk menginstal OSS SDK for Java V2.

Maven

Tambahkan dependensi berikut ke file pom.xml Anda. Ganti <version> dengan nomor versi terbaru dari Maven Repository.

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-oss-v2</artifactId>
    <version><!-- Specify the latest version number --></version>
</dependency>

Kode sumber

Dapatkan versi terbaru OSS SDK for Java V2 dari Github, lalu bangun dan instal menggunakan Maven:

mvn clean install -DskipTests -Dgpg.skip=true

Konfigurasikan kredensial akses

Atur pasangan AccessKey pengguna RAM sebagai variabel lingkungan untuk menggunakannya sebagai kredensial.

Di Konsol RAM, buat pengguna RAM dan Permanent AccessKey Pair untuk akses. Simpan pasangan AccessKey tersebut dan berikan izin AliyunOSSFullAccess kepada pengguna.

Linux

  1. Jalankan perintah berikut di antarmuka baris perintah untuk menambahkan pengaturan variabel lingkungan ke file ~/.bashrc.

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
    1. Jalankan perintah berikut untuk menerapkan perubahan.

      source ~/.bashrc
    2. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

macOS

  1. Jalankan perintah berikut di terminal untuk memeriksa jenis shell default.

    echo $SHELL
    1. Ikuti langkah-langkah sesuai jenis shell default Anda.

      Zsh

      1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.zshrc.

        echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
        echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
      2. Jalankan perintah berikut untuk menerapkan perubahan.

        source ~/.zshrc
      3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

      Bash

      1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.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. Jalankan perintah berikut untuk menerapkan perubahan.

        source ~/.bash_profile
      3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

  1. Jalankan perintah berikut di Command Prompt.

    setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
    1. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      echo %OSS_ACCESS_KEY_ID%
      echo %OSS_ACCESS_KEY_SECRET%

PowerShell

  1. Jalankan perintah berikut di 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. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

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

Inisialisasi client

Inisialisasi OSSClient dengan menentukan wilayah.

  • OSSClient mengimplementasikan AutoCloseable. Jika Anda membuat instans menggunakan pernyataan try-with-resources, resource akan dilepas secara otomatis sehingga Anda tidak perlu memanggil close() secara manual.

  • Pembuatan dan penghancuran instans OSSClient bisa memakan waktu. Kami menyarankan agar Anda menggunakan pola singleton untuk menggunakan kembali instans OSSClient. Jika menggunakan pola ini, Anda harus memanggil close() secara manual sebelum aplikasi dihentikan untuk mencegah kebocoran resource.

    Pola Singleton

    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;
        }
    
        // Tutup instans OSSClient. Ini harus dipanggil secara eksplisit.
        public static void shutdown() {
            try {
                getInstance().close();
            } catch (Exception e) {
                // Tangani exception saat penutupan.
            }
        }
    }
    

Sync OSSClient

Jika Anda ingin menunggu operasi selesai sebelum melanjutkan, gunakan OSSClient sinkron.

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);
        }
    }
}

Asynchronous OSSClient

Jika Anda ingin memproses beberapa operasi OSS secara bersamaan tanpa menunggu hasil setiap operasi, gunakan OSSClient asinkron.

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);
        }
    }
}

Setelah menjalankan kode, bucket di semua wilayah yang terkait dengan akun Anda akan ditampilkan:

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

Konfigurasi client

Konfigurasi Client yang Didukung

Parameter

Deskripsi

region

(Wajib) Wilayah tempat permintaan dikirim.

credentialsProvider

(Wajib) Mengatur kredensial akses.

endpoint

Titik akhir untuk akses.

httpClient

HTTP client.

retryMaxAttempts

Jumlah maksimum upaya pengulangan untuk permintaan HTTP. Nilai default adalah 3.

retryer

Implementasi pengulangan untuk permintaan HTTP.

connectTimeout

Periode timeout untuk membuat koneksi. Nilai default adalah 5 detik.

readWriteTimeout

Periode timeout untuk membaca dan menulis data. Nilai default adalah 20 detik.

insecureSkipVerify

Menentukan apakah verifikasi sertifikat SSL dilewati. Secara default, sertifikat SSL diverifikasi.

enabledRedirect

Menentukan apakah pengalihan HTTP diaktifkan. Secara default, fitur ini dinonaktifkan.

signatureVersion

Versi signature. Nilai default adalah v4.

disableSsl

Menentukan apakah menggunakan permintaan HTTPS. Secara default, HTTPS digunakan.

usePathStyle

Menentukan apakah menggunakan format permintaan path-style, yaitu gaya permintaan domain tingkat kedua. Default-nya adalah nama domain bucket-hosted.

useCName

Menentukan apakah menggunakan nama domain kustom untuk akses. Secara default, fitur ini dinonaktifkan.

useDualStackEndpoint

Menentukan apakah menggunakan titik akhir dual-stack untuk akses. Secara default, fitur ini dinonaktifkan.

useAccelerateEndpoint

Menentukan apakah menggunakan titik akhir akselerasi transfer untuk akses. Secara default, fitur ini dinonaktifkan.

useInternalEndpoint

Menentukan apakah menggunakan titik akhir internal dalam wilayah yang sama untuk akses. Secara default, fitur ini dinonaktifkan.

additionalHeaders

Menentukan header permintaan tambahan yang akan ditandatangani. Ini berlaku untuk signature V4.

userAgent

Menentukan informasi User-Agent tambahan.

Gunakan nama domain kustom

Jika Anda menggunakan nama domain OSS default untuk akses, Anda mungkin mengalami masalah seperti file tidak dapat diakses atau gagal dipratinjau. Jika Anda menggunakan nama domain kustom untuk mengakses OSS, Anda dapat mempratinjau file langsung di browser dan menggunakan CDN untuk pengiriman konten yang dipercepat.

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

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Tentukan nama domain kustom Anda. Misalnya, www.example-***.com.
        String endpoint = "https://www.example-***.com";

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                // Catatan: Atur useCName ke true untuk mengaktifkan opsi CNAME. Jika tidak, Anda tidak dapat menggunakan nama domain kustom.
                .useCName(true)
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Kontrol timeout

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) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // Atur timeout untuk membuat koneksi. Nilai default adalah 5 detik.
                .connectTimeout(Duration.ofSeconds(30))
                // Atur timeout untuk membaca dan menulis data. Nilai default adalah 20 detik.
                .readWriteTimeout(Duration.ofSeconds(30))
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Kebijakan pengulangan

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) {
        /*
         * Deskripsi konfigurasi kebijakan pengulangan SDK:
         *
         * Kebijakan pengulangan default:
         * Saat tidak ada kebijakan pengulangan yang dikonfigurasi, SDK menggunakan StandardRetryer sebagai implementasi client default.
         * Konfigurasi default-nya adalah sebagai berikut:
         * - maxAttempts: Menetapkan jumlah maksimum upaya. Default adalah 3.
         * - maxBackoff: Menetapkan waktu backoff maksimum dalam detik. Default adalah 20 detik.
         * - baseDelay: Menetapkan waktu delay dasar dalam detik. Default adalah 0,2 detik.
         * - backoffDelayer: Menetapkan algoritma backoff. Default adalah algoritma FullJitter.
         *   Formula: [0.0, 1.0) * min(2^attempts * baseDelay, maxBackoff)
         * - errorRetryables: Jenis kesalahan yang dapat diulang, termasuk kode status HTTP, kode kesalahan layanan, dan kesalahan client.
         *
         * Saat terjadi kesalahan yang dapat diulang, konfigurasi yang disediakan digunakan untuk menunda lalu mengulang permintaan.
         * Latensi keseluruhan permintaan meningkat seiring jumlah pengulangan. Jika konfigurasi default
         * tidak memenuhi kebutuhan skenario Anda, Anda dapat mengonfigurasi parameter pengulangan atau memodifikasi implementasi pengulangan.
         */

        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Contoh konfigurasi kebijakan pengulangan:

        // 1. Sesuaikan jumlah maksimum pengulangan (default adalah 3, di sini diatur menjadi 5).
        Retryer customRetryer = StandardRetryer.newBuilder()
                .maxAttempts(5)
                .build();

        // 2. Sesuaikan waktu delay backoff.
        // Sesuaikan baseDelay menjadi 0,5 detik (default 0,2 detik) dan maxBackoff menjadi 25 detik (default 20 detik).
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FullJitterBackoff(Duration.ofMillis(500), Duration.ofSeconds(25)))
        //         .build();

        // 3. Sesuaikan algoritma backoff.
        // Gunakan algoritma backoff delay tetap alih-alih algoritma FullJitter default, dengan delay 2 detik setiap kali.
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FixedDelayBackoff(Duration.ofSeconds(2)))
        //         .build();

        // 4. Nonaktifkan kebijakan pengulangan.
        // Untuk menonaktifkan semua upaya pengulangan, gunakan implementasi NopRetryer.
        // Retryer customRetryer = new NopRetryer();

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .retryer(customRetryer)
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Protokol HTTP/HTTPS

Anda dapat menggunakan disableSsl(true) untuk menonaktifkan protokol HTTPS.

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

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // Atur agar tidak menggunakan permintaan HTTPS.
                .disableSsl(true)
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Gunakan titik akhir internal

Anda dapat menggunakan titik akhir internal untuk mengakses resource OSS dalam wilayah yang sama guna mengurangi biaya trafik dan meningkatkan kecepatan akses.

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

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Metode 1: Tentukan wilayah dan atur useInternalEndpoint ke true.
        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // // Metode 2: Langsung tentukan wilayah dan titik akhir.
        // // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        // String region = "cn-hangzhou";
        // // Tentukan titik akhir internal untuk wilayah bucket tersebut. Untuk China (Hangzhou), titik akhirnya adalah 'oss-cn-hangzhou-internal.aliyuncs.com'.
        // String endpoint = "oss-cn-hangzhou-internal.aliyuncs.com";

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useInternalEndpoint(true)
                // .endpoint(endpoint) // Jika menggunakan Metode 2, hapus komentar baris ini dan beri komentar pada baris sebelumnya.
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Gunakan titik akhir akselerasi transfer

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

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Metode 1: Tentukan wilayah dan atur useAccelerateEndpoint ke true.
        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // // Metode 2: Langsung tentukan wilayah dan titik akhir akselerasi transfer.
        // // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        // String region = "cn-hangzhou";
        // // Tentukan titik akhir akselerasi transfer untuk wilayah bucket tersebut, misalnya 'https://oss-accelerate.aliyuncs.com'.
        // String endpoint = "https://oss-accelerate.aliyuncs.com";

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useAccelerateEndpoint(true)
                // .endpoint(endpoint) // Jika menggunakan Metode 2, hapus komentar baris ini dan beri komentar pada baris sebelumnya.
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Gunakan domain privat

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

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Tentukan domain privat Anda. Misalnya: https://service.corp.example.com
        String endpoint = "https://service.corp.example.com";

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Gunakan nama domain Alibaba Gov Cloud

Kode contoh berikut menunjukkan cara mengonfigurasi OSSClient menggunakan nama domain Alibaba Gov Cloud.

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

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah dan titik akhir.
        // Tentukan wilayah tempat bucket berada. Untuk Alibaba Gov Cloud 1 China (Beijing), atur wilayah menjadi cn-north-2-gov-1.
        String region = "cn-north-2-gov-1";
        // Tentukan titik akhir internal untuk wilayah bucket tersebut. Untuk Alibaba Gov Cloud 1 China (Beijing), titik akhirnya adalah 'https://oss-cn-north-2-gov-1-internal.aliyuncs.com'.
        // Untuk menentukan protokol HTTP, atur domain menjadi 'http://oss-cn-north-2-gov-1-internal.aliyuncs.com'.
        String endpoint = "https://oss-cn-north-2-gov-1-internal.aliyuncs.com";

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Gunakan HTTPClient kustom

Jika parameter konfigurasi standar tidak memenuhi kebutuhan Anda, Anda dapat menggunakan HTTP client kustom.

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) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Atur parameter untuk HTTP client.
        HttpClientOptions httpClientOptions = HttpClientOptions.custom()
                // Timeout koneksi. Nilai default adalah 5 detik.
                .connectTimeout(Duration.ofSeconds(30))
                // Timeout untuk membaca dan menulis data. Nilai default adalah 20 detik.
                .readWriteTimeout(Duration.ofSeconds(30))
                // Jumlah maksimum koneksi. Nilai default adalah 1024.
                .maxConnections(2048)
                // Menentukan apakah verifikasi sertifikat dilewati. Secara default, ini false.
                .insecureSkipVerify(false)
                // Menentukan apakah pengalihan HTTP diaktifkan. Secara default, ini dinonaktifkan.
                .redirectsEnabled(false)
                // Atur server proxy.
                // .proxyHost("http://user:passswd@proxy.example-***.com")
                .build();

        // Buat HTTP client dan masukkan parameter HTTP client.
        HttpClient httpClient = Apache5HttpClientBuilder.create()
                .options(httpClientOptions)
                .build();

        // Buat client OSS dengan informasi yang dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .httpClient(httpClient)
                .build()) {

            // Gunakan client yang dibuat untuk operasi selanjutnya...

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

Konfigurasi kredensial akses

OSS SDK for Java V2 menyediakan berbagai cara untuk mengonfigurasi kredensial akses. Anda dapat memilih metode inisialisasi yang sesuai berdasarkan kebutuhan autentikasi dan otorisasi Anda.

Cara memilih kredensial akses

Metode inisialisasi penyedia kredensial

Skenario

Dukungan Java SDK V2

Jenis kredensial dasar

Validitas kredensial

Metode rotasi atau refresh kredensial

Gunakan pasangan AccessKey pengguna RAM

Aplikasi yang diterapkan di lingkungan aman dan stabil yang tidak rentan terhadap serangan eksternal dan memerlukan akses jangka panjang ke layanan Alibaba Cloud tanpa rotasi kredensial yang sering.

Dukungan bawaan

AccessKey

Jangka panjang

Rotasi manual

Gunakan token STS

Aplikasi yang diterapkan di lingkungan tidak tepercaya di mana Anda perlu mengontrol periode validitas dan izin akses.

Dukungan bawaan

Security Token Service token

Sementara

Refresh manual

Gunakan kredensial ARN peran RAM

Akses lintas akun ke resource OSS, memerlukan kredensial sementara yang diperoleh dengan mengasumsikan peran RAM.

Dukungan Diperpanjang

Security Token Service token

Sementara

Auto-refresh

Gunakan kredensial peran RAM ECS

Aplikasi yang berjalan di instance ECS, instance ECI, atau node pekerja Container Service for Kubernetes.

Dukungan Diperpanjang

Security Token Service token

Sementara

Auto-refresh

Gunakan kredensial ARN peran OIDC

Fitur RRSA di Container Service for Kubernetes, yang menerapkan isolasi izin tingkat pod.

Dukungan ekstensi

Security Token Service token

Sementara

Auto-refresh

Gunakan kredensial akses kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan cara memperoleh kredensial.

Dukungan bawaan

Kustom

Kustom

Kustom

Akses anonim

Mengakses resource OSS baca-publik tanpa menyediakan kredensial apa pun.

Dukungan bawaan

Tidak ada

Tidak ada

Tidak ada

Fitur kredensial yang ditandai sebagai Dukungan ekstensi harus diimplementasikan menggunakan metode kredensial akses kustom bersama dengan pustaka manajemen kredensial Alibaba Cloud. SDK menyediakan dukungan bawaan untuk metode konfigurasi kredensial dasar. Anda dapat mengimplementasikan fitur ekstensi dengan mengintegrasikan pustaka credentials-java.

Gunakan pasangan AccessKey pengguna RAM

Anda dapat menginisialisasi penyedia kredensial menggunakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) akun Alibaba Cloud atau pengguna RAM. Metode ini cocok jika aplikasi Anda diterapkan di lingkungan aman dan stabil, tidak rentan terhadap serangan eksternal, memerlukan akses jangka panjang ke OSS, dan tidak memungkinkan rotasi kredensial yang sering. Namun, metode ini mengharuskan Anda memelihara pasangan AccessKey secara manual, yang menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas resource-nya. Jika pasangan AccessKey bocor, ini menimbulkan risiko keamanan signifikan bagi sistem Anda. Kami menyarankan agar Anda tidak menggunakan pasangan AccessKey akun Alibaba Cloud. Sebagai gantinya, gunakan pasangan AccessKey pengguna RAM dengan izin minimal yang diperlukan.

  • Untuk informasi lebih lanjut tentang cara membuat pasangan AccessKey untuk pengguna RAM, lihat Buat AccessKey. Pasangan AccessKey pengguna RAM hanya ditampilkan saat dibuat. Anda harus menyimpan pasangan AccessKey tersebut. Jika Anda lupa, Anda harus membuat yang baru.

Konfigurasikan variabel lingkungan

Linux/macOS

  1. Konfigurasikan variabel lingkungan dengan pasangan AccessKey pengguna RAM:

    export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'
    export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'
  2. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi:

    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)

Kode contoh

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) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // Buat client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan client yang dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Konfigurasi kredensial statis

Kode berikut menunjukkan cara menyematkan kredensial akses dengan mengatur pasangan AccessKey secara eksplisit.

Peringatan

Jangan menyematkan kredensial akses di aplikasi produksi Anda; metode ini hanya untuk tujuan pengujian.

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) {
        // Buat penyedia kredensial statis dan atur secara eksplisit pasangan AccessKey.
        // Ganti dengan ID AccessKey dan Rahasia AccessKey pengguna RAM Anda.
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                "YOUR_ACCESS_KEY_ID",
                "YOUR_ACCESS_KEY_SECRET"
        );
        
        // Buat client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan client yang dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan token STS

Jika aplikasi Anda memerlukan akses sementara ke OSS, Anda dapat menggunakan kredensial identitas sementara (ID AccessKey, Rahasia AccessKey, dan token) yang diperoleh dari Security Token Service (STS) untuk menginisialisasi penyedia kredensial. Namun, metode ini mengharuskan Anda memelihara token STS secara manual, sehingga menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan. Selain itu, untuk melakukan beberapa akses sementara ke OSS, Anda harus memperbarui token STS secara manual.

Konfigurasikan variabel lingkungan

Penting
  • Metode ini menggunakan kredensial identitas sementara—berupa ID AccessKey, Rahasia AccessKey, dan Token Keamanan—yang diperoleh dari STS, bukan pasangan AccessKey pengguna RAM.

  • ID AccessKey yang diperoleh dari STS diawali dengan "STS", misalnya "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>

Kode contoh

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) {
        // Muat informasi autentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // Buat client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan client yang dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Konfigurasi kredensial statis

Kode berikut menunjukkan cara menyematkan kredensial akses dengan mengatur pasangan AccessKey sementara secara eksplisit.

Peringatan

Jangan menyematkan kredensial akses di aplikasi produksi Anda; metode ini hanya untuk tujuan pengujian.

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) {
        // Tentukan ID AccessKey sementara dan Rahasia AccessKey yang diperoleh.
        // Perhatikan bahwa ID AccessKey yang diperoleh dari STS diawali dengan "STS".
        String stsAccessKeyId = "STS.****************";
        String stsAccessKeySecret = "yourAccessKeySecret";
        String stsSecurityToken = "yourSecurityToken";
        
        // Buat penyedia kredensial statis dan atur secara eksplisit pasangan AccessKey sementara dan token STS.
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                stsAccessKeyId,
                stsAccessKeySecret,
                stsSecurityToken
        );
        
        // Buat client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan client yang dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial ARN peran RAM

Jika aplikasi Anda memerlukan akses berotorisasi ke OSS untuk skenario seperti akses lintas akun, Anda dapat menggunakan ARN peran RAM untuk menginisialisasi penyedia kredensial. Implementasi dasarnya memanfaatkan token dari Security Token Service (STS). Saat Anda menentukan ARN peran RAM, alat kredensial akan memperoleh token STS dan secara otomatis memanggil operasi API AssumeRole untuk meminta token baru sebelum token saat ini kedaluwarsa. Selain itu, Anda dapat mengatur parameter policy guna membatasi izin peran RAM.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas resource-nya. Jika pasangan AccessKey bocor, hal ini menimbulkan risiko keamanan signifikan bagi sistem Anda. Kami menyarankan agar Anda tidak menggunakan pasangan AccessKey akun Alibaba Cloud. Sebagai gantinya, gunakan pasangan AccessKey pengguna RAM dengan izin minimal yang diperlukan.

  • Untuk informasi lebih lanjut tentang cara membuat pasangan AccessKey untuk pengguna RAM, lihat Buat AccessKey. ID AccessKey dan Rahasia AccessKey pengguna RAM hanya ditampilkan saat dibuat. Anda harus menyimpannya dengan aman. Jika lupa, Anda perlu membuat pasangan AccessKey baru.

  • Untuk informasi lebih lanjut tentang cara memperoleh ARN peran RAM, lihat CreateRole - Buat peran RAM.

Tambahkan dependensi

Tambahkan dependensi manajemen kredensial Alibaba Cloud ke file pom.xml Anda:

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

Konfigurasikan pasangan AccessKey dan ARN peran RAM sebagai kredensial akses

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;
// Catatan: Impor berikut berasal dari dependensi eksternal credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // Konfigurasikan kredensial ARN peran RAM.
        Config credentialConfig = new Config()
                .setType("ram_role_arn")
                // Peroleh pasangan AccessKey pengguna RAM (ID AccessKey dan Rahasia AccessKey) dari variabel lingkungan.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // ARN peran RAM yang akan diasumsikan. Contoh nilai: acs:ram::123456789012****:role/adminrole
                // Anda dapat mengatur RoleArn melalui variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                .setRoleArn("acs:ram::123456789012****:role/adminrole")
                // Nama sesi peran. Anda dapat mengatur RoleSessionName melalui variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                .setRoleSessionName("your-session-name")
                // Atur kebijakan izin yang lebih ketat. Ini opsional. Contoh nilai: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // Atur periode validitas sesi peran dalam detik. Default adalah 3600 detik (1 jam). Ini opsional.
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // Buat penyedia kredensial untuk pemuatan kredensial dinamis.
        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("Gagal memperoleh kredensial", e);
            }
        });

        // Buat instans client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada, misalnya China (Hangzhou).
                .build()) {
            
            // Gunakan client untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial peran RAM ECS

Jika aplikasi Anda berjalan di instance ECS, instance ECI, atau node pekerja Container Service for Kubernetes, kami menyarankan penggunaan peran RAM ECS untuk menginisialisasi penyedia kredensial. Implementasi dasarnya menggunakan token STS. Peran RAM ECS memungkinkan Anda mengaitkan peran dengan instance ECS, instance ECI, atau node pekerja Container Service for Kubernetes, sehingga token STS dapat diperbarui secara otomatis di dalam instance tersebut. Pendekatan ini menghilangkan kebutuhan untuk menyediakan pasangan AccessKey atau token STS secara manual, sekaligus mengurangi risiko terkait pemeliharaan kredensial. Untuk informasi lebih lanjut tentang cara memperoleh peran RAM ECS, lihat CreateRole - Buat peran RAM.

Tambahkan dependensi

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

Konfigurasikan peran RAM ECS sebagai kredensial akses

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;
// Catatan: Impor berikut berasal dari dependensi eksternal credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // Konfigurasikan kredensial peran RAM ECS.
        Config credentialConfig = new Config()
                .setType("ecs_ram_role")      // Jenis kredensial akses. Tetap sebagai ecs_ram_role.
                .setRoleName("EcsRoleExample"); // Nama peran RAM yang diberikan ke instance ECS. Parameter opsional. Jika tidak diatur, akan diambil secara otomatis. Kami sangat menyarankan untuk mengaturnya guna mengurangi permintaan.

        Client credentialClient = new Client(credentialConfig);

        // Buat penyedia kredensial untuk pemuatan kredensial dinamis.
        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("Gagal memperoleh kredensial", e);
            }
        });

        // Buat instans client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada, misalnya China (Hangzhou).
                .build()) {
            
            // Gunakan client untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial ARN peran OIDC

Setelah Anda mengonfigurasi peran RAM untuk node pekerja di Container Service for Kubernetes, aplikasi dalam pod pada node tersebut dapat memperoleh token STS dari peran terkait melalui layanan meta global, mirip dengan aplikasi yang dijalankan di ECS. Namun, jika Anda menjalankan aplikasi tidak tepercaya di kluster kontainer—misalnya, aplikasi yang diajukan pelanggan yang kode sumbernya tidak dapat Anda akses—Anda mungkin ingin mencegah aplikasi tersebut memperoleh token STS dari peran RAM instance yang terkait dengan node pekerja melalui layanan meta global. Untuk melindungi resource cloud Anda sekaligus memungkinkan aplikasi tidak tepercaya ini memperoleh token STS yang diperlukan secara aman dan menerapkan prinsip hak istimewa minimal di tingkat aplikasi, Anda dapat menggunakan fitur RAM Roles for Service Account (RRSA). Implementasi dasar RRSA menggunakan token STS. Kluster kontainer Alibaba Cloud membuat dan memasang file token OIDC service account yang sesuai untuk setiap pod aplikasi, serta menyuntikkan informasi konfigurasi terkait ke dalam variabel lingkungan. Alat kredensial kemudian memperoleh token STS dari peran terikat dengan memanggil API AssumeRoleWithOIDC dari layanan STS, menggunakan informasi konfigurasi dari variabel lingkungan tersebut. Pendekatan ini menghilangkan kebutuhan untuk menyediakan pasangan AccessKey atau token STS secara manual, sehingga mengurangi risiko yang terkait dengan pemeliharaan manual. Untuk informasi lebih lanjut, lihat Konfigurasikan izin RAM ServiceAccount melalui RRSA untuk mencapai isolasi izin pod.

Tambahkan dependensi

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

Konfigurasikan ARN peran OIDC sebagai kredensial akses

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;
// Catatan: Impor berikut berasal dari dependensi eksternal credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // Konfigurasikan kredensial ARN peran OIDC.
        Config credentialConfig = new Config()
                // Tentukan jenis kredensial. Tetap sebagai oidc_role_arn.
                .setType("oidc_role_arn")
                // ARN peran RAM. Anda dapat mengatur RoleArn melalui variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                .setRoleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
                // ARN penyedia OIDC. Anda dapat mengatur OidcProviderArn melalui variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
                .setOidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // Jalur file token OIDC. Anda dapat mengatur OidcTokenFilePath melalui variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
                .setOidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // Nama sesi peran. Anda dapat mengatur RoleSessionName melalui variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                .setRoleSessionName("your-session-name")
                // Atur kebijakan izin yang lebih ketat. Ini opsional. Contoh nilai: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // Atur periode validitas sesi peran dalam detik. Default adalah 3600 detik (1 jam). Ini opsional.
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // Buat penyedia kredensial untuk pemuatan kredensial dinamis.
        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("Gagal memperoleh kredensial", e);
            }
        });

        // Buat instans client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada, misalnya China (Hangzhou).
                .build()) {
            
            // Gunakan client untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial akses kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan cara memperoleh kredensial tersebut. SDK Java mendukung berbagai metode implementasi untuk tujuan ini.

Implementasikan melalui antarmuka 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) {
        // Buat penyedia kredensial kustom.
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            // TODO: Implementasikan logika pengambilan kredensial kustom Anda.
            
            // Kembalikan kredensial jangka panjang.
            return new Credentials("access_key_id", "access_key_secret");
            
            // Kembalikan token STS (jika diperlukan).
            // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
        });
        
        // Buat client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan client yang dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Implementasikan antarmuka 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: Implementasikan logika pengambilan kredensial kustom Anda.
        
        // Kembalikan kredensial jangka panjang.
        return new Credentials("access_key_id", "access_key_secret");
        
        // Kembalikan token STS (jika diperlukan).
        // Untuk kredensial sementara, Anda perlu memperbaruinya berdasarkan waktu kedaluwarsanya.
        // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
    }
}

public class OSSExample {
    public static void main(String[] args) {
        // Buat penyedia kredensial kustom.
        CredentialsProvider credentialsProvider = new CustomCredentialsProvider();
        
        // Buat client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan client yang dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Akses anonim

Jika Anda hanya perlu mengakses sumber daya Object Storage Service (OSS) dengan izin public-read, Anda dapat menggunakan akses anonim tanpa menyediakan kredensial apa pun.

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) {
        // Buat penyedia kredensial anonim.
        CredentialsProvider credentialsProvider = new AnonymousCredentialsProvider();
        
        // Buat client OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan client yang telah dibuat untuk operasi selanjutnya...
            // Catatan: Akses anonim hanya dapat digunakan untuk sumber daya dengan izin public-read.
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Kode contoh

Klasifikasi fitur

Deskripsi contoh

Versi sinkron

Versi asinkron

Bucket

Buat bucket

PutBucket.java

PutBucketAsync.java

Daftar bucket

ListBuckets.java

ListBucketsAsync.java

Dapatkan informasi bucket

GetBucketInfo.java

GetBucketInfoAsync.java

Dapatkan wilayah bucket

GetBucketLocation.java

GetBucketLocationAsync.java

Dapatkan statistik penyimpanan bucket

GetBucketStat.java

GetBucketStatAsync.java

Hapus bucket

DeleteBucket.java

DeleteBucketAsync.java

Unggah file

Unggah sederhana

PutObject.java

PutObjectAsync.java

Unggah append

AppendObject.java

AppendObjectAsync.java

Unggah multi-bagian

MultipartUpload.java

MultipartUploadAsync.java

Daftar tugas unggah multi-bagian

ListMultipartUploads.java

ListMultipartUploadsAsync.java

Daftar bagian yang diunggah

ListParts.java

ListPartsAsync.java

Batalkan unggah multi-bagian

AbortMultipartUpload.java

AbortMultipartUploadAsync.java

Unduh file

Unduh sederhana

GetObject.java

GetObjectAsync.java

Manajemen file

Salin file

CopyObject.java

CopyObjectAsync.java

Periksa apakah file ada

HeadObject.java

HeadObjectAsync.java

Daftar file

ListObjects.java

ListObjectsAsync.java

Daftar file V2

ListObjectsV2.java

ListObjectsV2Async.java

Hapus file

DeleteObject.java

DeleteObjectAsync.java

Hapus beberapa file

DeleteMultipleObjects.java

DeleteMultipleObjectsAsync.java

Dapatkan metadata file

GetObjectMeta.java

GetObjectMetaAsync.java

Objek arsip

Pulihkan file

RestoreObject.java

RestoreObjectAsync.java

Bersihkan file yang dipulihkan

CleanRestoredObject.java

CleanRestoredObjectAsync.java

Tautan simbolik

Buat tautan simbolik

PutSymlink.java

PutSymlinkAsync.java

Dapatkan tautan simbolik

GetSymlink.java

GetSymlinkAsync.java

Tag objek

Atur tag objek

PutObjectTagging.java

PutObjectTaggingAsync.java

Dapatkan tag objek

GetObjectTagging.java

GetObjectTaggingAsync.java

Hapus tag objek

DeleteObjectTagging.java

DeleteObjectTaggingAsync.java

Resource Access Management

Atur ACL bucket

PutBucketAcl.java

PutBucketAclAsync.java

Dapatkan ACL bucket

GetBucketAcl.java

GetBucketAclAsync.java

Atur ACL objek

PutObjectAcl.java

PutObjectAclAsync.java

Dapatkan ACL objek

GetObjectAcl.java

GetObjectAclAsync.java

Pemberian Versi

Atur pengendalian versi

PutBucketVersioning.java

PutBucketVersioningAsync.java

Dapatkan status pengendalian versi

GetBucketVersioning.java

GetBucketVersioningAsync.java

Daftar versi objek

ListObjectVersions.java

ListObjectVersionsAsync.java

Akses lintas domain

Atur aturan CORS

PutBucketCors.java

PutBucketCorsAsync.java

Dapatkan aturan CORS

GetBucketCors.java

GetBucketCorsAsync.java

Hapus aturan CORS

DeleteBucketCors.java

DeleteBucketCorsAsync.java

Permintaan preflight

OptionObject.java

OptionObjectAsync.java

Fitur sistem

Kueri informasi titik akhir

DescribeRegions.java

DescribeRegionsAsync.java