Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения Rust должны проходить проверку подлинности в таких службах Azure, как хранилище, Key Vault или Cosmos DB. В этой статье описывается, как использовать модуль аутентификации Azure Identity для безопасной проверки подлинности приложений на Rust в локальных средах разработки и на серверах, повышая безопасность и упрощая управление учетными данными.
Рекомендуемая аутентификация на основе токенов
Рекомендуемый подход заключается в том, чтобы приложения использовали проверку подлинности на основе маркеров, а не строки подключения или ключи при проверке подлинности в ресурсах Azure. Доступ к библиотеке azure_identity предоставляет проверку подлинности на основе токенов и позволяет приложениям беспрепятственно интегрироваться в ресурсы Azure, будь то локальная разработка, развертывание в Azure или развертывание на локальном сервере.
Конкретный тип проверки подлинности на основе токенов, который приложение должно использовать для проверки подлинности в ресурсах Azure, зависит от того, где работает приложение.
| Окружающая среда | Authentication |
|---|---|
| Локальная среда | Когда разработчик запускает приложение во время локальной разработки. Приложение может пройти проверку подлинности в Azure с помощью локальных учетных данных разработчика. Эти параметры содержатся более подробно в crates.io: проверка подлинности с помощью средств разработки. |
| Azure | Если приложение размещено в Azure. Приложение должно пройти проверку подлинности в ресурсах Azure с помощью управляемого удостоверения. Этот параметр подробно рассматривается в документации по crates.io : проверка подлинности размещенных в Azure приложений. |
| Локальная установка | Когда приложение размещено и развернуто локально, оно должно проходить проверку подлинности для ресурсов Azure с помощью служебного принципала приложения. Этот параметр рассматривается в документации crates.io: аутентификация сервисных принципалов. |
Преимущества проверки подлинности на основе токенов
При создании приложений для Azure настоятельно рекомендуется использовать проверку подлинности на основе маркеров вместо секретов, таких как строки подключения или ключи.
| Проверка подлинности на основе токенов | Секреты (строки подключения и ключи) |
|---|---|
| Принцип наименьшей привилегии устанавливает определенные разрешения, необходимые приложению в ресурсе Azure. | Строка подключения или ключ предоставляют полные права ресурсу Azure. |
| Нет секрета приложения для хранения. | Необходимо хранить и обновлять секреты в параметрах приложения или переменной среды. |
| Библиотека удостоверений Azure управляет токенами в фоновом режиме. Это делает использование аутентификации на основе токенов таким же простым, как использование строки подключения. | Секретами не управляют. |
Использование строк подключения должно быть ограничено первоначальной проверкой концепции или прототипами разработки приложений, которые не обращаются к производственным или конфиденциальным данным. В противном случае классы проверки подлинности на основе маркеров, доступные в библиотеке удостоверений Azure, всегда должны быть предпочтительнее при проверке подлинности в ресурсах Azure.
Проверка подлинности во время локальной разработки
При запуске приложения на рабочей станции разработчика во время локальной разработки локальная среда по-прежнему должна пройти проверку подлинности в любых службах Azure, используемых приложением.
Проверка подлинности с помощью учетных данных Azure CLI
Учетные данные Azure CLI используют состояние аутентификации Azure CLI для аутентификации вашего приложения на Rust. Эти учетные данные идеально подходят для локальной разработки, когда вы уже работаете с 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(())
}
Проверка подлинности с помощью учетных данных Azure Developer CLI
Учетные данные Интерфейса командной строки разработчика Azure используют состояние проверки подлинности интерфейса командной строки разработчика Azure (azd) для проверки подлинности приложения. Эти учетные данные полезны при работе с шаблонами и рабочими процессами 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(())
}
Аутентификация в серверных средах
В средах сервера используйте управляемые удостоверения для безопасной проверки подлинности без пароля. Управляемые удостоверения автоматически создаются и управляются Azure, поэтому приложение может проходить проверку подлинности без необходимости хранить учетные данные.
При размещении в серверной среде назначьте уникальное удостоверение приложения каждому приложению для каждой среды. В Azure удостоверение приложения представлено сервисным принципалом, специальным типом субъекта безопасности, который идентифицирует и аутентифицирует приложения в Azure. Тип субъекта-службы, используемого для приложения, зависит от того, где выполняется ваше приложение.
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(())
}
Пример кода
Код, показанный в этой статье, доступен на https://github.com/azure-samples/azure-sdk-for-rust-docs/.
Дополнительные ресурсы
- Пакеты Azure SDK на Crates.io — список доступных пакетов Azure SDK
- Рекомендации по проектированию пакета SDK Для Azure. Принципы разработки и шаблоны
- Репозиторий Azure SDK для Rust GitHub — проблемы и исходный код
- Документация по грузоперевозки — полный справочник по грузоперевозку