К основному содержанию
скилл

azure-keyvault-certificates-rust — скилл для Claude Code: X.509 в Rust

Помогает писать на Rust код для X.509-сертификатов в Azure Key Vault: создание, обновление, удаление, подпись. Пригодится, когда агенту нужно выдать самоподписанный сертификат или разобраться с LRO.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add microsoft/skills --skill azure-keyvault-certificates-rust -a claude-code
Открыть на GitHub

Что делает azure-keyvault-certificates-rust

Скилл описывает работу с крейтом azure_security_keyvault_certificates — официальным пакетом от пользователя azure-sdk на crates.io. Внутри примеры кода: создание самоподписанного сертификата через begin_create_certificate, обновление свойств, удаление, постраничный список через Pager<T>. Есть отдельный раздел про подпись данных ключом сертификата — для этого нужен уже azure_security_keyvault_keys и KeyClient.

Аутентификация устроена иначе, чем в других языках: типа DefaultAzureCredential в Rust-крейте идентичности нет. Для локальной разработки берут DeveloperToolsCredential, в продакшене — ManagedIdentityCredential. Адрес хранилища задаётся переменной AZURE_KEYVAULT_URL вида https://<vault-name>.vault.azure.net/, она нужна для всех операций. Для доступа по Entra ID понадобится роль Key Vault Certificate User или Key Vault Certificates Officer.

Зависимости ставят через cargo add, а не правкой Cargo.toml вручную. Прямая зависимость от azure_core нужна только если вы импортируете его типы сами. Создание сертификата — длительная операция: begin_create_certificate возвращает Poller, который реализует IntoFuture, поэтому достаточно .await.

Какие задачи решает

  • выпустить самоподписанный сертификат в Key Vault из Rust-кода
  • получить сертификат, подписанный удостоверяющим центром
  • дождаться завершения длительной операции выпуска
  • подписать данные ключом, привязанным к сертификату
  • перебрать все сертификаты хранилища постранично

Примеры запросов агенту

  • Напиши на Rust создание самоподписанного сертификата CN=example.com в Key Vault через begin_create_certificate
  • Как в этом крейте получить список сертификатов постранично?
  • Подпиши SHA-256 дайджест ключом сертификата cert-name алгоритмом ES256

Как установить azure-keyvault-certificates-rust

1Через Skills CLI (Vercel)

npx skills add microsoft/skills --skill azure-keyvault-certificates-rust -a claude-code

2Вручную: положить файлы

~/.claude/skills/azure-keyvault-certificates-rust/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/azure-keyvault-certificates-rust/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о azure-keyvault-certificates-rust

Как установить azure-keyvault-certificates-rust в Claude Code?

Выполните npx skills add microsoft/skills --skill azure-keyvault-certificates-rust -a claude-code. После этого файл скилла лежит в ~/.claude/skills/azure-keyvault-certificates-rust/SKILL.md.

Что делает azure-keyvault-certificates-rust?

Даёт агенту примеры и правила для работы с X.509-сертификатами Azure Key Vault на Rust: создание, обновление свойств, удаление, список и подпись ключом сертификата.

Почему в примерах нет DefaultAzureCredential?

Rust-крейт идентичности такого типа не предоставляет. Для локальной разработки используется DeveloperToolsCredential, для продакшена — ManagedIdentityCredential.

Исходный текст

SKILL.md · MIT
---
name: azure-keyvault-certificates-rust
description: |
  Azure Key Vault Certificates library for Rust. Create, manage, and use X.509 certificates including self-signed and CA-issued.
  Triggers: "keyvault certificates rust", "CertificateClient rust", "create certificate rust", "self-signed certificate rust", "X.509 rust".
license: MIT
metadata:
  author: Microsoft
  package: azure_security_keyvault_certificates
---

# 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 Azure SDK code must not use `DefaultAzureCredential`. The Rust identity crate does not provide that type.

```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(())
}
```

Prefer the crate README/examples when checking LRO and poller usage rather than inferring public behavior from generated internal types.

## 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
9. **Run `cargo clippy -- -D warnings`** when the prompt, eval, or CI expects lint-clean output

## 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 |

© Microsoft · MIT · microsoft/skills

Похожие скиллы

Все скиллы по теме «Облака: AWS, Azure, GCP» →
caveman-manage JuliusBrussee Проверяет состояние и результаты экспериментов Caveman Cloud, предлагает одно действие или блокирует рискованный запрос. Нужен перед запуском, одобрением, отменой или откатом. CX Codex +1 104 200установок workers-best-practices cloudflare Скилл настраивает ИИ на проверку продакшен-кода Cloudflare Workers по актуальным правилам рантайма, типам Wrangler и антипаттернам. CX Codex +1 126 100установок cloudflare-email-service cloudflare Скилл для работы с Cloudflare Email Sending и Email Routing: помогает настроить отправку и приём писем в Workers. CX Codex +1 102 300установок firebase-basics официальный google Скилл настраивает Firebase CLI, помогает войти в аккаунт, создать или выбрать проект и скачать конфигурацию Android или iOS. CX Codex 14 100установок cloudflare-one cloudflare Помогает агенту проектировать, настраивать и разбирать развёртывания Cloudflare One Zero Trust и SASE. Пригодится, когда нужно спланировать Access, Gateway или туннели без похода в документацию вручную. CX Codex +1 93 100установок cloudflare-one-migrations cloudflare Помогает спланировать переход с VPN, SWG или SASE на Cloudflare One: сопоставляет политики, находит пробелы и расписывает порядок выката. CX Codex +1 89 500установок

Из того же набора143

Весь набор →
wiki-llms-txt Создаёт файлы llms.txt и llms-full.txt по спецификации llmstxt.org, превращая проектную документацию и вики в сжатый контекст для языковых моделей. 5установок wiki-changelog Собирает историю Git в структурированный changelog по типам изменений. Пригодится, когда нужно разобрать свежие коммиты или объяснить, что поменялось в репозитории. 5установок frontend-ui-dark-ts Скилл для сборки тёмных React-интерфейсов на Tailwind CSS: тема, glassmorphism, анимации Framer Motion. Пригодится для дашбордов и админок. 5установок azure-storage-blob-rust Подсказывает агенту, как работать с Azure Blob Storage из Rust: загрузка и скачивание блобов, контейнеры, аутентификация через RBAC. 5установок azure-identity-rust Скилл подсказывает агенту, как подключить Microsoft Entra ID к Rust-приложению: какой credential взять для локальной разработки, а какой для продакшена. 5установок azure-cosmos-rust Подсказывает агенту, как работать с Azure Cosmos DB NoSQL API из Rust: CRUD документов, контейнеры, ключи разделов и аутентификация. 5установок pydantic-models-py Скилл задаёт структуру моделей Pydantic v2 по шаблону из пяти вариантов: Base, Create, Update, Response и InDB. Пригодится, когда нужны схемы запросов и ответов API. 5установок azure-validate Прогоняет конфигурацию, инфраструктуру, RBAC и разрешения managed identity до того, как вы что-то выкатите в Azure. Полезен, когда деплой падает на правах или на неверном azure.yaml. 4установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой