azure-keyvault-certificates-rust
microsoft/skills
Rust에서 Azure Key Vault의 X.509 인증서를 관리하며, 생성, 삭제 및 서명 작업을 포함합니다.
...모든 것을 확장하십시오Azure Key Vault 인증서 Rust용 라이브러리
TLS/SSL, 코드 서명 및 인증을 위한 X.509 인증서를 관리합니다.
다음과 같은 경우에 이 기능을 사용하십시오:
- Rust에서 Key Vault의 X.509 인증서를 생성하거나 관리해야 하는 앱
- 자체 서명 또는 CA 발급 인증서가 필요한 경우
- 인증서 발급을 위한 장기 실행 작업(LRO)이 필요한 경우
- 인증서의 키를 사용하여 데이터를 서명해야 하는 경우
중요: azure-sdk crates.io 사용자가 게시한 공식
azure_security_keyvault_certificates크레이트만 사용하십시오. 비공식 또는 커뮤니티 크레이트를 사용하지 마십시오. 공식 크레이트는 이름에 밑줄을 사용하며, 버전 0.21.0인 크레이트는 없습니다.
설치
cargo add azure_security_keyvault_certificates azure_identity tokio futures
코드에서
azure_core형식을 직접 사용하는 경우Cargo.toml에azure_core를 추가하십시오.azure_security_keyvault_certificates의 재내보내기만 사용하는 경우azure_core에 대한 직접적인 종속성은 선택 사항입니다.
환경 변수
AZURE_KEYVAULT_URL=https://<보관소-이름>.vault.azure.net/ # 모든 작업에 필요
</보관소-이름>인증
use azure_identity::DeveloperToolsCredential;
use azure_security_keyvault_certificates::CertificateClient;
#[tokio::main]
async fn main() -> Result> {
// 로컬 개발: DeveloperToolsCredential. 프로덕션: ManagedIdentityCredential 사용.
let credential = DeveloperToolsCredential::new(None)?;
let client = CertificateClient::new(
"https://<보관소-이름>.vault.azure.net/",
credential.clone(),
None,
)?;
let cert = client
.get_certificate("인증서-이름", None)
.await?
.into_model()?;
println!("인증서: {:?}", cert.id);
Ok(())
}
</보관소-이름>핵심 워크플로우
자체 서명 인증서 생성(LRO)
인증서 생성은 장기 실행 작업입니다. Poller<t></t>는 IntoFuture를 구현하므로 .await만 수행하면 됩니다:
use azure_security_keyvault_certificates::{
models::{
CertificatePolicy, CreateCertificateParameters, IssuerParameters,
X509CertificateProperties,
},
ResourceExt,
};
let policy = CertificatePolicy {
x509_certificate_properties: Some(X509CertificateProperties {
subject: Some("CN=example.com".into()),
..Default::default()
}),
issuer_parameters: Some(IssuerParameters {
name: Some("Self".into()),
..Default::default()
}),
..Default::default()
};
let body = CreateCertificateParameters {
certificate_policy: Some(policy),
..Default::default()
};
// Poller는 IntoFuture를 구현하므로 완료까지 직접 .await 수행
let cert = client
.begin_create_certificate("인증서-이름", body.try_into()?, None)?
.await?
.into_model()?;
println!(
"이름: {:?}, 버전: {:?}",
cert.resource_id()?.name,
cert.resource_id()?.version,
);
인증서 속성 업데이트
use azure_security_keyvault_certificates::models::UpdateCertificatePropertiesParameters;
use std::collections::HashMap;
#[allow(clippy::needless_update)]
let params = UpdateCertificatePropertiesParameters {
tags: Some(HashMap::from_iter(vec![("env".into(), "prod".into())])),
..Default::default()
};
client
.update_certificate_properties("인증서-이름", params.try_into()?, None)
.await?
.into_model()?;
인증서 삭제
client.delete_certificate("인증서-이름", None).await?;
인증서 나열(페이지 처리)
list_certificate_properties는 Pager<t></t>를 반환하므로 항목을 직접 반복합니다:
use azure_security_keyvault_certificates::ResourceExt;
use futures::TryStreamExt as _;
let mut pager = client.list_certificate_properties(None)?;
while let Some(cert) = pager.try_next().await? {
println!("찾음: {}", cert.resource_id()?.name);
}
인증서 키로 서명
Key Vault의 인증서에는 관련 키가 있습니다. 암호화 작업을 위해 Key Vault Keys SDK를 사용하십시오:
use azure_security_keyvault_keys::{
models::{KeyClientSignOptions, SignParameters, SignatureAlgorithm},
KeyClient,
};
let key_client = KeyClient::new(
"https://<보관소-이름>.vault.azure.net/",
credential.clone(),
None,
)?;
// 인증서의 EC 키로 서명
let digest = vec![0u8; 32]; // SHA-256 다이제스트
let body = SignParameters {
algorithm: Some(SignatureAlgorithm::Es256),
value: Some(digest),
};
let result = key_client
.sign(
"인증서-이름",
body.try_into()?,
Some(KeyClientSignOptions {
key_version: Some("<인증서-버전>".to_string()),
..Default::default()
}),
)
.await?
.into_model()?;
println!("서명: {:?}", result.result);
</인증서-버전></보관소-이름>인증서 형식
| 형식 | 콘텐츠 형식 | 사용 사례 |
|---|---|---|
| PKCS#12 | `application/x-pkcs12` | 인증서 + 개인 키 번들 |
| PEM | `application/x-pem-file` | Base64 인코딩, Linux/웹에서 일반적 |
RBAC 역할
Entra ID 인증의 경우 다음 역할 중 하나를 할당하십시오:
| 역할 | 접근 권한 |
|---|---|
| `Key Vault 인증서 사용자` | 인증서 사용 |
| `Key Vault 인증서 담당자` | 전체 인증서 관리 |
모범 사례
cargo add를 사용하여 종속성을 관리하고Cargo.toml을 직접 편집하지 마십시오. 수동 매니페스트 편집 대신 cargo 명령을 사용하여 Rust SDK 종속성을 추가하고 제거하십시오.azure_core형식을 직접 가져올 때만azure_core를 추가하십시오. 코드에서azure_core::http::Url,azure_core::http::RequestContent또는azure_core::error::ErrorKind를 가져오는 경우azure_core를 포함하십시오. 그렇지 않으면 직접적인 종속성은 선택 사항입니다.- 로컬 개발에는
DeveloperToolsCredential을, 프로덕션에는ManagedIdentityCredential을 사용하십시오. Rust는 단일DefaultAzureCredential형식을 제공하지 않습니다. - 자격 증명을 하드코딩하지 마십시오. 환경 변수 또는 관리된 신원을 사용하십시오.
- 모델 구조체 업데이트에는
..Default::default()와#[allow(clippy::needless_update)]를 사용하십시오. - ID에서 인증서 이름/버전을 추출하려면
ResourceExt를 사용하십시오. - LRO —
begin_create_certificate는Poller를 반환합니다. 완료까지.await만 수행하면 됩니다(클라이언트는 상태 확인을 위해 거의 폴링하지 않아야 함). - 클라이언트 재사용 —
CertificateClient는 스레드 안전합니다. 한 번 생성하고 작업 간에 공유하십시오.
참조 링크
| 리소스 | 링크 |
|---|---|
| API 참조 | https://docs.rs/azure\_security\_keyvault\_certificates/latest/azure\_security\_keyvault\_certificates |
| crates.io | https://crates.io/crates/azure\_security\_keyvault\_certificates |
| 소스 코드 | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/keyvault/azure\_security\_keyvault\_certificates |
---
name: azure-keyvault-certificates-rust
description: Manage X.509 certificates in Azure Key Vault from Rust, including creation, deletion, and signing operations.
license: MIT
---
# Azure Key Vault Certificates library for Rust
Manage X.509 certificates for TLS/SSL, code signing, and authentication.
Use this skill when:
- An app needs to create or manage X.509 certificates in Key Vault from Rust
- You need self-signed or CA-issued certificates
- You need long-running operations (LRO) for certificate issuance
- You need to sign data using a certificate's key
> **IMPORTANT:** Only use the official `azure_security_keyvault_certificates` crate published by the [azure-sdk](https://crates.io/users/azure-sdk) crates.io user. Do NOT use unofficial or community crates. Official crates use underscores in names and none have version 0.21.0.
## Installation
```sh
cargo add azure_security_keyvault_certificates azure_identity tokio futures
```
> If your code uses `azure_core` types directly, add `azure_core` to `Cargo.toml`. If you only use `azure_security_keyvault_certificates` re-exports, direct `azure_core` dependency is optional.
## Environment Variables
```bash
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/ # Required for all operations
```
## Authentication
```rust
use azure_identity::DeveloperToolsCredential;
use azure_security_keyvault_certificates::CertificateClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Local dev: DeveloperToolsCredential. Production: use ManagedIdentityCredential.
let credential = DeveloperToolsCredential::new(None)?;
let client = CertificateClient::new(
"https://<vault-name>.vault.azure.net/",
credential.clone(),
None,
)?;
let cert = client
.get_certificate("cert-name", None)
.await?
.into_model()?;
println!("Certificate: {:?}", cert.id);
Ok(())
}
```
## Core Workflow
### Create Self-Signed Certificate (LRO)
Creating a certificate is a long-running operation. `Poller<T>` implements `IntoFuture` — just `.await`:
```rust
use azure_security_keyvault_certificates::{
models::{
CertificatePolicy, CreateCertificateParameters, IssuerParameters,
X509CertificateProperties,
},
ResourceExt,
};
let policy = CertificatePolicy {
x509_certificate_properties: Some(X509CertificateProperties {
subject: Some("CN=example.com".into()),
..Default::default()
}),
issuer_parameters: Some(IssuerParameters {
name: Some("Self".into()),
..Default::default()
}),
..Default::default()
};
let body = CreateCertificateParameters {
certificate_policy: Some(policy),
..Default::default()
};
// Poller implements IntoFuture — await directly for completion
let cert = client
.begin_create_certificate("cert-name", body.try_into()?, None)?
.await?
.into_model()?;
println!(
"Name: {:?}, Version: {:?}",
cert.resource_id()?.name,
cert.resource_id()?.version,
);
```
### Update Certificate Properties
```rust
use azure_security_keyvault_certificates::models::UpdateCertificatePropertiesParameters;
use std::collections::HashMap;
#[allow(clippy::needless_update)]
let params = UpdateCertificatePropertiesParameters {
tags: Some(HashMap::from_iter(vec![("env".into(), "prod".into())])),
..Default::default()
};
client
.update_certificate_properties("cert-name", params.try_into()?, None)
.await?
.into_model()?;
```
### Delete Certificate
```rust
client.delete_certificate("cert-name", None).await?;
```
### List Certificates (Pagination)
`list_certificate_properties` returns a `Pager<T>` — iterate items directly:
```rust
use azure_security_keyvault_certificates::ResourceExt;
use futures::TryStreamExt as _;
let mut pager = client.list_certificate_properties(None)?;
while let Some(cert) = pager.try_next().await? {
println!("Found: {}", cert.resource_id()?.name);
}
```
## Signing with a Certificate's Key
Certificates in Key Vault have an associated key. Use the Key Vault Keys SDK for crypto operations:
```rust
use azure_security_keyvault_keys::{
models::{KeyClientSignOptions, SignParameters, SignatureAlgorithm},
KeyClient,
};
let key_client = KeyClient::new(
"https://<vault-name>.vault.azure.net/",
credential.clone(),
None,
)?;
// Sign with the certificate's EC key
let digest = vec![0u8; 32]; // SHA-256 digest
let body = SignParameters {
algorithm: Some(SignatureAlgorithm::Es256),
value: Some(digest),
};
let result = key_client
.sign(
"cert-name",
body.try_into()?,
Some(KeyClientSignOptions {
key_version: Some("<certificate-version>".to_string()),
..Default::default()
}),
)
.await?
.into_model()?;
println!("Signature: {:?}", result.result);
```
## Certificate Formats
| Format | Content Type | Use Case |
| ------- | ------------------------ | ----------------------------------- |
| PKCS#12 | `application/x-pkcs12` | Bundled cert + private key |
| PEM | `application/x-pem-file` | Base64-encoded, common in Linux/web |
## RBAC Roles
For Entra ID auth, assign one of these roles:
| Role | Access |
| -------------------------------- | --------------------------- |
| `Key Vault Certificate User` | Use certificates |
| `Key Vault Certificates Officer` | Full certificate management |
## Best Practices
1. **Use `cargo add` to manage dependencies, never edit `Cargo.toml` directly.** Add and remove Rust SDK dependencies with cargo commands instead of manual manifest edits.
2. **Add `azure_core` only when importing `azure_core` types directly.** If your code imports `azure_core::http::Url`, `azure_core::http::RequestContent`, or `azure_core::error::ErrorKind`, include `azure_core`; otherwise a direct dependency is optional.
3. **Use `DeveloperToolsCredential`** for local dev, **`ManagedIdentityCredential`** for production — Rust does not provide a single `DefaultAzureCredential` type
4. **Never hardcode credentials** — use environment variables or managed identity
5. **Use `..Default::default()`** with `#[allow(clippy::needless_update)]` for model struct updates
6. **Use `ResourceExt`** to extract certificate name/version from IDs
7. **LROs** — `begin_create_certificate` returns a `Poller`; just `.await` for completion (clients should rarely poll for status)
8. **Reuse clients** — `CertificateClient` is thread-safe; create once, share across tasks
## Reference Links
| Resource | Link |
| ------------- | ------------------------------------------------------------------------------------------------------- |
| API Reference | https://docs.rs/azure_security_keyvault_certificates/latest/azure_security_keyvault_certificates |
| crates.io | https://crates.io/crates/azure_security_keyvault_certificates |
| Source Code | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/keyvault/azure_security_keyvault_certificates |
모든 파일
1개 파일azure-keyvault-certificates-rust 설치
스킬 파일을 다운로드하여 .claude/skills/ 디렉토리에 추출하세요.
ZIP 다운로드저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-rust/skills/azure-keyvault-certificates-rust # Copy SKILL.md to your .claude/skills/ directory
복사





집
