Tablestore mendukung berbagai jenis Kredensial akses. Pilih Kredensial akses yang sesuai berdasarkan kebutuhan autentikasi dan otorisasi dalam skenario bisnis Anda.
Pemilihan kredensial akses
Tablestore mendukung jenis kredensial akses seperti AccessKey (AK) dan token STS, serta berbagai metode konfigurasi. Tabel berikut menjelaskan skenario yang sesuai dan dukungan SDK untuk metode konfigurasi yang berbeda.
Metode konfigurasi kredensial akses | Skenario | Pasangan AccessKey atau token STS diperlukan | Kredensial Implementasi Dasar | Periode validitas kredensial | Metode rotasi atau pembaruan kredensial | Dukungan SDK |
Aplikasi diterapkan dan dijalankan dalam lingkungan yang aman dan stabil yang tidak rentan terhadap serangan eksternal dan perlu mengakses layanan cloud untuk jangka waktu panjang tanpa rotasi kredensial yang sering | Ya | AK | Jangka panjang | Rotasi manual | Java, Go, Python, Node.js, .NET, PHP | |
Aplikasi diterapkan dan dijalankan dalam lingkungan yang tidak tepercaya, dalam hal ini Anda ingin mengelola periode validitas kredensial dan sumber daya yang dapat diakses | Ya | STS Token | Sementara | Pembaruan manual | Java, Go, Python, Node.js, PHP | |
Aplikasi memerlukan otorisasi untuk mengakses layanan cloud, seperti akses lintas akun ke layanan cloud | Ya | STS Token | Sementara | Pembaruan otomatis | Java | |
Aplikasi diterapkan dan dijalankan pada instans Elastic Compute Service (ECS), instans kontainer elastis, dan node pekerja Container Service for Kubernetes (ACK) | Tidak | STS Token | Sementara | Pembaruan otomatis | Java | |
Aplikasi yang tidak tepercaya diterapkan dan dijalankan pada node pekerja Container Service for Kubernetes | Tidak | STS Token | Sementara | Pembaruan otomatis | Java | |
Gunakan parameter Credentials dalam konteks Function Compute | Fungsi aplikasi Anda diterapkan dan dijalankan di Function Compute | Tidak | STS Token | Sementara | Tidak perlu diperbarui | Java, Python |
Aplikasi memerlukan kredensial akses dari sistem eksternal | Tidak | STS Token | Sementara | Pembaruan otomatis | Java | |
Aplikasi diterapkan dan dijalankan dalam lingkungan di mana pasangan AccessKey memiliki risiko tinggi kebocoran dan memerlukan rotasi kredensial akses yang sering | Tidak | AK | Jangka panjang | Rotasi otomatis | Java | |
Jika tidak ada metode sebelumnya yang memenuhi kebutuhan Anda, Anda dapat menggunakan metode kustom untuk mendapatkan kredensial akses | Kustom | Kustom | Kustom | Kustom | Java |
Metode konfigurasi kredensial akses
Gunakan pasangan AccessKey dari pengguna RAM
Konfigurasikan kredensial akses menggunakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dari pengguna RAM. Metode ini mengharuskan Anda untuk secara manual memelihara pasangan AccessKey, yang menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan.
Akun Alibaba Cloud memiliki izin penuh atas sumber daya dalam akun tersebut. Kebocoran pasangan AccessKey akun Alibaba Cloud menimbulkan ancaman keamanan yang kritis. Oleh karena itu, kami menyarankan Anda menggunakan pasangan AccessKey dari pengguna RAM dengan izin minimum yang diperlukan. Untuk informasi tentang cara mendapatkan pasangan AccessKey dari pengguna RAM, lihat Gunakan Pasangan AccessKey dari Pengguna RAM untuk Mengakses Tablestore.
Saat menggunakan metode ini, Anda dapat mengonfigurasi kredensial menggunakan variabel lingkungan atau kredensial statis. Berikut adalah penjelasan konfigurasi terperinci:
Variabel lingkungan
Konfigurasikan variabel lingkungan. Setelah konfigurasi selesai, restart atau segarkan lingkungan kompilasi dan runtime Anda, termasuk IDE, antarmuka baris perintah, aplikasi desktop lainnya, dan layanan latar belakang untuk memastikan bahwa variabel lingkungan sistem terbaru berhasil dimuat.
Linux
Jalankan perintah berikut di antarmuka baris perintah untuk menambahkan pengaturan variabel lingkungan ke file
~/.bashrc.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrcJalankan perintah berikut untuk memungkinkan perubahan berlaku:
source ~/.bashrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
macOS
Jalankan perintah berikut di terminal untuk memeriksa jenis Shell default.
echo $SHELLLakukan operasi berdasarkan jenis Shell default.
Zsh
Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file
~/.zshrc.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrcJalankan perintah berikut untuk memungkinkan perubahan berlaku:
source ~/.zshrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Bash
Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file
~/.bash_profile.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profileJalankan perintah berikut untuk memungkinkan perubahan berlaku:
source ~/.bash_profileJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Windows
CMD
Jalankan perintah berikut di CMD untuk mengatur variabel lingkungan.
setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"Setelah me-restart CMD, jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET%
PowerShell
Jalankan perintah berikut di PowerShell:
[Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
Gunakan variabel lingkungan untuk melewatkan kredensial.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProviderFactory; import com.alicloud.openservices.tablestore.core.auth.EnvironmentVariableCredentialsProvider; public class AkDemoTest { public static void main(String[] args) throws Exception { { // Contoh 1: Dapatkan kredensial akses dari variabel lingkungan. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Gunakan credentialsProvider untuk melakukan operasi selanjutnya. } { // Contoh 2: Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID"); final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET"); // Gunakan ID AccessKey dan Rahasia AccessKey untuk melakukan operasi selanjutnya. } } }accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID") accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET")# -*- coding: utf-8 -*- import os access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID") access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")var accessKeyId = process.env.TABLESTORE_ACCESS_KEY_ID; var secretAccessKey = process.env.TABLESTORE_ACCESS_KEY_SECRET;// Dapatkan kredensial akses dari variabel lingkungan. var AccessKeyId = Environment.GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID"); var AccessKeySecret = Environment.GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET");$accessKeyId = getenv('TABLESTORE_ACCESS_KEY_ID'); $accessKeySecret = getenv('TABLESTORE_ACCESS_KEY_SECRET');
Kredensial statis
Anda dapat merujuk kredensial dengan menentukan variabel dalam kode Anda. Dalam lingkungan runtime, variabel dilewatkan oleh nilai kredensial aktual dari variabel lingkungan, file konfigurasi, atau sumber data eksternal lainnya.
Prosedur berikut menjelaskan cara menggunakan kredensial statis di SDK Tablestore umum dengan file konfigurasi sebagai contoh.
Buat file konfigurasi bernama
config.ini.[configName] TABLESTORE_ACCESS_KEY_ID = your_access_key_id TABLESTORE_ACCESS_KEY_SECRET = your_access_key_secretGunakan file konfigurasi untuk melewatkan kredensial.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider; import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider; import java.io.FileInputStream; import java.util.Properties; public class AkDemoTest { public static void main(String[] args) throws Exception { Properties properties = new Properties(); // Tentukan jalur file config.ini. Gunakan jalur aktual. String configFilePath = "config.ini"; // Baca file konfigurasi. FileInputStream input = new FileInputStream(configFilePath); properties.load(input); input.close(); // Dapatkan pasangan AccessKey dari file konfigurasi. String accessKeyId = properties.getProperty("TABLESTORE_ACCESS_KEY_ID"); String accessKeySecret = properties.getProperty("TABLESTORE_ACCESS_KEY_SECRET"); CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); // Gunakan credentialsProvider untuk operasi selanjutnya. } }// Baca file konfigurasi. Gunakan jalur aktual. config, err := ini.Load("config.ini") if err != nil { fmt.Println("Gagal membaca file konfigurasi:", err) } // Dapatkan ID AccessKey dan Rahasia AccessKey dari file konfigurasi. access_key_id := config.Section("configName").Key("TABLESTORE_ACCESS_KEY_ID").String() access_key_secret := config.Section("configName").Key("TABLESTORE_ACCESS_KEY_SECRET").String()# -*- coding: utf-8 -*- import configparser # Baca file konfigurasi config = configparser.ConfigParser() # Asumsikan bahwa config.ini berada di direktori yang sama dengan skrip. Gunakan jalur aktual. config.read('config.ini') # Dapatkan ID AccessKey dan Rahasia AccessKey dari file konfigurasi. access_key_id = config.get('configName', 'TABLESTORE_ACCESS_KEY_ID') access_key_secret = config.get('configName', 'TABLESTORE_ACCESS_KEY_SECRET')try { // Baca file konfigurasi. Asumsikan bahwa config.ini berada di direktori yang sama dengan skrip. Gunakan jalur aktual. $config = parse_ini_file('config.ini'); // Dapatkan ID AccessKey dan Rahasia AccessKey. $accessKeyId = $config['TABLESTORE_ACCESS_KEY_ID']; $accessKeySecret = $config['TABLESTORE_ACCESS_KEY_SECRET']; }catch (Exception $e) { printf($e->getMessage() . "\n"); return; }
Gunakan kredensial akses sementara STS
Konfigurasikan kredensial akses menggunakan kredensial akses sementara (ID AccessKey, Rahasia AccessKey, dan Token Keamanan) yang diperoleh dari STS. Metode ini mengharuskan Anda untuk secara manual memelihara token STS, yang menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan. Jika Anda ingin mengakses Tablestore beberapa kali, Anda harus secara manual menyegarkan token STS. Untuk informasi tentang cara mendapatkan kredensial akses sementara STS, lihat Gunakan Kredensial Akses Sementara yang Diperoleh dari STS untuk Mengakses Tablestore.
Saat menggunakan metode ini, Anda dapat mengonfigurasi kredensial akses sementara menggunakan variabel lingkungan atau kredensial statis. Berikut adalah penjelasan konfigurasi terperinci:
Variabel lingkungan
Konfigurasikan variabel lingkungan. Setelah konfigurasi selesai, restart atau segarkan lingkungan kompilasi dan runtime Anda, termasuk IDE, antarmuka baris perintah, aplikasi desktop lainnya, dan layanan latar belakang untuk memastikan bahwa variabel lingkungan sistem terbaru berhasil dimuat.
Linux
Jalankan perintah berikut di antarmuka baris perintah untuk menambahkan pengaturan variabel lingkungan ke file
~/.bashrc.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.bashrc echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.bashrcJalankan perintah berikut untuk memungkinkan perubahan berlaku:
source ~/.bashrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET echo $TABLESTORE_SESSION_TOKEN
macOS
Jalankan perintah berikut di terminal untuk memeriksa jenis Shell default.
echo $SHELLLakukan operasi berdasarkan jenis Shell default.
Zsh
Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file
~/.zshrc.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.zshrc echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.zshrcJalankan perintah berikut untuk memungkinkan perubahan berlaku:
source ~/.zshrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET echo $TABLESTORE_SESSION_TOKEN
Bash
Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file
~/.bash_profile.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.bash_profile echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.bash_profileJalankan perintah berikut untuk memungkinkan perubahan berlaku:
source ~/.bash_profileJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET echo $TABLESTORE_SESSION_TOKEN
Windows
CMD
Jalankan perintah berikut di CMD untuk mengatur variabel lingkungan.
setx TABLESTORE_ACCESS_KEY_ID "YOUR_STS_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_STS_ACCESS_KEY_SECRET" setx TABLESTORE_SESSION_TOKEN "YOUR_STS_TOKEN"Setelah me-restart CMD, jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET% echo %TABLESTORE_SESSION_TOKEN%
PowerShell
Jalankan perintah berikut di PowerShell:
[Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_STS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_STS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_SESSION_TOKEN", "YOUR_STS_TOKEN", [EnvironmentVariableTarget]::User)Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_SESSION_TOKEN", [EnvironmentVariableTarget]::User)
Gunakan variabel lingkungan untuk melewatkan kredensial.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProviderFactory; import com.alicloud.openservices.tablestore.core.auth.EnvironmentVariableCredentialsProvider; public class StsDemoTest { public static void main(String[] args) throws Exception { { // Contoh 1: Dapatkan kredensial akses dari variabel lingkungan. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Gunakan credentialsProvider untuk operasi selanjutnya. } { // Contoh 2: Dapatkan ID AccessKey, Rahasia AccessKey, dan token keamanan dari variabel lingkungan. final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID"); final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET"); final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN"); // Gunakan ID AccessKey, Rahasia AccessKey, dan token keamanan untuk melakukan operasi selanjutnya. } } }accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID") accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET") securityToken := os.Getenv("TABLESTORE_SESSION_TOKEN")# -*- coding: utf-8 -*- import os access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID") access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET") sts_token = os.getenv("TABLESTORE_SESSION_TOKEN")var accessKeyId = process.env.TABLESTORE_ACCESS_KEY_ID; var secretAccessKey = process.env.TABLESTORE_ACCESS_KEY_SECRET; var stsToken = process.env.TABLESTORE_SESSION_TOKEN;$accessKeyId = getenv('TABLESTORE_ACCESS_KEY_ID'); $accessKeySecret = getenv('TABLESTORE_ACCESS_KEY_SECRET'); $securityToken = getenv('TABLESTORE_SESSION_TOKEN');
Kredensial statis
Anda dapat merujuk kredensial dengan menentukan variabel dalam kode Anda. Dalam lingkungan runtime, variabel dilewatkan oleh nilai kredensial aktual dari variabel lingkungan, file konfigurasi, atau sumber data eksternal lainnya.
Prosedur berikut menjelaskan cara menggunakan kredensial statis di SDK Tablestore umum dengan file konfigurasi sebagai contoh.
Buat file konfigurasi bernama
config.ini.[configName] TABLESTORE_ACCESS_KEY_ID = your_sts_access_key_id TABLESTORE_ACCESS_KEY_SECRET = your_sts_access_key_secret TABLESTORE_SESSION_TOKEN = your_sts_tokenGunakan file konfigurasi untuk melewatkan kredensial.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider; import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider; import java.io.FileInputStream; import java.util.Properties; public class StsDemoTest { public static void main(String[] args) throws Exception { Properties properties = new Properties(); // Tentukan jalur file config.ini. Gunakan jalur aktual. String configFilePath = "config.ini"; // Baca file konfigurasi. FileInputStream input = new FileInputStream(configFilePath); properties.load(input); input.close(); // Dapatkan pasangan AccessKey dan token keamanan dari file konfigurasi. String accessKeyId = properties.getProperty("TABLESTORE_ACCESS_KEY_ID"); String accessKeySecret = properties.getProperty("TABLESTORE_ACCESS_KEY_SECRET"); String securityToken = properties.getProperty("TABLESTORE_SESSION_TOKEN"); CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret, securityToken); // Gunakan credentialsProvider untuk operasi selanjutnya. } }// Baca file konfigurasi. Gunakan jalur aktual. config, err := ini.Load("config.ini") if err != nil { fmt.Println("Gagal membaca file konfigurasi:", err) } // Dapatkan ID AccessKey dan Rahasia AccessKey dari file konfigurasi. access_key_id := config.Section("configName").Key("TABLESTORE_ACCESS_KEY_ID").String() access_key_secret := config.Section("configName").Key("TABLESTORE_ACCESS_KEY_SECRET").String() security_token := config.Section("configName").Key("TABLESTORE_SESSION_TOKEN").String()# -*- coding: utf-8 -*- import configparser # Baca file konfigurasi config = configparser.ConfigParser() # Asumsikan bahwa config.ini berada di direktori yang sama dengan skrip. Gunakan jalur aktual. config.read('config.ini') # Dapatkan ID AccessKey dan Rahasia AccessKey dari file konfigurasi. access_key_id = config.get('configName', 'TABLESTORE_ACCESS_KEY_ID') access_key_secret = config.get('configName', 'TABLESTORE_ACCESS_KEY_SECRET') security_token = config.get('configName', 'TABLESTORE_SESSION_TOKEN')try { // Baca file konfigurasi. Asumsikan bahwa config.ini berada di direktori yang sama dengan skrip. Gunakan jalur aktual. $config = parse_ini_file('config.ini'); // Dapatkan ID AccessKey, Rahasia AccessKey, dan token keamanan. $accessKeyId = $config['TABLESTORE_ACCESS_KEY_ID']; $accessKeySecret = $config['TABLESTORE_ACCESS_KEY_SECRET']; $securityToken = $config['TABLESTORE_SESSION_TOKEN']; }catch (Exception $e) { printf($e->getMessage() . "\n"); return; }
Gunakan RAMRoleARN
Konfigurasikan kredensial akses menggunakan RAMRoleARN. Logika dasar metode ini adalah menggunakan token STS untuk mengonfigurasi kredensial akses. Dengan menentukan Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM, alat Kredensial mendapatkan token keamanan dari STS dan secara otomatis menyegarkan token keamanan sebelum sesi berakhir. Anda juga dapat menentukan parameter policy untuk membatasi izin yang diberikan kepada peran RAM. Metode ini mengharuskan Anda untuk menyediakan pasangan AccessKey, yang menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan. Untuk informasi tentang cara mendapatkan pasangan AccessKey, lihat CreateAccessKey. Untuk informasi tentang cara mendapatkan ARN dari peran RAM, lihat CreateRole.
Tambahkan dependensi untuk kredensial.
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency>Gunakan pasangan AccessKey dan ARN dari Peran RAM sebagai kredensial akses.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider; import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials; import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials; import com.aliyun.credentials.models.CredentialModel; public class RamRoleArnAkDemoTest { public static void main(String[] args) { com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config(); // Setel tipe kredensial ke ram_role_arn. config.setType("ram_role_arn"); // Tentukan ARN dari peran RAM yang ingin diasumsikan oleh pengguna RAM. Anda dapat menentukan ARN dari peran RAM menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole. config.setRoleArn("<RoleArn>"); // Dapatkan ID AccessKey dari variabel lingkungan. config.setAccessKeyId(System.getenv().get("TABLESTORE_ACCESS_KEY_ID")); // Dapatkan Rahasia AccessKey dari variabel lingkungan. config.setAccessKeySecret(System.getenv().get("TABLESTORE_ACCESS_KEY_SECRET")); // Tentukan nama sesi dari peran RAM. config.setRoleName("roleSessionName"); // (Opsional) Tentukan izin terbatas untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"} config.setPolicy("<Policy>"); // (Opsional) Tentukan periode validitas sesi peran. config.setRoleSessionExpiration(3600); final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config); CredentialsProvider credentialsProvider = new CredentialsProvider(){ @Override public void setCredentials(ServiceCredentials credentials) { } @Override public ServiceCredentials getCredentials() { CredentialModel credential = credentialsClient.getCredential(); return new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken()); } }; // Gunakan credentialsProvider untuk melakukan operasi selanjutnya. } }
Gunakan ECSRAMRole
Gunakan peran RAM ECS untuk mengonfigurasi kredensial akses. Logika dasar metode ini adalah menggunakan token STS. Peran RAM ECS memungkinkan Anda mengaitkan peran dengan instance ECS, instance ECI, atau node pekerja Container Service for Kubernetes untuk secara otomatis menyegarkan token STS pada instance tersebut. Metode ini tidak memerlukan Anda untuk menyediakan pasangan AccessKey atau token STS, yang menghilangkan risiko yang muncul saat Anda secara manual memmemelihara pasangan AccessKey atau token STS. Untuk informasi tentang cara mendapatkan peran RAM ECS, lihat CreateRole.
Tambahkan dependensi kredensial.
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency>Gunakan Peran RAM untuk menyediakan kredensial akses.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider; import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials; import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials; import com.aliyun.credentials.models.CredentialModel; public class EcsRamRoleDemoTest { public static void main(String[] args) { com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config(); // Atur tipe kredensial menjadi ecs_ram_role. config.setType("ecs_ram_role"); // (Opsional) Tentukan nama Peran RAM yang dilampirkan ke instance ECS. Jika Anda tidak mengonfigurasi parameter ini, sistem secara otomatis mencari Peran RAM. Kami merekomendasikan agar Anda mengonfigurasi parameter ini untuk mengurangi jumlah permintaan. config.setRoleName("ECSRAMRole"); //(Opsional) Aktifkan mode penguatan keamanan untuk metadata instance ECS. Kami merekomendasikan agar Anda mengonfigurasi parameter ini untuk meningkatkan keamanan keseluruhan sistem. config.setEnableIMDSv2(true); final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config); CredentialsProvider credentialsProvider = new CredentialsProvider(){ @Override public void setCredentials(ServiceCredentials credentials) { } @Override public ServiceCredentials getCredentials() { CredentialModel credential = credentialsClient.getCredential(); return new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken()); } }; // Gunakan credentialsProvider untuk melakukan operasi selanjutnya. } }
Gunakan OIDCRoleARN
Setelah Anda mengonfigurasi peran RAM untuk node pekerja di Container Service for Kubernetes (ACK), aplikasi dalam pod pada node tersebut dapat memperoleh token STS untuk peran terkait dari layanan metadata (Meta Data Server), mirip dengan aplikasi yang diterapkan pada ECS. Namun, jika aplikasi yang tidak tepercaya diterapkan pada kluster kontainer, seperti aplikasi yang dikirimkan oleh pelanggan Anda yang kode sumbernya tidak tersedia bagi Anda, Anda mungkin tidak ingin mereka memperoleh token STS untuk peran RAM yang terkait dengan instance node pekerja dari layanan metadata. Untuk memastikan keamanan sumber daya cloud, izinkan aplikasi yang tidak tepercaya untuk secara aman memperoleh token STS yang diperlukan, dan meminimalkan izin tingkat aplikasi, Anda dapat menggunakan fitur RAM Roles for Service Account (RRSA). Logika dasar metode ini adalah menggunakan token STS. ACK membuat dan memasang file token OpenID Connect (OIDC) akun layanan yang sesuai untuk pod aplikasi yang berbeda, dan meneruskan informasi konfigurasi terkait ke variabel lingkungan. Alat Kredensial mendapatkan informasi konfigurasi dari variabel lingkungan dan memanggil operasi AssumeRoleWithOIDC dari STS untuk mendapatkan token STS dari peran yang dilampirkan. Metode ini tidak memerlukan pasangan AccessKey atau token STS, menghilangkan risiko yang terkait dengan pengelolaan manual kredensial ini. Untuk informasi lebih lanjut, lihat Gunakan RRSA untuk mengonfigurasi izin RAM untuk ServiceAccount dan menerapkan isolasi izin tingkat pod.
Tambahkan dependensi kredensial.
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency>>Gunakan Peran RAM untuk Penyedia Identitas OIDC untuk menyediakan kredensial akses.
public class OidcRoleArnDemoTest { public static void main(String[] args) { com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config(); // Setel tipe kredensial ke oidc_role_arn. config.setType("oidc_role_arn"); // Tentukan ARN dari peran RAM menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. config.setRoleArn("<RoleArn>"); // Tentukan ARN dari Penyedia Identitas OIDC. Anda dapat memperoleh ARN dari variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN. config.setOidcProviderArn("<OidcProviderArn>"); // Tentukan jalur file token OIDC. Anda dapat memperoleh file token OIDC dari variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE. config.setOidcTokenFilePath("<OidcTokenFilePath>"); // Tentukan nama sesi peran. Anda dapat memperoleh nama sesi peran dari variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME. config.setRoleSessionName("<RoleSessionName>"); // (Opsional) Tentukan izin terbatas untuk peran RAM. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"} config.setPolicy("<Policy>"); // Tentukan periode validitas sesi. config.setRoleSessionExpiration(3600); final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config); CredentialsProvider credentialsProvider = new CredentialsProvider() { @Override public void setCredentials(ServiceCredentials credentials) { } @Override public ServiceCredentials getCredentials() { CredentialModel credential = credentialsClient.getCredential(); return new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken()); } }; // Gunakan credentialsProvider untuk melakukan operasi selanjutnya. } }
Gunakan Parameter Credentials dalam konteks Function Compute
Gunakan Parameter Credentials dalam konteks Function Compute untuk mengonfigurasi kredensial akses. Logika dasar metode ini adalah menggunakan token Security Token Service (STS). Function Compute memperoleh token STS dengan mengasumsikan peran layanan berdasarkan peran yang dikonfigurasikan untuk fungsi tersebut. Token STS kemudian diteruskan ke aplikasi Anda menggunakan Parameter Credentials dalam konteks. Token STS berlaku selama 36 jam. Anda tidak dapat mengubah periode validitasnya. Waktu eksekusi maksimum sebuah fungsi adalah 24 jam. Oleh karena itu, Anda tidak perlu menyegarkan token STS karena tidak kedaluwarsa saat fungsi dieksekusi. Metode ini tidak memerlukan Anda untuk menyediakan pasangan AccessKey atau token STS, yang menghilangkan risiko yang terkait dengan pengelolaan manual kredensial ini. Untuk informasi lebih lanjut tentang cara memberikan izin Function Compute untuk mengakses Tablestore, lihat Gunakan peran fungsi untuk memberikan izin Function Compute untuk mengakses layanan cloud lainnya.
Implementasi dalam Java
Tambahkan dependensi konteks Function Compute.
<!-- https://mvnrepository.com/artifact/com.aliyun.fc.runtime/fc-java-core --> <dependency> <groupId>com.aliyun.fc.runtime</groupId> <artifactId>fc-java-core</artifactId> <version>1.4.1</version> </dependency>Inisialisasi penyedia kredensial menggunakan Parameter Credentials dalam konteks Function Compute.
package example; import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider; import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider; import com.aliyun.fc.runtime.Context; import com.aliyun.fc.runtime.Credentials; import com.aliyun.fc.runtime.StreamRequestHandler; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class App implements StreamRequestHandler { @Override public void handleRequest( InputStream inputStream, OutputStream outputStream, Context context) throws IOException { // Dapatkan informasi kunci. Sebelum Anda menjalankan fungsi, pastikan bahwa peran telah dikonfigurasikan untuk layanan tempat fungsi tersebut berada dan bahwa peran tersebut diberi izin untuk mengakses Tablestore. Kami merekomendasikan agar Anda menggunakan peran AliyunFCDefaultRole. Credentials creds = context.getExecutionCredentials(); // Gunakan kredensial yang diperoleh untuk membuat instance penyedia kredensial. CredentialsProvider credentialsProvider = new DefaultCredentialProvider(creds.getAccessKeyId(), creds.getAccessKeySecret(), creds.getSecurityToken()); // Gunakan credentialsProvider untuk melakukan operasi selanjutnya. outputStream.write(new String("done").getBytes()); } }
Implementasi dalam Python
Gunakan Parameter Credentials dalam konteks Function Compute untuk mendapatkan kredensial akses sementara.
# -*- coding: utf-8 -*-
def handler(event, context):
# Dapatkan informasi kunci. Sebelum Anda mengeksekusi fungsi, pastikan bahwa peran telah dikonfigurasikan untuk layanan tempat fungsi tersebut berada dan bahwa peran tersebut diberi izin untuk mengakses Tablestore. Kami sarankan Anda menggunakan peran AliyunFCDefaultRole.
creds = context.credentials
access_key_id = creds.access_key_id
access_key_secret = creds.access_key_secret
security_token = creds.security_token
# Lakukan operasi selanjutnya.
return 'success'Gunakan CredentialsURI
Konfigurasikan kredensial akses menggunakan CredentialsURI. Logika dasar metode ini adalah menggunakan token STS untuk mengonfigurasi kredensial akses. Alat Kredensial memperoleh token STS menggunakan URI yang Anda tentukan untuk menginisialisasi klien kredensial. Metode ini tidak memerlukan pasangan AccessKey atau token STS, menghilangkan risiko yang terkait dengan pengelolaan manual kredensial ini. Layanan backend yang menyediakan respons URI kredensial harus secara otomatis menyegarkan token STS untuk memastikan bahwa aplikasi Anda selalu dapat memperoleh kredensial yang valid.
Untuk memungkinkan Alat Kredensial mem-parsing dan menggunakan token STS dengan benar, URI harus mematuhi protokol respons berikut:
Kode status respons: 200
Struktur badan respons:
{ "Code": "Success", "AccessKeySecret": "AccessKeySecret", "AccessKeyId": "AccessKeyId", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "SecurityToken" }
Tambahkan dependensi kredensial.
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency>Konfigurasikan URI kredensial sebagai kredensial akses.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider; import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials; import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials; import com.aliyun.credentials.models.CredentialModel; public class CredentialsUriDemoTest { public static void main(String[] args) { com.aliyun.credentials.models.Config config = new com.aliyun.credentials.models.Config(); // Atur tipe kredensial menjadi credentials_uri. config.setType("credentials_uri"); // Tentukan URI untuk mendapatkan kredensial dalam format http://local_or_remote_uri/. config.setCredentialsUri("<local_or_remote_uri>"); final com.aliyun.credentials.Client credentialsClient = new com.aliyun.credentials.Client(config); CredentialsProvider credentialsProvider = new CredentialsProvider() { @Override public void setCredentials(ServiceCredentials credentials) { } @Override public ServiceCredentials getCredentials() { CredentialModel credential = credentialsClient.getCredential(); return new DefaultCredentials(credential.getAccessKeyId(), credential.getAccessKeySecret(), credential.getSecurityToken()); } }; // Gunakan credentialsProvider untuk melakukan operasi selanjutnya. } }
Gunakan pasangan AccessKey yang berputar secara otomatis
Konfigurasikan kredensial akses menggunakan kunci klien. Setelah Anda menggunakan kunci klien, Key Management Service (KMS) dapat secara otomatis dan teratur memutar pasangan AccessKey dari pengguna RAM yang dikelola dan secara dinamis mengubah pasangan AccessKey statis dari pengguna RAM. Ini mengurangi risiko kebocoran pasangan AccessKey. KMS juga mendukung pemutaran segera untuk dengan cepat menonaktifkan pasangan AccessKey yang bocor. Ini menghilangkan kebutuhan untuk secara manual memelihara pasangan AccessKey dan mengurangi risiko keamanan serta kompleksitas pemeliharaan.
Tambahkan dependensi klien kredensial.
<dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-secretsmanager-client</artifactId> <version>1.3.7</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.7.0</version> </dependency>Buat file konfigurasi bernama
secretsmanager.properties.# Atur tipe kredensial menjadi client_key. credentials_type=client_key # Tentukan kata sandi dekripsi kunci klien. Anda dapat memperoleh kata sandi dekripsi dari variabel lingkungan atau file konfigurasi. client_key_password_from_env_variable=<your client key private key password environment variable name> client_key_password_from_file_path=<your client key private key password file path> # Tentukan jalur file kunci privat dari kunci klien. client_key_private_key_path=<your client key private key file path> # Tentukan ID wilayah tempat Anda ingin menggunakan KMS. cache_client_region_id=[{"regionId":"<regionId>"}]Gunakan file konfigurasi untuk melewatkan kredensial.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider; import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials; import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials; import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient; import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder; import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException; import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; public class ClientKeyDemoTest { public static void main(String[] args) throws CacheSecretException { final SecretCacheClient client = SecretCacheClientBuilder.newClient(); CredentialsProvider credentialsProvider = new CredentialsProvider() { @Override public void setCredentials(ServiceCredentials credentials) { } @Override public ServiceCredentials getCredentials() { try { SecretInfo secretInfo = client.getSecretInfo("<secretName>"); JSONObject jsonObject = new JSONObject(secretInfo.getSecretValue()); String accessKeyId = jsonObject.getString("AccessKeyId"); String accessKeySecret = jsonObject.getString("AccessKeySecret"); return new DefaultCredentials(accessKeyId, accessKeySecret); } catch (CacheSecretException | JSONException e) { return null; } } }; // Gunakan credentialsProvider untuk melakukan operasi selanjutnya. } }
Gunakan kredensial akses kustom
Jika tidak ada metode sebelumnya yang memenuhi kebutuhan Anda, Anda dapat menentukan metode kustom untuk mendapatkan kredensial akses dengan memanggil operasi Credential Providers. Jika implementasi dasar didasarkan pada token STS, Anda perlu menyediakan dukungan pembaruan kredensial.
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.ServiceCredentials;
public class CustomCredentialProviderDemoTest {
public static void main(String[] args) {
CredentialsProvider credentialsProvider = new CredentialsProvider(){
// Inisialisasi variabel.
String accessKeyId = null;
// Inisialisasi variabel.
String accessKeySecrect = null;
// Inisialisasi variabel.
// String token = null;
@Override
public void setCredentials(ServiceCredentials credentials) {
}
@Override
public ServiceCredentials getCredentials() {
//TODO
// Tentukan metode kustom untuk mendapatkan kredensial akses.
// Kembalikan kredensial akses jangka panjang, yang terdiri dari ID AccessKey dan Rahasia AccessKey.
return new DefaultCredentials(accessKeyId, accessKeySecrect);
// Kembalikan kredensial akses sementara, yang terdiri dari ID AccessKey, Rahasia AccessKey, dan token STS.
// Perbarui kredensial akses sementara berdasarkan waktu kedaluwarsa.
// return new DefaultCredentials(accessKeyId, accessKeySecrect, token);
}
};
// Gunakan credentialsProvider untuk melakukan operasi selanjutnya.
}
}