Movatterモバイル変換


[0]ホーム

URL:


メイン コンテンツにスキップ

このブラウザーはサポートされなくなりました。

Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。

Microsoft Edge をダウンロードするInternet Explorer と Microsoft Edge の詳細情報
目次フォーカス モードの終了

オンプレミスでホストされている Python アプリから Azure リソースに対して認証する

  • 2025-06-02
フィードバック

この記事の内容

Azure の外部 (オンプレミスやサードパーティのデータ センターなど) でホストされているアプリは、Azure リソースにアクセスするときに、アプリケーション サービス プリンシパルを使用して Azure に対する認証を行う必要があります。 アプリケーション サービス プリンシパル オブジェクトは、Azure のアプリ登録プロセスを使用して作成されます。 アプリケーション サービス プリンシパルが作成されると、アプリのクライアント ID とクライアント シークレットが生成されます。 クライアント ID、クライアント シークレット、テナント ID は環境変数に格納されるため、実行時にアプリを Azure に対して認証するために Azure SDK for Python で使用できます。

アプリがホストされている環境ごとに異なるアプリ登録を作成する必要があります。 これにより、各サービス プリンシパルに対して環境固有のリソースのアクセス許可を構成し、ある環境にデプロイされたアプリが別の環境の一部である Azure リソースと通信しないようにすることができます。

1 - Azure にアプリケーションを登録する

アプリは、Azure portal または Azure CLI を使用して Azure に登録できます。

APP_NAME=<app-name>az ad sp create-for-rbac --name $APP_NAME

コマンドの出力は次のようになります。 これらの値をメモするか、次の手順でこれらの値が必要になり、パスワード (クライアント シークレット) 値を再び表示できなくなるため、このウィンドウを開いたままにします。

{  "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",  "displayName": "msdocs-python-sdk-auth-prod",  "password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",  "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"}

次に、appID 値を取得し、変数に格納する必要があります。 この値は、Azure SDK for Python がサービス プリンシパルを使用して Azure に対して認証できるように、ローカル開発環境で環境変数を設定するために使用されます。

APP_ID=$(az ad sp create-for-rbac \  --name $APP_NAME --query appId --output tsv)

2 - アプリケーション サービス プリンシパルにロールを割り当てる

次に、アプリがどのリソースでどのロール (アクセス許可) を必要としているかを決定し、それらのロールをアプリに割り当てる必要があります。 ロールは、リソース、リソース グループ、またはサブスクリプション スコープで割り当てることができます。 ほとんどのアプリケーションではすべての Azure リソースを 1 つのリソース グループにグループ化するため、この例では、リソース グループのスコープでサービス プリンシパルのロールを割り当てる方法を示します。

サービス プリンシパルには、az role assignment create コマンドを使用して、Azure でロールが割り当てられます。

RESOURCE_GROUP_NAME=<resource-group-name>SUBSCRIPTION_ID=$(az account show --query id --output tsv)ROLE_NAME=<role-name>az role assignment create \  --assignee "$APP_ID" \  --scope "./subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME" \  --role "$ROLE_NAME"

![!注] Git Bash が /subscriptions/.. を扱わないようにするにはファイル パスとして、scope パラメーターの文字列の先頭に ./ を付加し、文字列全体を二重引用符で囲みます。

サービス プリンシパルを割り当てることができるロール名を取得するには、az role definition list コマンドを使用します。

az role definition list \    --query "sort_by([].{roleName:roleName, description:description}, &roleName)" \    --output table

たとえば、appId が00001111-aaaa-2222-bbbb-3333cccc4444 であるサービス プリンシパルに、ID が であるサブスクリプションに含まれるaaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e リソース グループのすべてのストレージ アカウントの Azure Storage blob コンテナとデータへの読み取り、書き込み、および削除のアクセスを許可するには、次のコマンドを使用して、アプリケーション サービス プリンシパルをストレージ BLOB データ共同作成者ロールに割り当てます。

az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \    --scope "./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example" \    --role "Storage Blob Data Contributor"

Azure CLI を使用してリソースまたはサブスクリプション レベルでアクセス許可を割り当てる方法については、「Azure CLI を使用して Azure ロールを割り当てる」を参照してください。

3 - アプリケーションの環境変数を構成する

Python アプリを実行するプロセスに対してAZURE_CLIENT_IDAZURE_TENANT_IDAZURE_CLIENT_SECRET 環境変数を設定して、実行時にアプリケーション サービス プリンシパル資格情報をアプリで使用できるようにする必要があります。DefaultAzureCredential オブジェクトでは、これらの環境変数でサービス プリンシパル情報を検索します。

Gunicorn を使用して、UNIX サーバー環境で Python Web アプリを実行する場合、アプリの環境変数は、次に示すようにEnvironmentFile ファイル内のgunicorn.server ディレクティブを使用して指定できます。

[Unit]Description=gunicorn daemonAfter=network.target    [Service]  User=www-userGroup=www-dataWorkingDirectory=/path/to/python-appEnvironmentFile=/path/to/python-app/py-env/app-environment-variablesExecStart=/path/to/python-app/py-env/gunicorn --config config.py wsgi:app            [Install]  WantedBy=multi-user.target

EnvironmentFile ディレクティブで指定されたファイルには、次に示すように、環境変数とその値の一覧が含まれている必要があります。

AZURE_CLIENT_ID=<value>AZURE_TENANT_ID=<value>AZURE_CLIENT_SECRET=<value>

4 - アプリケーションに DefaultAzureCredential を実装する

Azure SDK クライアント オブジェクトを Azure に対して認証するには、アプリケーションでDefaultAzureCredential パッケージからazure.identity クラスを使用する必要があります。

まず、azure.identity パッケージを アプリケーションに追加します。

pip install azure-identity

次に、アプリで Azure SDK クライアント オブジェクトを作成する Python コードでは、次のことが必要になります。

  1. DefaultAzureCredential モジュールからazure.identity クラスをインポートします。
  2. DefaultAzureCredential オブジェクトを作成します。
  3. Azure SDK クライアント オブジェクト コンストラクターにDefaultAzureCredential オブジェクトを渡します。

この例を次のコード セグメントに示します。

from azure.identity import DefaultAzureCredentialfrom azure.storage.blob import BlobServiceClient# Acquire a credential objecttoken_credential = DefaultAzureCredential()blob_service_client = BlobServiceClient(        account_url="https://<my_account_name>.blob.core.windows.net",        credential=token_credential)

上記のコードでDefaultAzureCredential オブジェクトがインスタンス化されると、DefaultAzureCredential は、Azure に接続するためのアプリケーション サービス プリンシパル情報の環境変数AZURE_TENANT_ID,AZURE_CLIENT_ID, andAZURE_CLIENT_SECRET を読み取ります。


フィードバック

このページはお役に立ちましたか?

Yesいいえ

この記事の内容

このページはお役に立ちましたか?

Yesいいえ