2017-08-30 1 views
0

Ich muss Geheimnisse von keyvault abrufen. Dies ist mein Code so weit:Python Azure sdk: Wie man Geheimnisse von keyvault holt?

from azure.mgmt.keyvault import KeyVaultManagementClient 
from azure.common.credentials import ServicePrincipalCredentials 


subscription_id = 'x' 
# See above for details on creating different types of AAD credentials 
credentials = ServicePrincipalCredentials(
    client_id = 'x', 
    secret = 'x', 
    tenant = 'x' 
) 

kv_client = KeyVaultManagementClient(credentials, subscription_id) 

for vault in kv_client.vaults.list(): 
    print(vault) 

Aber ich bin immer diese Fehlermeldung:

msrestazure.azure_exceptions.CloudError: Azure Error: AuthorizationFailed Message: The client 'x' with object id 'x' does not have authorization to perform action 'Microsoft.Resources/subscriptions/resources/read' over scope '/subscriptions/x'.

Jetzt bin ich in der Lage mit dem gleichen Anmeldeinformationen die gleiche keyvault für den Zugriff auf C# Code/Power so gibt es definitiv nichts falsch mit Genehmigung. Nicht sicher, warum es nicht mit SDK funktioniert. Bitte helfen Sie.

+0

Keine Ahnung, der Bearer Token könnte die falsche Zielgruppe haben oder etwas in dieser Richtung - versuchen Sie, in https://github.com/Azure/azure-sdk-for-python/issues zu fragen, wenn Sie sicher sind, dass der SPN ist gut für diese Ressource. Versuchen Sie, einen Weg zu finden, die Ablaufverfolgung zu aktivieren, vielleicht gibt es Hinweise darauf, was im Token enthalten ist. – evilSnobu

+0

Ihr Code funktioniert für mich, ich könnte Geheimnisse im Schlüsseltresor auflisten. Wenn möglich, könnten Sie Ihrer Servicepresse "Owner" -Permission geben und es erneut versuchen. [Anwendung der Rolle zuweisen] (https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-serviceprincipal-portal#assign-application-to-role). –

+0

Auch können Sie 'Contributor' Erlaubnis geben, es funktioniert auch für mich. Es ist sehr seltsam, ich bin mir nicht sicher, warum der Service-Principal auf C# und PowerShell funktioniert. Aber ich schlage vor, Sie könnten überprüfen und versuchen, die Erlaubnis zu geben. –

Antwort

2

Ich führe Ihr Codebeispiel oben und es ist in der Lage, die wichtigsten Tresore ohne irgendein Problem aufzulisten, daher ist es kein Code-Problem.

Ich habe die Contributor Rolle meiner AD-Anwendung auf dem Abonnement zugewiesen, wo der Schlüssel Tresor bereitgestellt wird und die Zugriffsrichtlinien festlegen & LIST Berechtigungen für Schlüssel zu ermöglichen, GET und Geheimnis auf die AD-Anwendung.

Die Versionen meiner Azure Python-Pakete laufen unter Python 3.6.2 Laufzeitumgebung verwendet:

  • azure.common (1.1.8)
  • azure.mgmt.keyvault (0,40 .0)
  • msrestazure (0.4.13)

Ich empfehle Ihnen, die Versionen der Python-Laufzeitversionen und Azure Python-Pakete zu testen, die verifiziert sind.

Nachtrag:

Wenn die obige Python-Laufzeitumgebung Version sowie Azure Python-Pakete auch nicht für Sie arbeiten, sollten Sie vielleicht überlegen in der Azure SDK for Python GitHub ein neues Problem zu schaffen, wie es mit der gleichen arbeitet Credential mit Azure .NET SDK sowie PowerShell.

Verwandte Themen