App Service および Azure Functions で Azure マネージド サービス ID を使用する方法How to use Azure Managed Service Identity in App Service and Azure Functions


App Service on Linux と Web App for Containers は、現時点ではマネージド サービス ID をサポートしていません。App Service on Linux and Web App for Containers do not currently support Managed Service Identity.


アプリがサブスクリプションやテナント間で移行された場合、App Service および Azure Functions での管理対象のサービス ID は想定されたとおりに動作しません。Managed Service Identity for App Service and Azure Functions will not behave as expected if your app is migrated across subscriptions/tenants. アプリでは、機能を無効にしてから再度有効にすることで、新しい ID を取得する必要があります。The app will need to obtain a new identity, which can be done by disabling and re-enabling the feature. 以下の「ID の削除」を参照してください。See Removing an identity below. また、ダウンストリーム リソースでは、新しい ID を使用するようにアクセス ポリシーを更新する必要があります。Downstream resources will also need to have access policies updated to use the new identity.

このトピックでは、App Service および Azure Functions アプリケーション用の管理対象アプリ ID を作成し、それを使って他のリソースにアクセスする方法を説明します。This topic shows you how to create a managed app identity for App Service and Azure Functions applications and how to use it to access other resources. アプリで Azure Active Directory の管理対象のサービス ID を使うと、他の AAD で保護されたリソース (Azure Key Vault など) に簡単にアクセスできます。A managed service identity from Azure Active Directory allows your app to easily access other AAD-protected resources such as Azure Key Vault. ID は Azure プラットフォームによって管理され、ユーザーがシークレットをプロビジョニングまたはローテーションする必要はありません。The identity is managed by the Azure platform and does not require you to provision or rotate any secrets. 管理対象のサービス ID について詳しくは、「Managed Service Identity overview」(管理対象のサービス ID の概要) をご覧ください。For more about Managed Service Identity, see the Managed Service Identity overview.

ID を持つアプリの作成Creating an app with an identity

ID を持つアプリを作成するには、アプリケーションで追加のプロパティを設定する必要があります。Creating an app with an identity requires an additional property to be set on the application.

Azure ポータルの使用Using the Azure portal

ポータルで管理対象サービス ID を設定するには、最初に通常の方法でアプリケーションを作成した後、機能を有効にします。To set up a managed service identity in the portal, you will first create an application as normal and then enable the feature.

  1. ポータルを使って通常の方法でアプリを作成します。Create an app in the portal as you normally would. ポータルでアプリに移動します。Navigate to it in the portal.

  2. 関数アプリを使っている場合は、[プラットフォーム機能] に移動します。If using a function app, navigate to Platform features. 他のアプリの種類の場合は、左側のナビゲーションを下にスクロールして [設定] グループに移動します。For other app types, scroll down to the Settings group in the left navigation.

  3. [Managed service identity](管理対象のサービス ID) を選びます。Select Managed service identity.

  4. [Register with Azure Active Directory](Azure Active Directory に登録)[オン] に切り替えます。Switch Register with Azure Active Directory to On. [Save] をクリックします。Click Save.

App Service での管理対象のサービス ID

Azure CLI の使用Using the Azure CLI

Azure CLI を使用して、管理対象のサービス ID を設定するには、既存のアプリケーションに対して az webapp identity assign コマンドを使用する必要があります。To set up a managed service identity using the Azure CLI, you will need to use the az webapp identity assign command against an existing application. このセクションの例を実行するためのオプションとして次の 3 つがあります。You have three options for running the examples in this section:

次の手順では、CLI を使用して、Web アプリを作成し、ID を割り当てる方法について説明します。The following steps will walk you through creating a web app and assigning it an identity using the CLI:

  1. ローカルのコンソールで Azure CLI を使用している場合は、最初に az login を使用して Azure にサインインします。If you're using the Azure CLI in a local console, first sign in to Azure using az login. 次のように、アプリケーションをデプロイする Azure サブスクリプションに関連付けられているアカウントを使用します。Use an account that is associated with the Azure subscription under which you would like to deploy the application:

    az login
  2. CLI を使用して Web アプリケーションを作成します。Create a web application using the CLI. App Service で CLI を使用する方法の他の例については、App Service の CLI のサンプルに関するページを参照してください。For more examples of how to use the CLI with App Service, see App Service CLI samples:

    az group create --name myResourceGroup --location westus
    az appservice plan create --name myPlan --resource-group myResourceGroup --sku S1
    az webapp create --name myApp --resource-group myResourceGroup --plan myPlan
  3. identity assign コマンドを実行してこのアプリケーションの ID を作成します。Run the identity assign command to create the identity for this application:

    az webapp identity assign --name myApp --resource-group myResourceGroup

Azure PowerShell の使用Using Azure PowerShell

次の手順では、Azure PowerShell を使用して、Web アプリを作成し、ID を割り当てる方法について説明します。The following steps will walk you through creating a web app and assigning it an identity using Azure PowerShell:

  1. 必要に応じて、Azure PowerShell ガイドの手順に従って Azure PowerShell をインストールし、Login-AzureRmAccount を実行して、Azure との接続を作成します。If needed, install the Azure PowerShell using the instruction found in the Azure PowerShell guide, and then run Login-AzureRmAccount to create a connection with Azure.

  2. Azure PowerShell を使用して Web アプリケーションを作成します。Create a web application using Azure PowerShell. App Service で Azure PowerShell を使用する方法の他の例については、App Service の PowerShell のサンプルに関するページを参照してください。For more examples of how to use Azure PowerShell with App Service, see App Service PowerShell samples:

    # Create a resource group.
    New-AzureRmResourceGroup -Name myResourceGroup -Location $location
    # Create an App Service plan in Free tier.
    New-AzureRmAppServicePlan -Name $webappname -Location $location -ResourceGroupName myResourceGroup -Tier Free
    # Create a web app.
    New-AzureRmWebApp -Name $webappname -Location $location -AppServicePlan $webappname -ResourceGroupName myResourceGroup
  3. identity assign コマンドを実行してこのアプリケーションの ID を作成します。Run the identity assign command to create the identity for this application:

    Set-AzureRmWebApp -AssignIdentity $true -Name $webappname -ResourceGroupName myResourceGroup 

Azure Resource Manager テンプレートの使用Using an Azure Resource Manager template

Azure Resource Manager テンプレートを使って、Azure リソースのデプロイを自動化できます。An Azure Resource Manager template can be used to automate deployment of your Azure resources. App Service および Functions へのデプロイについて詳しくは、「Automating resource deployment in App Service」(App Service でのリソースのデプロイの自動化) および「Azure Functions の関数アプリのリソース デプロイを自動化」をご覧ください。To learn more about deploying to App Service and Functions, see Automating resource deployment in App Service and Automating resource deployment in Azure Functions.

種類が Microsoft.Web/sites であるすべてのリソースは、リソース定義に次のプロパティを含めることにより、ID を使って作成できます。Any resource of type Microsoft.Web/sites can be created with an identity by including the following property in the resource definition:

