Используйте Azure Key Vault, чтобы получить секреты
Я хочу использовать Azure Key Vault в записной книжке машинного обучения для получения секретов. В руководстве, которое я использовал здесь, предлагается использовать
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
vault_url = 'https://<myvaulturl>.vault.azure.net'
az_credential = DefaultAzureCredential()
client = SecretClient(vault_url=vault_url, credential=az_credential)
client.get_secret('<mysecret>')
Однако я получаю эту ошибку
ClientAuthenticationError: DefaultAzureCredential failed to retrieve a token from the included credentials. Attempted credentials: EnvironmentCredential: EnvironmentCredential authentication unavailable. Environment variables are not fully configured. ManagedIdentityCredential: Unexpected response 'None'
.
Я думаю, это зависит от того, что у меня не установлены переменные среды:
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_TENANT_ID
Мне было интересно, есть ли другой способ получить доступ к хранилищу без использования
DefaultAzureCredential
класс.
У кого-нибудь есть идеи?
2 ответа
Чтобы получить и записать все секреты через azure cli на Mac, я вызываю следующий скрипт:sh keyvault-list.sh
#!/usr/bin/env bash
echo "Enter the keyvault Name to be used for printing secrets:"
read keyvaultName
fileName=$keyvaultName+$(date "+%Y-%m-%d %H.%M.%S").txt
echo "Starting secret printing for $keyvaultName to fileName=$fileName"
echo "Starting secret printing for $keyvaultName!" >> $fileName
keyvaultEntries=($(az keyvault secret list --vault-name $keyvaultName --query "[*].{name:name}" -o tsv))
for i in "${keyvaultEntries[@]}"
do
# do whatever on "$i" here
echo "$i" :: "$(az keyvault secret show --name $i --vault-name $keyvaultName -o tsv --query value)"
echo "$i" :: "$(az keyvault secret show --name $i --vault-name $keyvaultName -o tsv --query value)" >> $fileName
done
Попробуйте использовать для этого:
from azure.keyvault.secrets import SecretClient
from azure.identity import ClientSecretCredential
AZURE_TENANT_ID = ''
AZURE_CLIENT_ID = ''
AZURE_CLIENT_SECRET = ''
cred = ClientSecretCredential(
client_id = AZURE_CLIENT_ID,
client_secret = AZURE_CLIENT_SECRET,
tenant_id = AZURE_TENANT_ID
)
keyVaultName = ''
KVUri = f"https://{keyVaultName}.vault.azure.net"
sc = SecretClient(vault_url=KVUri, credential=cred)
print(sc.get_secret('<secret name>').value)
ОБНОВИТЬ:
- Вы можете найти свой идентификатор клиента здесь, на портале Azure:
Следуйте этому документу, чтобы создать приложение Azure AD, и следуйте этому разделу, чтобы создать секрет приложения. чтобы у вас были все 3 параметра (идентификатор клиента, идентификатор клиента и секрет клиента) для
ClientSecretCredential
Следуйте этому документу, чтобы добавить это приложение в политику доступа, чтобы у этого приложения было разрешение запрашивать секреты в хранилище ключей Azure.