Sambungkan peran RAM instans ke instans ECS untuk memperoleh token STS guna memanggil API Alibaba Cloud lainnya tanpa mengekspos pasangan AccessKey.
Manfaat
-
Pemanggilan API yang aman: Dapatkan token STS dari ECS tanpa menyematkan pasangan AccessKey dalam kode Anda, sehingga mengurangi risiko kebocoran kredensial.
-
Pergantian identitas yang disederhanakan: Ganti identitas RAM dengan mengubah peran RAM instans, bukan dengan memodifikasi kode atau me-restart layanan.
-
Kontrol akses tingkat granular: Tetapkan peran RAM dengan kebijakan spesifik ke berbagai instans ECS untuk pengelolaan izin yang lebih terperinci.
Batasan
Anda hanya dapat menyambungkan satu peran RAM ke satu instans ECS.
Prosedur
Jika Anda menggunakan pengguna RAM atau peran RAM, berikan izin yang diperlukan terlebih dahulu kepada identitas tersebut.
Buat peran RAM dan sambungkan ke instans ECS
Console
-
Masuk ke RAM console untuk membuat peran RAM dan menyambungkan kebijakan.
-
Buat peran RAM untuk layanan Alibaba Cloud tepercaya.
Pilih Identities > Roles, klik Create Role, lalu ikuti petunjuk di layar. Perhatikan parameter berikut. Lihat Buat peran RAM untuk layanan Alibaba Cloud tepercaya:
-
Cloud Service: Pilih Cloud Service.
-
Principal Name, pilih ECS.
-
-
Berikan izin kepada peran RAM yang telah dibuat.
Sambungkan kebijakan sistem atau kebijakan kustom ke peran RAM tersebut. Misalnya, sambungkan kebijakan sistem AliyunOSSReadOnlyAccess.
Untuk membuat kebijakan kustom, lihat Buat kebijakan kustom.
-
-
Sambungkan peran RAM ke instans ECS.
Buka ECS console - Instances. Di pojok kiri atas, pilih wilayah dan kelompok sumber daya untuk sumber daya target.
-
Temukan instans ECS target, lalu pilih .
-
Pada kotak dialog, pilih peran RAM instans yang telah Anda buat, lalu klik OK.
API
-
Buat peran RAM dan sambungkan kebijakan.
-
Panggil operasi CreateRole untuk membuat peran RAM.
Atur AssumeRolePolicyDocument ke kebijakan kepercayaan berikut:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ecs.aliyuncs.com" ] } } ], "Version": "1" } -
(Opsional) Panggil operasi CreatePolicy untuk membuat kebijakan akses.
Lewati langkah ini jika Anda sudah memiliki kebijakan akses yang sesuai.
Atur
PolicyDocumentsebagai berikut:{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" } -
Panggil operasi AttachPolicyToRole untuk menyambungkan kebijakan ke peran RAM.
-
-
Panggil operasi AttachInstanceRamRole untuk menyambungkan peran RAM ke instans ECS.
Dapatkan kredensial sementara
Dapatkan kredensial sementara dari dalam instans ECS dengan mengakses layanan metadata. Masa berlaku kredensial dikelola secara otomatis. Lihat Metadata instans.
Gunakan tool Credentials
Tool Credentials membungkus ECS IMDS untuk mendapatkan dan memperbarui token STS secara berkala.
Python
-
Instal tool Credentials.
Mode penguatan keamanan memerlukan alibabacloud_credentials versi 0.3.6 atau lebih baru.
pip install alibabacloud_credentials -
Konfigurasikan peran RAM instans ECS sebagai kredensial akses.
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='ecs_ram_role', # Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. role_name='<role_name>', # Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem mencoba lagi dalam mode normal (IMDSv1). disable_imds_v1=False, ) credentialsClient = CredClient(credentialsConfig)
Java
-
Tambahkan dependensi credentials.
Mode penguatan keamanan memerlukan credentials-java versi 0.3.10 atau lebih baru.
<!-- https://mvnrepository.com/artifact/com.aliyun/credentials-java --> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.10</version> </dependency> -
Konfigurasikan peran RAM instans ECS sebagai kredensial akses.
import com.aliyun.credentials.Client; import com.aliyun.credentials.models.Config; public class DemoTest { public static void main(String[] args) throws Exception { Config credentialConfig = new Config(); credentialConfig.setType("ecs_ram_role"); // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. credentialConfig.setRoleName("<RoleName>"); // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem mencoba lagi dalam mode normal (IMDSv1). credentialConfig.setDisableIMDSv1(true); Client credentialClient = new Client(credentialConfig); } }
Go
-
Instal tool Credentials.
Mode penguatan keamanan memerlukan credentials-go versi 1.3.10 atau lebih baru.
-
Gunakan
go getuntuk menginstal:go get -u github.com/aliyun/credentials-go -
Jika Anda menggunakan
depuntuk mengelola dependensi:dep ensure -add github.com/aliyun/credentials-go
-
-
Konfigurasikan peran RAM instans ECS sebagai kredensial akses.
package main import ( "fmt" "github.com/aliyun/credentials-go/credentials" ) func _main(args []*string) { credentialsConfig := new(credentials.Config). SetType("ecs_ram_role"). // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. SetRoleName("<RoleName>"). // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem mencoba lagi dalam mode normal (IMDSv1). SetDisableIMDSv1(true) credentialClient, err := credentials.NewCredential(credentialsConfig) if err != nil { panic(err) } }
Node.js
-
Instal tool Credentials.
Mode penguatan keamanan memerlukan credentials versi 2.3.1 atau lebih baru.
npm install @alicloud/credentials -
Konfigurasikan peran RAM instans ECS sebagai kredensial akses.
const Credential = require('@alicloud/credentials'); const credentialsConfig = new Credential.Config({ type: 'ecs_ram_role', // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. roleName: '<RoleName>', // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem mencoba lagi dalam mode normal (IMDSv1). disableIMDSv1: true, }); const cred = new Credential.default(credentialsConfig);
.NET
-
Instal tool Credentials.
Mode penguatan keamanan memerlukan credentials versi 1.4.2 atau lebih baru.
dotnet add package Aliyun.Credentials -
Konfigurasikan peran RAM instans ECS sebagai kredensial akses.
using Aliyun.Credentials.Models; namespace credentials_demo { class Program { static void Main(string[] args) { var config = new Config() { Type = "ecs_ram_role", // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. RoleName = "<RoleName>", // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem mencoba lagi dalam mode normal (IMDSv1). DisableIMDSv1 = true } } } }
PHP
-
Instal Credentials tool.
Mode penguatan keamanan memerlukan credentials versi 1.2.0 atau lebih baru.
composer require alibabacloud/credentials -
Konfigurasikan peran RAM instans ECS sebagai kredensial akses.
<?php use AlibabaCloud\Credentials\Credential; use AlibabaCloud\Credentials\Credential\Config; $credConfig = new Config([ 'type' => 'ecs_ram_role', // Opsional. Nama peran RAM instans. Jika Anda tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan agar Anda menentukan parameter ini untuk mengurangi permintaan. Anda juga dapat mengatur nama peran menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA. 'roleName' => '<RoleName>', // Opsional. Nilai default adalah false. Jika Anda mengatur nilai ini menjadi true, mode penguatan keamanan diberlakukan. Jika Anda mengatur nilai ini menjadi false, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika gagal, sistem mencoba lagi dalam mode normal (IMDSv1). 'disableIMDSv1' => true, ]);
Gunakan perintah shell
Ambil kredensial sementara melalui titik akhir HTTP layanan metadata.
Mode penguatan keamanan
-
Instans Linux
# Dapatkan token akses server metadata untuk autentikasi. TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<validity_period_of_the_metadata_server_access_token>"` # Dapatkan kredensial akses sementara peran RAM instans. curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>
-
Instans Windows (PowerShell)
# Dapatkan token akses server metadata untuk autentikasi. $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<validity_period_of_the_metadata_server_access_token>"} -Method PUT -Uri http://100.100.100.200/latest/api/token # Dapatkan kredensial akses sementara peran RAM instans. Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>
<validity_period_of_the_metadata_server_access_token>: Periode validitas token akses server metadata. Token harus diperoleh sebelum mengambil kredensial sementara. Setelah kedaluwarsa, peroleh token baru.
Nilai yang valid: 1 hingga 21600. Satuan: detik. Lihat Metadata instans.
<instance_RAM_role_name>: Ganti ini dengan nama peran RAM instans Anda. Contohnya, EcsRamRole.
Jika Anda menggunakan Cloud Assistant untuk menjalankan perintah ini, Agen Asisten Cloud harus memenuhi persyaratan versi minimum berikut:
|
Platform |
Versi minimum Agen Asisten Cloud |
|
windows |
2.1.3.857 |
|
linux |
2.2.3.857 |
|
linux arm |
2.4.3.857 |
|
freebsd |
2.3.3.857 |
Mode normal
-
Instans Linux
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name> -
Instans Windows (PowerShell)
Invoke-RestMethod http://100.100.100.200/latest/meta-data/ram/security-credentials/<instance_RAM_role_name>Ganti
<instance_RAM_role_name>dengan nama peran RAM instans Anda. Contohnya, EcsRamRoleDocumentTesting.
Contoh respons:
-
Token akses sementara terdiri dari
AccessKeyId,AccessKeySecret, danSecurityToken. -
Expiration: Waktu kedaluwarsa kredensial sementara.{ "AccessKeyId" : "STS.*******6YSE", "AccessKeySecret" : "aj******jDU", "Expiration" : "2017-11-01T05:20:01Z", "SecurityToken" : "CAISng********", "LastUpdated" : "2023-07-18T14:17:28Z", "Code" : "Success" }
Gunakan CLI
CLI membungkus ECS IMDS untuk mendapatkan dan memperbarui token STS secara otomatis.
Mode penguatan keamanan memerlukan CLI versi 3.0.248 atau lebih baru.
-
Instal CLI.
-
Konfigurasikan kredensial identitas.
Konfigurasikan informasi kredensial. Ganti <ProfileName> dengan nama konfigurasi Anda.
aliyun configure --profile <ProfileName> --mode EcsRamRoleIkuti petunjuk untuk memasukkan informasi yang diperlukan. Lihat Konfigurasi kredensial.
-
Panggil operasi API.
Contohnya, kueri daftar instans ECS:
aliyun ecs DescribeInstancesLihat Struktur perintah.
Contoh: Panggil API dengan peran RAM instans
Contoh Python berikut mengunduh file dari OSS menggunakan peran RAM instans pada instans ECS Linux.
pip install oss2
pip install alibabacloud_credentials
import oss2
from alibabacloud_credentials.client import Client
from alibabacloud_credentials.models import Config
from oss2 import CredentialsProvider
from oss2.credentials import Credentials
class CredentialProviderWarpper(CredentialsProvider):
def __init__(self, client):
self.client = client
def get_credentials(self):
access_key_id = self.client.get_access_key_id()
access_key_secret = self.client.get_access_key_secret()
security_token = self.client.get_security_token()
return Credentials(access_key_id, access_key_secret, security_token)
def download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name):
config = Config(
type='ecs_ram_role', # Jenis kredensial akses. Nilai ini tetap sebagai ecs_ram_role.
role_name=role_name
)
cred = Client(config)
credentials_provider = CredentialProviderWarpper(cred)
auth = oss2.ProviderAuth(credentials_provider)
# Inisialisasi objek Bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# Unduh gambar ke instans lokal.
bucket.get_object_to_file(object_key, local_file)
print("Gambar berhasil diunduh")
if __name__ == "__main__":
# Definisikan variabel global.
role_name = 'role_name' # Ganti dengan nama peran RAM instans Anda.
bucket_name = 'bucket_name' # Ganti dengan nama bucket Anda.
endpoint = 'oss-cn-beijing.aliyuncs.com' # Ganti dengan titik akhir publik bucket OSS Anda.
object_key = 'testfolder/example.png' # Ganti dengan path lengkap gambar yang ingin Anda unduh dari OSS. Jangan sertakan nama bucket.
local_file = '/localpath/to/image.png' # Ganti dengan path root pada instans ECS tempat Anda ingin menyimpan gambar, dan tentukan nama gambarnya.
download_image_using_instance_role(bucket_name, endpoint, object_key, local_file, role_name)
Operasi lainnya
Lepaskan atau ubah peran RAM instans
Console
Buka ECS console - Instances. Di pojok kiri atas, pilih wilayah dan kelompok sumber daya untuk sumber daya target.
-
Temukan instans ECS yang ingin Anda kelola, lalu pilih .
-
Untuk melepas peran RAM instans: Atur Action ke Detach lalu klik Confirm.
-
Untuk mengubah peran RAM instans: Atur Action ke Attach, pilih peran RAM instans yang diinginkan, lalu klik Confirm.
-
API
-
Untuk melepas peran RAM instans, panggil operasi DetachInstanceRamRole.
-
Untuk mengubah peran RAM instans:
-
Panggil operasi DetachInstanceRamRole untuk melepas peran RAM instans saat ini.
-
Panggil operasi AttachInstanceRamRole untuk menyambungkan peran RAM baru ke instans.
-
Referensi
-
Untuk mengakses Key Management Service (KMS) dari aplikasi kustom pada instans ECS, lihat Gunakan peran RAM instans yang dilampirkan ke instans ECS untuk mengakses KMS secara aman.
-
Untuk mencabut izin tertentu, cabut izin dari peran RAM.
-
Jangan menyematkan AccessKey dalam bentuk teks biasa saat memanggil Alibaba Cloud OpenAPI. Gunakan kredensial akses sebagai gantinya untuk menghindari eksposur akibat pengelolaan repositori kode yang tidak tepat.
> Instance Settings > Attach/Detach RAM Role