mcpField
A
azure-keyvault-py

azure-keyvault-py

github.com/sickn33セキュリティ48.7k56 回インストール今日更新
リポジトリ

azure-keyvault-py について

Azure Key Vault でシークレット、暗号鍵、証明書を管理する Python スキルです。同期・非同期クライアント、暗号操作に加え、認証や復旧に関する注意点も扱います。

主な機能

  1. 01シークレットの保存と取得
  2. 02暗号鍵の作成と管理
  3. 03暗号化、復号、署名、検証
  4. 04証明書の管理
  5. 05同期・非同期クライアントの利用

活用シーン

  1. 01保管庫からアプリのシークレットを取得
  2. 02管理対象の鍵で暗号操作を実行
  3. 03証明書を作成して確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-keyvault-py

インストール後、Claude Code で/azure-keyvault-pyを入力して読み込まれたか確認します。

詳細

Python 用 Azure Key Vault SDK

シークレット、暗号化キー、証明書を安全に保存および管理できます。

インストール

# Secrets
pip install azure-keyvault-secrets azure-identity

# Keys (cryptographic operations)
pip install azure-keyvault-keys azure-identity

# Certificates
pip install azure-keyvault-certificates azure-identity

# All
pip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity

環境変数

AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/

変更および復旧の境界

書き込み、削除、またはパージを行う前に、対象のコンテナー/オブジェクト/バージョンと、承認された操作を正確に確認してください。独立したスニペットでは同じクライアント名を再利用しています。復旧とパージは代替手段であり、順番に実行するクリーンアップ手順ではありません。パージは取り消せない場合があり、パージ保護の対象となることがあります。証明書のシークレットをエクスポートすると、秘密鍵が漏えいするおそれがあります。最小権限を適用し、出力を保護し、依存関係と復旧計画を検証してください。

シークレット

SecretClient のセットアップ
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

client = SecretClient(vault_url=vault_url, credential=credential)
シークレットの操作
# Set secret
secret = client.set_secret("database-password", "super-secret-value")
print(f"Created: {secret.name}, version: {secret.properties.version}")

# Get secret
secret = client.get_secret("database-password")
print(f"Retrieved secret: {secret.name}")  # Never print secret values.

# Get specific version
secret = client.get_secret("database-password", version="abc123")

# List secrets (names only, not values)
for secret_properties in client.list_properties_of_secrets():
    print(f"Secret: {secret_properties.name}")

# List versions
for version in client.list_properties_of_secret_versions("database-password"):
    print(f"Version: {version.version}, Created: {version.created_on}")

# Delete secret (soft delete)
poller = client.begin_delete_secret("database-password")
deleted_secret = poller.result()

# Purge (permanent delete, if soft-delete enabled)
client.purge_deleted_secret("database-password")

# Recover deleted secret
client.begin_recover_deleted_secret("database-password").result()

キー

KeyClient のセットアップ
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient

credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

client = KeyClient(vault_url=vault_url, credential=credential)
キーの操作
from azure.keyvault.keys import KeyType

# Create RSA key
rsa_key = client.create_rsa_key("rsa-key", size=2048)

# Create EC key
ec_key = client.create_ec_key("ec-key", curve="P-256")

# Get key
key = client.get_key("rsa-key")
print(f"Key type: {key.key_type}")

# List keys
for key_properties in client.list_properties_of_keys():
    print(f"Key: {key_properties.name}")

# Delete key
poller = client.begin_delete_key("rsa-key")
deleted_key = poller.result()
暗号化操作
from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm

# Get crypto client for a specific key
crypto_client = CryptographyClient(key, credential=credential)
# Or from key ID
crypto_client = CryptographyClient(
    "https://<vault>.vault.azure.net/keys/<key-name>/<version>",
    credential=credential
)

# Encrypt
plaintext = b"Hello, Key Vault!"
result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)
ciphertext = result.ciphertext

# Decrypt
result = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)
decrypted = result.plaintext

# Sign
from azure.keyvault.keys.crypto import SignatureAlgorithm
import hashlib

digest = hashlib.sha256(b"data to sign").digest()
result = crypto_client.sign(SignatureAlgorithm.rs256, digest)
signature = result.signature

# Verify
result = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)
print(f"Valid: {result.is_valid}")

証明書

CertificateClient のセットアップ
from azure.identity import DefaultAzureCredential
from azure.keyvault.certificates import CertificateClient, CertificatePolicy

credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"

client = CertificateClient(vault_url=vault_url, credential=credential)
証明書の操作
# Create self-signed certificate
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate("my-cert", policy=policy)
certificate = poller.result()

# Get certificate
certificate = client.get_certificate("my-cert")
print(f"Thumbprint: {certificate.properties.x509_thumbprint.hex()}")

# Get certificate with private key (as secret)
from azure.keyvault.secrets import SecretClient
secret_client = SecretClient(vault_url=vault_url, credential=credential)
cert_secret = secret_client.get_secret("my-cert")
# cert_secret.value contains PEM or PKCS12

# List certificates
for cert in client.list_properties_of_certificates():
    print(f"Certificate: {cert.name}")

# Delete certificate
poller = client.begin_delete_certificate("my-cert")
deleted = poller.result()

クライアントの種類の表

クライアントパッケージ用途
SecretClientazure-keyvault-secretsシークレットの保存/取得
KeyClientazure-keyvault-keys暗号化キーの管理
CryptographyClientazure-keyvault-keys暗号化/復号/署名/検証
CertificateClientazure-keyvault-certificates証明書の管理

非同期クライアント

from azure.identity.aio import DefaultAzureCredential
from azure.keyvault.secrets.aio import SecretClient

async def get_secret():
    credential = DefaultAzureCredential()
    client = SecretClient(vault_url=vault_url, credential=credential)
    
    async with client:
        secret = await client.get_secret("my-secret")
        # Consume the value only in the authorized application; do not print it.

import asyncio
asyncio.run(get_secret())

エラー処理

from azure.core.exceptions import ResourceNotFoundError, HttpResponseError

try:
    secret = client.get_secret("nonexistent")
except ResourceNotFoundError:
    print("Secret not found")
except HttpResponseError as e:
    if e.status_code == 403:
        print("Access denied - check RBAC permissions")
    raise

ベストプラクティス

  1. 認証には DefaultAzureCredential を使用します
  2. Azure でホストされるアプリケーションでは マネージド ID を使用します
  3. 復旧に備えて 論理削除を有効にします(デフォルトで有効)
  4. きめ細かな制御には、アクセス ポリシーより RBAC を使用します
  5. バージョン管理を使用して シークレットを定期的にローテーションします
  6. App Service/Functions の構成では Key Vault 参照を使用します
  7. API 呼び出しを減らすため、シークレットを適切にキャッシュします
  8. 高スループットのシナリオでは 非同期クライアントを使用します

使用する場合

このスキルは、概要に記載されたワークフローまたは操作を実行する場合に適用できます。

制限事項

  • このスキルは、タスクが上記の説明の対象範囲に明確に合致する場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。

コメント