"identity": {
    "type": "SystemAssigned"

これは、Azure に対してアプリケーション用の ID を作成して管理するように指示します。This tells Azure to create and manage the identity for your application.

たとえば、Web アプリは次のようになります。For example, a web app might look like the following:

    "apiVersion": "2016-08-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('appName')]",
    "location": "[resourceGroup().location]",
    "identity": {
        "type": "SystemAssigned"
    "properties": {
        "name": "[variables('appName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "hostingEnvironment": "",
        "clientAffinityEnabled": false,
        "alwaysOn": true
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"

作成されるサイトには、次の追加プロパティが設定されます。When the site is created, it has the following additional properties:

"identity": {
    "tenantId": "<TENANTID>",
    "principalId": "<PRINCIPALID>"

<TENANTID><PRINCIPALID> は GUID に置き換えられます。Where <TENANTID> and <PRINCIPALID> are replaced with GUIDs. tenantId プロパティは、ID が属している AAD テナントを示します。The tenantId property identifies what AAD tenant the identity belongs to. principalId は、アプリケーションの新しい ID の一意識別子です。The principalId is a unique identifier for the application's new identity. AAD でのサービス プリンシパルの名前は、App Service または Azure Functions のインスタンスに指定したものと同じです。Within AAD, the service principal has the same name that you gave to your App Service or Azure Functions instance.

Azure リソースのトークンの取得Obtaining tokens for Azure resources

アプリは、その ID を使って、AAD で保護されている他のリソース (Azure Key Vault など) へのトークンを取得できます。An app can use its identity to get tokens to other resources protected by AAD, such as Azure Key Vault. これらのトークンは、アプリケーションの特定のユーザーではなく、リソースにアクセスしているアプリケーションを表します。These tokens represent the application accessing the resource, and not any specific user of the application.


アプリケーションからのアクセスを許可するように、対象のリソースを構成することが必要な場合があります。You may need to configure the target resource to allow access from your application. たとえば、Key Vault に対するトークンを要求する場合、アプリケーションの ID を含むアクセス ポリシーを追加する必要があります。For example, if you request a token to Key Vault, you need to make sure you have added an access policy that includes your application's identity. 追加しないと、トークンを含めた場合でも、Key Vault の呼び出しは拒否されます。Otherwise, your calls to Key Vault will be rejected, even if they include the token. 管理対象のサービス ID のトークンをサポートしているリソースについて詳しくは、「Azure AD 認証をサポートしている Azure サービス」をご覧ください。To learn more about which resources support Managed Service Identity tokens, see Azure services that support Azure AD authentication.

App Service と Azure Functions には、トークンを取得するための簡単な REST プロトコルがあります。There is a simple REST protocol for obtaining a token in App Service and Azure Functions. .NET アプリケーションの場合は、Microsoft.Azure.Services.AppAuthentication ライブラリがこのプロトコルの抽象化を提供し、ローカル開発エクスペリエンスをサポートします。For .NET applications, the Microsoft.Azure.Services.AppAuthentication library provides an abstraction over this protocol and supports a local development experience.

.NET 用の Microsoft.Azure.Services.AppAuthentication ライブラリの使用Using the Microsoft.Azure.Services.AppAuthentication library for .NET

.NET アプリケーションと Functions の場合、管理対象のサービス ID を使う最も簡単な方法は、Microsoft.Azure.Services.AppAuthentication パッケージを利用することです。For .NET applications and functions, the simplest way to work with a managed service identity is through the Microsoft.Azure.Services.AppAuthentication package. このライブラリを使うと、Visual Studio、Azure CLI 2.0、または Active Directory 統合認証のユーザー アカウントを使って、開発用コンピューターでローカルにコードをテストすることもできます。This library will also allow you to test your code locally on your development machine, using your user account from Visual Studio, the Azure CLI 2.0, or Active Directory Integrated Authentication. このライブラリでのローカル開発オプションについて詳しくは、Microsoft.Azure.Services.AppAuthentication のリファレンスに関するページをご覧ください。For more on local development options with this library, see the Microsoft.Azure.Services.AppAuthentication reference. このセクションでは、コードでライブラリを使い始める方法を示します。This section shows you how to get started with the library in your code.

  1. Microsoft.Azure.Services.AppAuthentication および Microsoft.Azure.KeyVault NuGet パッケージに対する参照をアプリケーションに追加します。Add references to the Microsoft.Azure.Services.AppAuthentication and Microsoft.Azure.KeyVault NuGet packages to your application.

  2. 次のコードをアプリケーションに追加します。Add the following code to your application:

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

Microsoft.Azure.Services.AppAuthentication およびそれによって公開される操作について詳しくは、Microsoft.Azure.Services.AppAuthentication のリファレンスに関するページおよび「App Service and KeyVault with MSI .NET sample」(MSI .NET での App Service と KeyVault のサンプル) をご覧ください。To learn more about Microsoft.Azure.Services.AppAuthentication and the operations it exposes, see the Microsoft.Azure.Services.AppAuthentication reference and the App Service and KeyVault with MSI .NET sample.

REST プロトコルの使用Using the REST protocol

管理対象のサービス ID を使うアプリでは、2 つの環境変数を定義します。An app with a managed service identity has two environment variables defined:


MSI_ENDPOINT は、アプリがトークンを要求できるローカル URL です。The MSI_ENDPOINT is a local URL from which your app can request tokens. リソースのトークンを取得するには、次のパラメーターを指定して、このエンドポイントに HTTP GET 要求を行います。To get a token for a resource, make an HTTP GET request to this endpoint, including the following parameters:

パラメーター名Parameter name インIn 説明Description
resourceresource クエリQuery トークンを取得する必要のあるリソースの AAD リソース URI。The AAD resource URI of the resource for which a token should be obtained.
api-versionapi-version クエリQuery 使うトークン API のバージョン。The version of the token API to be used. 現在サポートされているバージョンは "2017-09-01" だけです。"2017-09-01" is currently the only version supported.
secretsecret ヘッダーHeader MSI_SECRET 環境変数の値。The value of the MSI_SECRET environment variable.

正常終了の応答である 200 OK には、JSON 本文と次のプロパティが含まれています。A successful 200 OK response includes a JSON body with the following properties:

プロパティ名Property name 説明Description
access_tokenaccess_token 要求されたアクセス トークン。The requested access token. 呼び出し元の Web サービスは、このトークンを使用して受信側の Web サービスに対する認証処理を行うことができます。The calling web service can use this token to authenticate to the receiving web service.
expires_onexpires_on アクセス トークンの有効期限が切れる日時。The time when the access token expires. 日時は 1970-01-01T0:0:0Z UTC から期限切れ日時までの秒数として表されます。The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. この値は、キャッシュされたトークンの有効期間を調べるために使用されます。This value is used to determine the lifetime of cached tokens.
resourceresource 受信側の Web サービスのアプリケーション ID URI。The App ID URI of the receiving web service.
token_typetoken_type トークン タイプ値を指定します。Indicates the token type value. Azure AD でサポートされるのは Bearer タイプのみです。The only type that Azure AD supports is Bearer. ベアラー トークンについて詳しくは、「OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750)」(OAuth 2.0 承認フレームワーク: ベアラー トークンの使用法 (RFC 6750)) をご覧ください。For more information about bearer tokens, see The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).

この応答は、AAD のサービス間アクセス トークン要求に対する応答と同じです。This response is the same as the response for the AAD service-to-service access token request.


プロセスが初めて開始されるときに環境変数が設定されるため、お使いのアプリケーションの管理対象サービス ID を有効にした後、MSI_ENDPOINT および MSI_SECRET がコードに対して利用可能になる前にアプリケーションを再起動するか、またはアプリケーションのコードを再デプロイする必要が生じる場合があります。Environment variables are set up when the process first starts, so after enabling Managed Service Identity for your application you may need to restart your application, or redeploy its code, before MSI_ENDPOINT and MSI_SECRET are available to your code.

REST プロトコルの例REST protocol examples

要求の例を次に示します。An example request might look like the following:

GET /MSI/token?resource= HTTP/1.1
Host: localhost:4141
Secret: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

応答の例は次のようになります。And a sample response might look like the following:

HTTP/1.1 200 OK
Content-Type: application/json

    "access_token": "eyJ0eXAi…",
    "expires_on": "09/14/2017 00:00:00 PM +00:00",
    "resource": "",
    "token_type": "Bearer"

コード例Code examples

この要求を C# で行うには:To make this request in C#:

public static async Task<HttpResponseMessage> GetToken(string resource, string apiversion)  {
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
    return await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));


.NET 言語では、この要求を自作する代わりに、Microsoft.Azure.Services.AppAuthentication を使うこともできます。For .NET languages, you can also use Microsoft.Azure.Services.AppAuthentication instead of crafting this request yourself.

Node.JS の例:In Node.JS:

const rp = require('request-promise');
const getToken = function(resource, apiver, cb) {
    var options = {
        uri: `${process.env["MSI_ENDPOINT"]}/?resource=${resource}&api-version=${apiver}`,
        headers: {
            'Secret': process.env["MSI_SECRET"]

PowerShell の例:In PowerShell:

$apiVersion = "2017-09-01"
$resourceURI = "https://<AAD-resource-URI-for-resource-to-obtain-token>"
$tokenAuthURI = $env:MSI_ENDPOINT + "?resource=$resourceURI&api-version=$apiVersion"
$tokenResponse = Invoke-RestMethod -Method Get -Headers @{"Secret"="$env:MSI_SECRET"} -Uri $tokenAuthURI
$accessToken = $tokenResponse.access_token

ID の削除Removing an identity

ID は、ポータル、PowerShell、または CLI を使用して、作成時と同じ方法で機能を無効にすることで、削除できます。An identity can be removed by disabling the feature using the portal, PowerShell, or CLI in the same way that it was created. REST/ARM テンプレート プロトコルでは、種類を "なし" に設定することで、この削除を実行します。In the REST/ARM template protocol, this is done by setting the type to "None":

"identity": {
    "type": "None"

この方法で ID を削除すると、AAD からプリンシパルも削除されます。Removing the identity in this way will also delete the principal from AAD. システム割り当て ID は、アプリ リソースが削除されるときに、AAD から自動的に削除されます。System-assigned Identities are automatically removed from AAD when the app resource is deleted.


また、単純にローカル トークン サービスを無効にする、設定可能なアプリケーション設定 WEBSITE_DISABLE_MSI もあります。There is also an application setting that can be set, WEBSITE_DISABLE_MSI, which just disables the local token service. ただし、ID はその場所に残り、ツールには引き続き MSI が "オン" または "有効" と表示されます。However, it leaves the identity in place, and tooling will still show MSI as "on" or "enabled." そのため、この設定の使用は推奨しません。As a result, use of this setting is not recommmended.

次の手順Next steps