Eseguire l'autenticazione con le librerie di gestione di Azure per PythonAuthenticate with the Azure Management Libraries for Python

Sono disponibili alcune opzioni per autenticare l'applicazione con Azure quando si usano le librerie di gestione Python per creare e gestire le risorse.Several options are available to authenticate your application with Azure when using the Python management libraries to create and manage resources.

Eseguire l'autenticazione con le credenziali del tokenAuthenticate with token credentials

Archiviare le credenziali in modo sicuro nel file di configurazione, nel Registro di sistema o in Azure Key Vault.Store the credentials securely in a configuration file, the registry, or Azure KeyVault.

L'esempio seguente usa un'entità servizio per l'autenticazione.The following example uses a Service Principal for authentication.

Nota

È possibile creare un'entità servizio tramite l'interfaccia della riga di comando di Azure 2.0You can create a Service Principal via the Azure CLI 2.0

az ad sp create-for-rbac --name "MY-PRINCIPAL-NAME" --password "STRONG-SECRET-PASSWORD"
    from azure.common.credentials import ServicePrincipalCredentials

    # Tenant ID for your Azure Subscription
    TENANT_ID = 'ABCDEFGH-1234-1234-1234-ABCDEFGHIJKL'

    # Your Service Principal App ID
    CLIENT = 'a2ab11af-01aa-4759-8345-7803287dbd39'

    # Your Service Principal Password
    KEY = 'password'

    credentials = ServicePrincipalCredentials(
        client_id = CLIENT,
        secret = KEY,
        tenant = TENANT_ID
    )

[NOTA] Per connettersi a uno dei cloud sovrani di Azure, usare il parametro cloud_environment.[NOTE!] To connect to one of the Azure sovereign clouds, use the cloud_environment parameter.

    from azure.common.credentials import ServicePrincipalCredentials
    from msrestazure.azure_cloud import AZURE_CHINA_CLOUD

    # Tenant ID for your Azure Subscription
    TENANT_ID = 'ABCDEFGH-1234-1234-1234-ABCDEFGHIJKL'

    # Your Service Principal App ID
    CLIENT = 'a2ab11af-01aa-4759-8345-7803287dbd39'

    # Your Service Principal Password
    KEY = 'password'

    credentials = ServicePrincipalCredentials(
        client_id = CLIENT,
        secret = KEY,
        tenant = TENANT_ID,
        cloud_environment = AZURE_CHINA_CLOUD
    )

Se è necessario un controllo maggiore, è consigliabile usare ADAL e il wrapper ADAL per SDK.If you need more control, it is recommended to use ADAL and the SDK ADAL wrapper. Per un elenco ed esempi di tutti gli scenari disponibili, vedere il sito Web di ADAL.Please refer to the ADAL website for all the available scenarios list and samples. Ad esempio, per l'autenticazione dell'entità servizio:For instance for service principal authentication:

    import adal
    from msrestazure.azure_active_directory import AdalAuthentication
    from msrestazure.azure_cloud import AZURE_PUBLIC_CLOUD

    # Tenant ID for your Azure Subscription
    TENANT_ID = 'ABCDEFGH-1234-1234-1234-ABCDEFGHIJKL'

    # Your Service Principal App ID
    CLIENT = 'a2ab11af-01aa-4759-8345-7803287dbd39'

    # Your Service Principal Password
    KEY = 'password'

    LOGIN_ENDPOINT = AZURE_PUBLIC_CLOUD.endpoints.active_directory
    RESOURCE = AZURE_PUBLIC_CLOUD.endpoints.active_directory_resource_id

    context = adal.AuthenticationContext(LOGIN_ENDPOINT + '/' + TENANT_ID)
    credentials = AdalAuthentication(
        context.acquire_token_with_client_credentials,
        RESOURCE,
        CLIENT,
        KEY
    )

Tutte le chiamate ADAL valide possono essere usate con la classe AdalAuthentication.All ADAL valid calls can be used with the AdalAuthentication class.

Creare quindi un oggetto client per iniziare a usare l'API:Next, create a client object to start working with the API:

from azure.mgmt.compute import ComputeManagementClient

# Your Azure Subscription ID
subscription_id = '33333333-3333-3333-3333-333333333333'

client = ComputeManagementClient(credentials, subscription_id)

