옵션
집 Skill DevOps 및 CI/CD azure-keyvault-certificates-rust

azure-keyvault-certificates-rust

microsoft/skills microsoft/skills

Rust에서 Azure Key Vault의 X.509 인증서를 관리하며, 생성, 삭제 및 서명 작업을 포함합니다.

...모든 것을 확장하십시오
0
업데이트 된 시간 2026년 9월 16일

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.tomlazure_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_propertiesPager<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 인증서 담당자`전체 인증서 관리

모범 사례

  1. cargo add를 사용하여 종속성을 관리하고 Cargo.toml을 직접 편집하지 마십시오. 수동 매니페스트 편집 대신 cargo 명령을 사용하여 Rust SDK 종속성을 추가하고 제거하십시오.
  2. azure_core 형식을 직접 가져올 때만 azure_core를 추가하십시오. 코드에서 azure_core::http::Url, azure_core::http::RequestContent 또는 azure_core::error::ErrorKind를 가져오는 경우 azure_core를 포함하십시오. 그렇지 않으면 직접적인 종속성은 선택 사항입니다.
  3. 로컬 개발에는 DeveloperToolsCredential을, 프로덕션에는 ManagedIdentityCredential을 사용하십시오. Rust는 단일 DefaultAzureCredential 형식을 제공하지 않습니다.
  4. 자격 증명을 하드코딩하지 마십시오. 환경 변수 또는 관리된 신원을 사용하십시오.
  5. 모델 구조체 업데이트에는 ..Default::default()#[allow(clippy::needless_update)]를 사용하십시오.
  6. ID에서 인증서 이름/버전을 추출하려면 ResourceExt를 사용하십시오.
  7. LRObegin_create_certificatePoller를 반환합니다. 완료까지 .await만 수행하면 됩니다(클라이언트는 상태 확인을 위해 거의 폴링하지 않아야 함).
  8. 클라이언트 재사용CertificateClient는 스레드 안전합니다. 한 번 생성하고 작업 간에 공유하십시오.

참조 링크

리소스링크
API 참조https://docs.rs/azure\_security\_keyvault\_certificates/latest/azure\_security\_keyvault\_certificates
crates.iohttps://crates.io/crates/azure\_security\_keyvault\_certificates
소스 코드https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/keyvault/azure\_security\_keyvault\_certificates
GitHub에서 보기
---
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

복사 복사
빠른 설정: 스킬 폴더를 .claude/skills/에 복사하세요. Claude가 자동으로 감지하고 사용합니다.
저장소 microsoft/skills

관련 스킬

base44-cli
업데이트 된 시간 2026년 6월 29일
klingai-upgrade-migration
업데이트 된 시간 2026년 7월 3일
Railway CLI Management
업데이트 된 시간 2026년 7월 2일
Verification &amp; Quality Assurance
업데이트 된 시간 2026년 6월 29일
OR