Rust 애플리케이션은 Storage, Key Vault 또는 Cosmos DB와 같은 Azure 서비스에 인증해야 합니다. 이 문서에서는 Azure ID 상자를 사용하여 로컬 개발 및 서버 환경에서 Rust 앱을 안전하게 인증하고 보안을 개선하고 자격 증명 관리를 간소화하는 방법을 설명합니다.
권장되는 토큰 기반 인증
Azure 리소스에 인증할 때 앱에서 연결 문자열 또는 키 대신 토큰 기반 인증을 사용하도록 하는 것이 좋습니다. azure_identity 상자는 토큰 기반 인증을 제공하며 앱이 로컬 개발 중이든, Azure에 배포되거나, 온-프레미스 서버에 배포되는지 여부에 관계없이 Azure 리소스에 원활하게 인증할 수 있도록 합니다.
앱이 Azure 리소스에 인증하는 데 사용해야 하는 특정 유형의 토큰 기반 인증은 앱이 실행되는 위치에 따라 달라집니다.
| 환경 | Authentication |
|---|---|
| 현지 | 개발자가 로컬 개발 중에 앱을 실행하는 경우 - 앱은 개발자의 로컬 자격 증명을 사용하여 Azure에 인증할 수 있습니다. 이러한 옵션은 crates.io: 개발 도구로 인증에 대해 자세히 설명합니다. |
| Azure | 앱이 Azure에서 호스트되는 경우 - 앱은 관리 ID를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은 crates.io 설명서에서 자세히 설명 합니다. Azure 호스팅 애플리케이션 인증. |
| 온-프레미스 | 앱이 온-프레미스에서 호스트되고 배포되는 경우 - 앱은 애플리케이션 서비스 주체를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은 crates.io 설명서에서 설명 합니다. 서비스 주체 인증. |
토큰 기반 인증의 장점
Azure용 앱을 빌드할 때 연결 문자열 또는 키와 같은 비밀 대신 토큰 기반 인증을 사용하는 것이 좋습니다.
| 토큰 기반 인증 | 비밀(연결 문자열 및 키) |
|---|---|
| 최소 권한 원칙은 Azure 리소스에서 앱에 필요한 특정 권한을 설정합니다. | 연결 문자열 또는 키는 Azure 리소스에 대한 모든 권한을 부여합니다. |
| 저장할 애플리케이션 비밀이 없습니다. | 앱 설정 또는 환경 변수에 비밀을 저장하고 회전해야 합니다. |
| Azure ID 라이브러리는 백그라운드에서 토큰을 관리합니다. 이렇게 하면 토큰 기반 인증을 연결 문자열로 사용하기 쉽습니다. | 비밀은 관리되지 않습니다. |
연결 문자열의 사용은 프로덕션 또는 중요한 데이터에 액세스하지 않는 초기 개념 증명 앱 또는 개발 프로토타입으로 제한되어야 합니다. 그렇지 않으면 Azure 리소스에 인증할 때 Azure ID 라이브러리에서 사용할 수 있는 토큰 기반 인증 클래스를 항상 선호해야 합니다.
로컬 개발 중 인증
로컬 개발 중에 개발자의 워크스테이션에서 애플리케이션을 실행하는 경우 로컬 환경은 여전히 앱에서 사용하는 모든 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 개발자 CLI 자격 증명으로 인증
Azure 개발자 CLI 자격 증명은 Azure Developer CLI(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(())
}
서버 환경에서 인증
서버 환경에서는 보안 암호 없는 인증을 위해 관리 ID 를 사용합니다. 관리 ID 는 Azure에서 자동으로 만들어지고 관리되므로 애플리케이션은 자격 증명을 저장하지 않고도 인증할 수 있습니다.
서버 환경에서 호스팅하는 경우 각 환경에 대해 각 애플리케이션에 고유한 애플리케이션 ID를 할당합니다. Azure에서 앱 ID는 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/사용할 수 있습니다.
추가 리소스
- Crates.io Azure SDK 상자 - 사용 가능한 Azure SDK 상자 목록
- Azure SDK 디자인 지침 - 디자인 원칙 및 패턴
- Rust GitHub 리포지토리용 Azure SDK - 문제 및 소스 코드
- 화물 설명서 - 전체 화물 참조