Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje Rust muszą uwierzytelniać się w usługach platformy Azure, takich jak Storage, Key Vault lub Cosmos DB. W tym artykule wyjaśniono, jak używać skrzyni tożsamości platformy Azure do bezpiecznego uwierzytelniania aplikacji Rust w lokalnych środowiskach deweloperskich i serwerowych, poprawiając bezpieczeństwo i upraszczając zarządzanie poświadczeniami.
Zalecane uwierzytelnianie oparte na tokenach
Zalecaną metodą jest użycie uwierzytelniania opartego na tokenach, a nie parametrów połączenia lub kluczy podczas uwierzytelniania w zasobach platformy Azure. Skrzynia azure_identity zapewnia uwierzytelnianie oparte na tokenach i umożliwia aplikacjom bezproblemowe uwierzytelnianie w zasobach platformy Azure niezależnie od tego, czy aplikacja jest w środowisku lokalnym, wdrożona na platformie Azure, czy wdrożona na serwerze lokalnym.
Określony typ uwierzytelniania opartego na tokenach, którego aplikacja powinna używać do uwierzytelniania w zasobach platformy Azure, zależy od tego, gdzie aplikacja jest uruchomiona.
| Środowisko | Authentication |
|---|---|
| Lokalny | Gdy deweloper uruchamia aplikację podczas programowania lokalnego — aplikacja może uwierzytelniać się na platformie Azure przy użyciu poświadczeń lokalnych dewelopera. Te opcje znajdują się bardziej szczegółowo w crates.io: Uwierzytelnianie przy użyciu narzędzi programistycznych. |
| Azure | Gdy aplikacja jest hostowana na platformie Azure — aplikacja powinna uwierzytelniać się w zasobach platformy Azure przy użyciu tożsamości zarządzanej. Ta opcja została omówiona bardziej szczegółowo w dokumentacji crates.io : Uwierzytelnianie aplikacji hostowanych na platformie Azure. |
| Na miejscu | Gdy aplikacja jest hostowana i wdrożona lokalnie — aplikacja powinna uwierzytelniać się w zasobach platformy Azure przy użyciu jednostki usługi aplikacji. Ta opcja jest omówiona w dokumentacji crates.io : Uwierzytelnianie jednostek usługi. |
Zalety uwierzytelniania opartego na tokenach
Podczas tworzenia aplikacji dla platformy Azure zdecydowanie zalecamy używanie uwierzytelniania opartego na tokenach zamiast wpisów tajnych, takich jak parametry połączenia lub klucze.
| Uwierzytelnianie oparte na tokenach | Wpisy tajne (parametry połączenia i klucze) |
|---|---|
| Zasada najniższych uprawnień, ustanów określone uprawnienia wymagane przez aplikację w zasobie platformy Azure. | Parametry połączenia lub klucz udzielają pełnych praw do zasobu platformy Azure. |
| Nie ma wpisu tajnego aplikacji do przechowywania. | Należy przechowywać i obracać wpisy tajne w ustawieniach aplikacji lub zmiennej środowiskowej. |
| Biblioteka tożsamości platformy Azure zarządza tokenami za kulisami. Dzięki temu użycie uwierzytelniania opartego na tokenach jest łatwe w użyciu jako parametry połączenia. | Wpisy tajne nie są zarządzane. |
Korzystanie z parametrów połączenia powinno być ograniczone do początkowego sprawdzania koncepcji lub prototypów programistycznych, które nie uzyskują dostępu do danych produkcyjnych ani poufnych. W przeciwnym razie klasy uwierzytelniania oparte na tokenach dostępne w bibliotece tożsamości platformy Azure powinny być zawsze preferowane podczas uwierzytelniania w zasobach platformy Azure.
Uwierzytelnianie podczas programowania lokalnego
Gdy aplikacja jest uruchamiana na stacji roboczej dewelopera podczas programowania lokalnego, środowisko lokalne musi nadal uwierzytelniać się w dowolnych usługach platformy Azure używanych przez aplikację.
Uwierzytelnianie przy użyciu poświadczeń interfejsu wiersza polecenia platformy Azure
Poświadczenia interfejsu wiersza polecenia platformy Azure używają stanu uwierzytelniania interfejsu wiersza polecenia platformy Azure do uwierzytelniania aplikacji Rust. To poświadczenie jest idealne do programowania lokalnego, gdy użytkownik jest już zalogowany przy użyciu polecenia 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(())
}
Uwierzytelnianie przy użyciu poświadczeń interfejsu wiersza polecenia dla deweloperów platformy Azure
Poświadczenie interfejsu wiersza polecenia dewelopera platformy Azure używa stanu uwierzytelniania interfejsu wiersza polecenia dla deweloperów platformy Azure (azd) do uwierzytelniania aplikacji. To poświadczenie jest przydatne podczas pracy z szablonami azd i przepływami pracy.
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(())
}
Uwierzytelnianie w środowiskach serwera
W środowiskach serwera użyj tożsamości zarządzanych do bezpiecznego uwierzytelniania bez hasła. Tożsamości zarządzane są tworzone automatycznie i zarządzane przez platformę Azure, dzięki czemu aplikacja może się uwierzytelniać bez konieczności przechowywania poświadczeń.
W przypadku hostowania w środowisku serwera przypisz unikatową tożsamość aplikacji do każdej aplikacji dla każdego środowiska. Na platformie Azure tożsamość aplikacji jest reprezentowana przez jednostkę usługi, specjalny typ podmiotu zabezpieczeń, który identyfikuje i uwierzytelnia aplikacje na platformie Azure. Typ jednostki usługi używanej dla aplikacji zależy od tego, gdzie działa aplikacja.
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(())
}
Przykładowy kod
Kod przedstawiony w tym artykule jest dostępny w witrynie https://github.com/azure-samples/azure-sdk-for-rust-docs/.
Dodatkowe zasoby
- Skrzynie zestawu Azure SDK na Crates.io — lista dostępnych stawek zestawu Azure SDK
- Wskazówki dotyczące projektowania zestawu Azure SDK — zasady i wzorce projektowania
- Repozytorium GitHub dla zestawu Azure SDK for Rust — problemy i kod źródłowy
- Dokumentacja ładunku — kompletna dokumentacja ładunku