Vérifiez! Comment utiliser Azure Key Vault avec Azure SDK pour Python! (Mesures autour de la certification)

Bonsoir! @dz_ Je suis Kazumi Ohira.

Prologue-Introduction

Lorsque j'ai essayé d'utiliser Azure Key Vault à l'aide du SDK Azure pour Python, j'ai eu du mal avec l'authentification RBAC (Role Based Access Control), j'étais donc en colère et j'ai géré la situation.

À propos de l'authentification RBAC et du fichier d'authentification pour le SDK

Après avoir examiné les informations d'identification Azure, j'ai constaté qu'il pouvait être géré par un fichier json au format suivant.

Par exemple, pour émettre un nouveau certificat RBAC et générer ces informations au format JSON ci-dessus, [Azure CLI 2.0] ci-dessous (https://docs.microsoft.com/en-us/cli/azure/install) Les commandes -azure-cli "Install the Azure CLI 2.0 | Microsoft Docs") sont disponibles.

Émettre des informations d'authentification RBAC avec CLI (option de sortie JSON pour SDK)


$ az login
$ az ad sp create-for-rbac --sdk-auth > auth-sample.json

Exemple JSON pour SDK (cité dans le document ci-dessus)


{
    "clientId": "ad735158-65ca-11e7-ba4d-ecb1d756380e",
    "clientSecret": "b70bb224-65ca-11e7-810c-ecb1d756380e",
    "subscriptionId": "bfc42d3a-65ca-11e7-95cf-ecb1d756380e",
    "tenantId": "c81da1d8-65ca-11e7-b1d1-ecb1d756380e",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "activeDirectoryGraphResourceId": "https://graph.windows.net/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
}

Comment gérer les informations d'identification dans le SDK

De plus, si vous définissez le chemin de ce fichier JOSN dans la variable d'environnement ʻAZURE_AUTH_LOCATION`, le SDK le lira automatiquement.

Et, comme vous pouvez le voir dans le lien ci-dessus, dans la plupart des cas, vous pouvez facilement générer un client en utilisant ʻazure.common.client_factory.get_client_from_auth_file`.

Comment utiliser Azure Key Vault avec Azure SDK pour Python

Get_client_from_auth_file ne peut pas être utilisé avec KeyVaultClient ...

Je vois!

Je pensais que le client Azure Key Vault KeyVaultClient pouvait être facilement généré par la méthode ci-dessus, alors je l'ai essayé ... Je ne peux pas (´ ・ ω ・`)

azure-version de keyvault


$ pip show azure-keyvault
Name: azure-keyvault
Version: 0.3.5
...

Un exemple qui ne fonctionnait pas avec KeyVault Client


from azure.common.client_factory import get_client_from_auth_file
from azure.keyvault import KeyVaultClient
client = get_client_from_auth_file(KeyVaultClient)

Erreur lorsque le client KeyVault ne fonctionne pas


Traceback (most recent call last):
  File "sample.py", line 26, in <module>
    client = get_client_from_auth_file(KeyVaultClient)
  File "/usr/local/lib/python2.7/dist-packages/azure/common/client_factory.py", line 192, in get_client_fr
om_auth_file
    return get_client_from_json_dict(client_class, config_dict, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/azure/common/client_factory.py", line 132, in get_client_fr
om_json_dict
    return _instantiate_client(client_class, **parameters)
  File "/usr/local/lib/python2.7/dist-packages/azure/common/client_factory.py", line 31, in _instantiate_c
lient
    return client_class(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'base_url'

Utilisez cette méthode pour générer KeyVaultClient!

J'ai jeté un coup d'œil au code source du SDK, et finalement arrivé à ce matériel, j'ai pu suivre cette voie! Yay! ヾ (o´∀`o) ノ

Comme c'est un gros problème, j'ai écrit un exemple de code qui utilise le chemin de ʻAZURE_AUTH_LOCATION` en référence à ce qui précède.

sample.py


#!/usr/bin/env python

import json
import os

from azure.keyvault import KeyVaultClient, KeyVaultAuthentication
from azure.common.credentials import ServicePrincipalCredentials

def auth_callback(server, resource, scope):
    with open(os.environ.get('AZURE_AUTH_LOCATION')) as auth_file:
        auth = json.load(auth_file)

    credentials = ServicePrincipalCredentials(
        client_id=auth['clientId'],
        secret=auth['clientSecret'],
        tenant=auth['tenantId'],
        resource=resource
    )
    token = credentials.token
    return token['token_type'], token['access_token']

#Obtenez un client
client = KeyVaultClient(KeyVaultAuthentication(auth_callback))

#Obtenez un secret
vault_base_url = 'https://<Nom du coffre-fort de clés>.vault.azure.net/'
secret_name = '<Nom secret>'
secret_version = '' #Si vous ne spécifiez pas la version

secret = client.get_secret(vault_base_url, secret_name, secret_version)

En ce qui concerne l'acquisition de secrets, je me suis référé aux documents suivants.

Je recommande ça! Yay! ヾ (o´∀`o) ノ

Épilogue-Conclusion

Donc, j'ai été beaucoup ballotté, mais je ne peux pas arrêter l'ingénieur car le SDK peut être résolu en lisant le code source en open source, et je suis heureux quand je le comprends (o ゝ ω ・ o) ノ))

Recommended Posts

Vérifiez! Comment utiliser Azure Key Vault avec Azure SDK pour Python! (Mesures autour de la certification)
Python: comment utiliser async avec
Comment modifier le niveau de journalisation d'Azure SDK pour Python
Comment utiliser un éditeur externe pour le développement Python avec Grasshopper
[Python] Organisation de l'utilisation des instructions
Comment utiliser "deque" pour les données Python
Comment utiliser l'authentification par empreinte digitale pour KDE
Comment utiliser tkinter avec python dans pyenv
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
[Pour les débutants] Comment utiliser la commande say avec python!
Comment utiliser le mode interactif python avec git bash
Python # Comment vérifier le type et le type pour les super débutants
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
[python] Comment vérifier si la clé existe dans le dictionnaire
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
Comment utiliser le wrapper Python PyRealsense de Realsense avec Jetson Nano
[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python
Utiliser Azure ML Python SDK 4: écrire la sortie dans le stockage Blob - partie 2
Comment utiliser l'apprentissage automatique pour le travail? 03_Procédure de codage Python
Comment télécharger des fichiers sur Cloud Storage avec le SDK Python de Firebase
Comment spécifier Cache-Control pour le stockage BLOB dans le stockage Azure en Python
Je ne savais pas comment utiliser l'instruction [python] for
Utilisation d'Azure ML Python SDK 3: Exporter la sortie vers le stockage Blob - Partie 1
[Python] Comment utiliser la série Pandas
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
Pour utiliser virtualenv avec PowerShell
Comment définir les paramètres CORS pour le service de stockage Azure dans Python
Exemple à utiliser après l'authentification OAuth de l'API BOX avec Python
Pour utiliser python, mettez pyenv sur macOS avec PyCall
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Comment démarrer avec Python
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
[Python] Explique comment utiliser la fonction format avec un exemple
Comment utiliser l'API Python d'OpenPose
[Python] Comment obtenir une valeur avec une clé autre que value avec Enum
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment installer automatiquement le pilote Chrome pour la version Chrome avec Python + Selenium + Chrome
Comment calculer la date avec python
Comment utiliser la fonction zip de python
[Python] Comment utiliser l'API Typetalk
Utiliser Azure AD pour l'authentification Linux