Поделиться через


Проверка подлинности приложений Rust в службах Azure

Приложения Rust должны проходить проверку подлинности в таких службах Azure, как хранилище, Key Vault или Cosmos DB. В этой статье описывается, как использовать уровень удостоверений Azure для безопасной проверки подлинности приложений 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 templates and workflows.

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/

Дополнительные ресурсы