Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aplikasi Karat harus mengautentikasi ke layanan Azure seperti Storage, Key Vault, atau Cosmos DB. Artikel ini menjelaskan cara menggunakan peti Azure Identity untuk mengautentikasi aplikasi Rust dengan aman di lingkungan pengembangan dan server lokal, meningkatkan keamanan dan menyederhanakan manajemen kredensial.
Autentikasi berbasis token yang direkomendasikan
Pendekatan yang disarankan adalah meminta aplikasi Anda menggunakan autentikasi berbasis token, bukan string koneksi atau kunci, saat mengautentikasi ke sumber daya Azure. Peti azure_identity menyediakan autentikasi berbasis token dan memungkinkan aplikasi mengautentikasi ke sumber daya Azure dengan lancar apakah aplikasi berada dalam pengembangan lokal, disebarkan ke Azure, atau disebarkan ke server lokal.
Jenis autentikasi berbasis token tertentu yang harus digunakan aplikasi untuk mengautentikasi ke sumber daya Azure bergantung pada tempat aplikasi berjalan.
| Lingkungan | Authentication |
|---|---|
| Lokal | Saat pengembang menjalankan aplikasi selama pengembangan lokal - Aplikasi dapat mengautentikasi ke Azure menggunakan kredensial lokal pengembang. Opsi ini disediakan secara lebih rinci dalam crates.io: Mengautentikasi dengan alat pengembangan. |
| Azure | Saat aplikasi dihosting di Azure - Aplikasi harus mengautentikasi ke sumber daya Azure menggunakan identitas terkelola. Opsi ini dibahas secara lebih rinci dalam dokumentasi crates.io : Mengautentikasi aplikasi yang dihosting Azure. |
| Lokal | Saat aplikasi dihosting dan disebarkan secara lokal - Aplikasi harus mengautentikasi ke sumber daya Azure menggunakan perwakilan layanan aplikasi. Opsi ini dibahas dalam dokumentasi crates.io : Mengautentikasi perwakilan layanan. |
Keuntungan autentikasi berbasis token
Saat membuat aplikasi untuk Azure, sebaiknya gunakan autentikasi berbasis token alih-alih rahasia seperti string koneksi atau kunci.
| Autentikasi berbasis token | Rahasia (string koneksi dan kunci) |
|---|---|
| Prinsip hak istimewa paling sedikit, menetapkan izin khusus yang diperlukan oleh aplikasi pada sumber daya Azure. | String koneksi atau kunci memberikan hak penuh ke sumber daya Azure. |
| Tidak ada rahasia aplikasi untuk disimpan. | Harus menyimpan dan memutar rahasia dalam pengaturan aplikasi atau variabel lingkungan. |
| Pustaka Azure Identity mengelola token untuk Anda di belakang layar. Ini membuat penggunaan autentikasi berbasis token mudah digunakan sebagai string koneksi. | Rahasia tidak dikelola. |
Penggunaan string koneksi harus terbatas pada bukti awal aplikasi konsep atau prototipe pengembangan yang tidak mengakses produksi atau data sensitif. Jika tidak, kelas autentikasi berbasis token yang tersedia di pustaka Azure Identity harus selalu disukai saat mengautentikasi ke sumber daya Azure.
Mengautentikasi selama pengembangan lokal
Saat aplikasi dijalankan di stasiun kerja pengembang selama pengembangan lokal, lingkungan lokal harus tetap mengautentikasi ke layanan Azure apa pun yang digunakan oleh aplikasi.
Mengautentikasi dengan kredensial Azure CLI
Kredensial Azure CLI menggunakan status autentikasi Azure CLI untuk mengautentikasi aplikasi Rust Anda. Kredensial ini sangat ideal untuk pengembangan lokal ketika Anda sudah masuk dengan az login.
use azure_identity::AzureCliCredential;
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let credential = AzureCliCredential::new(None)?;
let client = SecretClient::new(&vault_url, credential.clone(), None)?;
Ok(())
}
Mengautentikasi dengan kredensial Azure Developer CLI
Kredensial Azure Developer CLI menggunakan status autentikasi Azure Developer CLI (azd) untuk mengautentikasi aplikasi Anda. Kredensial ini berguna saat bekerja dengan templat dan alur kerja azd.
use azure_identity::AzureDeveloperCliCredential;
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let credential = AzureDeveloperCliCredential::new(None)?;
let client = SecretClient::new(&vault_url, credential.clone(), None)?;
Ok(())
}
Mengautentikasi di lingkungan server
Di lingkungan server, gunakan identitas terkelola untuk autentikasi tanpa kata sandi yang aman. Identitas terkelola secara otomatis dibuat dan dikelola oleh Azure, sehingga aplikasi Anda dapat mengautentikasi tanpa perlu menyimpan kredensial.
Saat menghosting di lingkungan server, tetapkan identitas aplikasi unik ke setiap aplikasi untuk setiap lingkungan. Di Azure, identitas aplikasi diwakili oleh perwakilan layanan, jenis perwakilan keamanan khusus yang mengidentifikasi dan mengautentikasi aplikasi ke Azure. Jenis perwakilan layanan yang Anda gunakan untuk aplikasi bergantung pada tempat aplikasi Anda berjalan.
use azure_identity::{ManagedIdentityCredential, ManagedIdentityCredentialOptions, UserAssignedId};
use azure_security_keyvault_secrets::SecretClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotazure::load()?;
let vault_url = std::env::var("AZURE_KEYVAULT_URL")
.map_err(|_| "AZURE_KEYVAULT_URL environment variable is required")?;
let user_assigned_id: Option<UserAssignedId> = std::env::var("AZURE_USER_ASSIGNED_IDENTITY")
.ok()
.map(|id| UserAssignedId::ClientId(id.clone()));
let credential_options = ManagedIdentityCredentialOptions {
user_assigned_id,
..Default::default()
};
let credential = ManagedIdentityCredential::new(Some(credential_options))?;
let client = SecretClient::new(vault_url.as_str(), credential.clone(), None)?;
Ok(())
}
Contoh kode
Kode yang diperlihatkan dalam artikel ini tersedia di https://github.com/azure-samples/azure-sdk-for-rust-docs/.
Sumber daya tambahan
- Peti Azure SDK di Crates.io - Daftar peti Azure SDK yang tersedia
- Panduan desain Azure SDK - Prinsip dan pola desain
- Repositori GitHub Azure SDK for Rust - Masalah dan kode sumber
- Dokumentasi kargo - Referensi Lengkap Kargo