[NOTA] Quando si usa un cloud sovrano di Azure, è necessario specificare anche l'URL di base appropriato, tramite i vincoli in msrestazure.azure_cloud, durante la creazione del client di gestione.[NOTE!] When using an Azure sovereign cloud you must also specify the appropriate base URL (via the constants in msrestazure.azure_cloud) when creating the management client. Ad esempio, per il cloud di Azure Cina:For example for Azure China Cloud:

client = ComputeManagementClient(credentials, subscription_id,
    base_url=AZURE_CHINA_CLOUD.endpoints.resource_manager)

Autenticazione basata su fileFile based authentication

Il modo più semplice per eseguire l'autenticazione consiste nel creare un file JSON che include le credenziali per un'entità servizio di Azure.The simplest way to authenticate is to create a JSON file that contains credentials for an Azure Service Principal. È possibile usare il comando seguente dell'interfaccia della riga di comando per creare una nuova entità servizio e questo file contemporaneamente:You can use the following CLI command to create a new Service Principal and this file at the same time:

az ad sp create-for-rbac --sdk-auth > mycredentials.json

Salvare questo file nel sistema in una posizione sicura e leggibile dal codice.Save this file in a secure location on your system where your code can read it. Impostare una variabile di ambiente con il percorso completo del file nella shell:Set an environment variable with the full path to the file in your shell:

export AZURE_AUTH_LOCATION=~/.azure/azure_credentials.json

Se si vuole creare manualmente il file, seguire questo formato:If you want to create the file yourself, please follow this format:

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

È quindi possibile creare qualsiasi client usando una factory di client:You can then create any client using the client factory:

from azure.common.client_factory import get_client_from_auth_file
from azure.mgmt.compute import ComputeManagementClient

client = get_client_from_auth_file(ComputeManagementClient)

Eseguire l'autenticazione con l'identità del servizio gestitoAuthenticate with Managed Service Identity(MSI)

L'identità del servizio gestito offre a una risorsa in Azure un modo semplice per usare l'SDK/interfaccia della riga di comando senza dover creare credenziali specifiche.MSI is a simple way for a resource in Azure to use SDK/CLI without the need to create specific credentials.

from msrestazure.azure_active_directory import MSIAuthentication
from azure.mgmt.resource import ResourceManagementClient, SubscriptionClient

    # Create MSI Authentication
    credentials = MSIAuthentication()


    # Create a Subscription Client
    subscription_client = SubscriptionClient(credentials)
    subscription = next(subscription_client.subscriptions.list())
    subscription_id = subscription.subscription_id

    # Create a Resource Management client
    resource_client = ResourceManagementClient(credentials, subscription_id)


    # List resource groups as an example. The only limit is what role and policy are assigned to this MSI token.
    for resource_group in resource_client.resource_groups.list():
        print(resource_group.name)

Autenticazione basata sull'interfaccia della riga di comandoCLI-based authentication

L'SDK consente di creare un client tramite la sottoscrizione attiva dell'interfaccia della riga di comando.The SDK is able to create a client using your CLI active subscription.

Importante

Questo approccio è consigliato come esperienza di avvio rapido per gli sviluppatori.This should be used as quick start developer experience. Per finalità di produzione, usare ADAL o il proprio sistema di credenziali.For production purposes, use ADAL or your own credentials system. Eventuali modifiche apportate alla configurazione dell'interfaccia della riga di comando influiranno sull'esecuzione dell'SDK.Any change to your CLI configuration will impact the SDK execution.

Per definire le credenziali attive, usare az login.To define active credentials, use az login. L'ID sottoscrizione predefinito corrisponde a quello disponibile oppure è possibile definirlo usando az accountDefault subscription ID is either the only one you have, or you can define it using az account

from azure.common.client_factory import get_client_from_cli_profile
from azure.mgmt.compute import ComputeManagementClient

client = get_client_from_cli_profile(ComputeManagementClient)

Eseguire l'autenticazione con le credenziali del token (legacy)Authenticate with token credentials (legacy)

Nella versione precedente dell'SDK non è ancora disponibile ADAL e viene quindi fornita una classe UserPassCredentials.In previous version of the SDK, ADAL was not yet available and we provided a UserPassCredentials class. Questo approccio viene considerato deprecato e non deve essere più usato.This is considered deprecated and should not be used anymore.

Questo esempio mostra uno scenario con utente/password.This sample shows user/password scenario. Non è supportata l'autenticazione a due fattori.This does not support 2FA.

    from azure.common.credentials import UserPassCredentials

    credentials = UserPassCredentials(
        'user@domain.com',
        'my_smart_password'
    )