Überprüfen Sie, wie Sie Azure Key Vault mit Azure SDK für Python verwenden! (Maßnahmen rund um die Zertifizierung)

Guten Abend! @dz_ Ich bin Kazumi Ohira.

Prolog-Einführung

Als ich versuchte, Azure Key Vault mit dem Azure SDK für Python zu verwenden, hatte ich Probleme mit der RBAC-Authentifizierung (Role Based Access Control). Daher war ich wütend und beschäftigte mich mit der Situation.

Informationen zur RBAC-Authentifizierung und Authentifizierungsdatei für SDK

Nachdem ich die Azure-Anmeldeinformationen berücksichtigt hatte, stellte ich fest, dass sie von einer JSON-Datei im folgenden Format verarbeitet werden können.

Um beispielsweise ein neues RBAC-Zertifikat auszustellen und diese Informationen im obigen JSON-Format auszugeben, [Azure CLI 2.0] unten (https://docs.microsoft.com/en-us/cli/azure/install) -azure-cli "Installieren der Azure CLI 2.0 | Microsoft Docs") Befehle sind verfügbar.

RBAC-Authentifizierungsinformationen mit CLI ausgeben (JSON-Ausgabeoption für SDK)


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

JSON-Beispiel für SDK (zitiert aus dem obigen Dokument)


{
    "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/"
}

Umgang mit Anmeldeinformationen im SDK

Wenn Sie den Pfad dieser JOSN-Datei in der Umgebungsvariablen "AZURE_AUTH_LOCATION" festlegen, liest das SDK ihn automatisch.

Und wie Sie dem obigen Link entnehmen können, können Sie in den meisten Fällen einfach einen Client mit "azure.common.client_factory.get_client_from_auth_file" generieren.

So verwenden Sie Azure Key Vault mit Azure SDK für Python

Get_client_from_auth_file kann nicht mit KeyVaultClient verwendet werden ...

Aha!

Ich dachte, dass der Azure Key Vault-Client "KeyVaultClient" mit der oben beschriebenen Methode einfach generiert werden kann, also habe ich es versucht ... Ich kann nicht (´ ・ ω ・ `)

azure-Keyvault-Version


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

Ein Beispiel, das mit KeyVault Client nicht funktioniert hat


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

Fehler, wenn der KeyVault-Client nicht funktioniert


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'

Verwenden Sie diese Methode, um "KeyVaultClient" zu generieren!

Ich warf einen Blick auf den Quellcode des SDK und kam schließlich zu diesem Material. Ich konnte diesen Weg gehen! Yay! ヾ (o´∀`o) ノ

Da es eine große Sache ist, habe ich einen Beispielcode geschrieben, der den Pfad von "AZURE_AUTH_LOCATION" unter Bezugnahme auf das Obige verwendet.

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']

#Holen Sie sich einen Kunden
client = KeyVaultClient(KeyVaultAuthentication(auth_callback))

#Holen Sie sich ein Geheimnis
vault_base_url = 'https://<Name des Schlüsselgewölbes>.vault.azure.net/'
secret_name = '<Geheimer Name>'
secret_version = '' #Wenn Sie die Version nicht angeben

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

In Bezug auf den Erwerb von Geheimnissen habe ich auf die folgenden Dokumente verwiesen.

Ich empfehle das! Yay! ヾ (o´∀`o) ノ

Epilog-Fazit

Ich wurde viel geworfen, aber ich kann den Ingenieur nicht aufhalten, weil das SDK durch Lesen des Quellcodes in Open Source gelöst werden kann, und ich bin froh, wenn ich es verstehe (o ゝ ω ・ o) ノ))

Recommended Posts

Überprüfen Sie, wie Sie Azure Key Vault mit Azure SDK für Python verwenden! (Maßnahmen rund um die Zertifizierung)
Python: So verwenden Sie Async mit
So ändern Sie die Protokollstufe von Azure SDK für Python
Verwendung eines externen Editors für die Python-Entwicklung mit Grasshopper
[Python] Organisieren der Verwendung für Anweisungen
Verwendung von "deque" für Python-Daten
Verwendung der Fingerabdruckauthentifizierung für KDE
Wie man tkinter mit Python in Pyenv benutzt
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Verwendung des interaktiven Python-Modus mit Git Bash
Python # So überprüfen Sie Typ und Typ für Super-Anfänger
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
Verwendung des Python-Wrappers PyRealsense von Realsense mit Jetson Nano
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
Verwenden Sie Azure ML Python SDK 4: Schreiben Sie die Ausgabe in den Blob-Speicher - Teil 2
Wie nutzt man maschinelles Lernen für die Arbeit? 03_Python-Codierungsverfahren
Hochladen von Dateien in den Cloud-Speicher mit dem Python-SDK von Firebase
Festlegen der Cache-Steuerung für den BLOB-Speicher in Azure Storage in Python
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Verwenden Sie Azure ML Python SDK 3: Ausgabe in Blob-Speicher schreiben - Teil 1
[Python] Verwendung der Pandas-Serie
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
So verwenden Sie virtualenv mit PowerShell
Festlegen der CORS-Einstellungen für den Azure-Speicherdienst in Python
Beispiel zur Verwendung nach OAuth-Authentifizierung der BOX-API mit Python
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Erste Schritte mit Python
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Verwendung der Python-API von OpenPose
[Python] So erhalten Sie mit Enum einen Wert mit einem anderen Schlüssel als dem Wert
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
So installieren Sie Chrome Driver für Chrome automatisch mit Python + Selenium + Chrome
So berechnen Sie das Datum mit Python
Verwendung der Zip-Funktion von Python
[Python] Verwendung der Typetalk-API
Verwenden Sie Azure AD für die Linux-Authentifizierung