App Service と Azure Functions でマネージド ID を使用する方法How to use managed identities for App Service and Azure Functions

このトピックでは、App Service と Azure Functions アプリケーションでマネージド ID を作成し、それを使用して他のリソースにアクセスする方法を説明します。This topic shows you how to create a managed identity for App Service and Azure Functions applications and how to use it to access other resources.

重要

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

ご自分のアプリで Azure Active Directory (AAD) のマネージド ID を使用すると、Azure Key Vault など、Azure AD で保護されたその他のリソースに簡単にアクセスできます。A managed identity from Azure Active Directory (Azure AD) allows your app to easily access other Azure AD-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. Azure AD のマネージド ID について詳しくは、「Azure リソースのマネージド ID とは」をご覧ください。For more about managed identities in Azure AD, see Managed identities for Azure resources.

アプリケーションには 2 種類の ID を付与できます。Your application can be granted two types of identities:

  • システム割り当て ID はアプリケーションに関連付けられているため、アプリが削除されると削除されます。A system-assigned identity is tied to your application and is deleted if your app is deleted. アプリは 1 つのシステム割り当て ID しか持つことはできません。An app can only have one system-assigned identity.
  • ユーザー割り当て ID は、アプリに割り当てることができるスタンドアロン Azure リソースです。A user-assigned identity is a standalone Azure resource that can be assigned to your app. アプリは複数のユーザー割り当て ID を持つことができます。An app can have multiple user-assigned identities.

システム割り当て ID を追加するAdd a system-assigned identity

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

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

ポータルでマネージド ID を設定するには、最初に通常の方法でアプリケーションを作成した後、機能を有効にします。To set up a managed 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. [ID] を選択します。Select Identity.

  4. [システム割り当て済み] タブで、 [状態][オン] に切り替えます。Within the System assigned tab, switch Status to On. [保存] をクリックします。Click Save.

    [状態] を [オン] に切り替えて [保存] を選択する場所を示すスクリーンショット。

注意

Azure portal で Web アプリまたはスロット アプリのマネージド ID を検索するには、 [エンタープライズアプリケーション] の下にある [ユーザー設定] セクションを確認します。To find the managed identity for your web app or slot app in the Azure portal, under Enterprise applications, look in the User settings section. 通常、スロット名は <app name>/slots/<slot name> に似ています。Usually, the slot name is similar to <app name>/slots/<slot name>.

Azure CLI の使用Using the Azure CLI

Azure CLI を使用してマネージド ID を設定するには、既存のアプリケーションに対して az webapp identity assign コマンドを使用する必要があります。To set up a managed 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's 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 Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

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

Web アプリに Azure PowerShell を使用するUsing Azure PowerShell for a web app

  1. 必要に応じて、Azure PowerShell ガイドの手順に従って Azure PowerShell をインストールし、Login-AzAccount を実行して、Azure との接続を作成します。If needed, install the Azure PowerShell using the instructions found in the Azure PowerShell guide, and then run Login-AzAccount 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-AzResourceGroup -Name $resourceGroupName -Location $location
    
    # Create an App Service plan in Free tier.
    New-AzAppServicePlan -Name $webappname -Location $location -ResourceGroupName $resourceGroupName -Tier Free
    
    # Create a web app.
    New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname -ResourceGroupName $resourceGroupName
    
  3. Set-AzWebApp -AssignIdentity コマンドを実行してこのアプリケーションの ID を作成します。Run the Set-AzWebApp -AssignIdentity command to create the identity for this application:

    Set-AzWebApp -AssignIdentity $true -Name $webappname -ResourceGroupName $resourceGroupName 
    

関数アプリに Azure PowerShell を使用するUsing Azure PowerShell for a function app

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

  2. Azure PowerShell を使用して関数アプリを作成します。Create a function app using Azure PowerShell. Azure Functions で Azure PowerShell を使用する方法の他の例については、Az.Functions リファレンスを参照してください。For more examples of how to use Azure PowerShell with Azure Functions, see the Az.Functions reference:

    # Create a resource group.
    New-AzResourceGroup -Name $resourceGroupName -Location $location
    
    # Create a storage account.
    New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -SkuName $sku
    
    # Create a function app with a system-assigned identity.
    New-AzFunctionApp -Name $functionAppName -ResourceGroupName $resourceGroupName -Location $location -StorageAccountName $storageAccountName -Runtime $runtime -IdentityType SystemAssigned
    

代わりに Update-AzFunctionApp を使用して、既存の関数アプリを更新することもできます。You can also update an existing function app using Update-AzFunctionApp instead.

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

注意

アプリケーションは、システム割り当て ID とユーザー割り当て ID の両方を同時に持つことができます。An application can have both system-assigned and user-assigned identities at the same time. この場合、type プロパティは SystemAssigned,UserAssigned になりますIn this case, the type property would be SystemAssigned,UserAssigned

システム割り当てタイプを追加すると、Azure に対してアプリケーション用の ID を作成して管理するように指示されます。Adding the system-assigned type 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": {
    "type": "SystemAssigned",
    "tenantId": "<TENANTID>",
    "principalId": "<PRINCIPALID>"
}

tenantId プロパティは、その ID が属する Azure AD テナントを示します。The tenantId property identifies what Azure AD tenant the identity belongs to. principalId は、アプリケーションの新しい ID の一意識別子です。The principalId is a unique identifier for the application's new identity. Azure AD のサービス プリンシパル名は、お使いの App Service または Azure Functions のインスタンスに指定したものと同じです。Within Azure AD, the service principal has the same name that you gave to your App Service or Azure Functions instance.

テンプレートの後の段階でこれらのプロパティを参照する必要がある場合は、次の例のように、'Full' フラグを指定した reference() テンプレート関数を使用して行うことができます。If you need to reference these properties in a later stage in the template, you can do so via the reference() template function with the 'Full' flag, as in this example:

{
    "tenantId": "[reference(resourceId('Microsoft.Web/sites', variables('appName')), '2018-02-01', 'Full').identity.tenantId]",
    "objectId": "[reference(resourceId('Microsoft.Web/sites', variables('appName')), '2018-02-01', 'Full').identity.principalId]",
}

ユーザー割り当て ID を追加するAdd a user-assigned identity

ユーザー割り当て ID を持つアプリを作成するには、ID を作成してから、そのリソース ID をアプリ構成に追加する必要があります。Creating an app with a user-assigned identity requires that you create the identity and then add its resource identifier to your app config.

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

最初に、ユーザー割り当て ID リソースを作成する必要があります。First, you'll need to create a user-assigned identity resource.

  1. 以下の手順に従って、ユーザー割り当てマネージド ID リソースを作成します。Create a user-assigned managed identity resource according to these instructions.

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

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

  4. [ID] を選択します。Select Identity.

  5. [ユーザー割り当て済み] タブで [追加] をクリックします。Within the User assigned tab, click Add.

  6. 先ほど作成した ID を検索して選択します。Search for the identity you created earlier and select it. [追加] をクリックします。Click Add.

    App Service のマネージド ID

Azure PowerShell の使用Using Azure PowerShell

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

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

注意

現在のバージョンの Azure App Service 用の Azure PowerShell コマンドレットでは、ユーザー割り当て ID はサポートされていません。The current version of the Azure PowerShell commandlets for Azure App Service do not support user-assigned identities. 以下の手順は Azure Functions を対象としています。The below instructions are for Azure Functions.

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

  2. Azure PowerShell を使用して関数アプリを作成します。Create a function app using Azure PowerShell. Azure Functions で Azure PowerShell を使用する方法の他の例については、Az.Functions リファレンスを参照してください。For more examples of how to use Azure PowerShell with Azure Functions, see the Az.Functions reference. 次のスクリプトでは、「Azure PowerShell を使用してユーザー割り当てマネージド ID を作成、一覧表示、削除する」に従って個別にインストールする必要がある New-AzUserAssignedIdentity を活用しています。The below script also makes use of New-AzUserAssignedIdentity which must be installed separately as per Create, list or delete a user-assigned managed identity using Azure PowerShell.

    # Create a resource group.
    New-AzResourceGroup -Name $resourceGroupName -Location $location
    
    # Create a storage account.
    New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -SkuName $sku
    
    # Create a user-assigned identity. This requires installation of the "Az.ManagedServiceIdentity" module.
    $userAssignedIdentity = New-AzUserAssignedIdentity -Name $userAssignedIdentityName -ResourceGroupName $resourceGroupName
    
    # Create a function app with a user-assigned identity.
    New-AzFunctionApp -Name $functionAppName -ResourceGroupName $resourceGroupName -Location $location -StorageAccountName $storageAccountName -Runtime $runtime -IdentityType UserAssigned -IdentityId $userAssignedIdentity.Id
    

代わりに Update-AzFunctionApp を使用して、既存の関数アプリを更新することもできます。You can also update an existing function app using Update-AzFunctionApp instead.

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 であるリソースは、リソース定義に次のブロックを含めて、<RESOURCEID> を目的の ID のリソース ID と置き換えることで、ID を使って作成できます。Any resource of type Microsoft.Web/sites can be created with an identity by including the following block in the resource definition, replacing <RESOURCEID> with the resource ID of the desired identity:

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<RESOURCEID>": {}
    }
}

注意

アプリケーションは、システム割り当て ID とユーザー割り当て ID の両方を同時に持つことができます。An application can have both system-assigned and user-assigned identities at the same time. この場合、type プロパティは SystemAssigned,UserAssigned になりますIn this case, the type property would be SystemAssigned,UserAssigned

ユーザー割り当ての型を追加すると、アプリケーションに対して指定されたユーザー割り当て ID を使用するように Azure に指示します。Adding the user-assigned type tells Azure to use the user-assigned identity specified 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": "UserAssigned",
        "userAssignedIdentities": {
            "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]": {}
        }
    },
    "properties": {
        "name": "[variables('appName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "hostingEnvironment": "",
        "clientAffinityEnabled": false,
        "alwaysOn": true
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
    ]
}

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

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<RESOURCEID>": {
            "principalId": "<PRINCIPALID>",
            "clientId": "<CLIENTID>"
        }
    }
}

principalId は、Azure AD の管理に使用される ID の一意識別子です。The principalId is a unique identifier for the identity that's used for Azure AD administration. clientId は、ランタイム呼び出し中に使用する ID を指定するために使用されるアプリケーションの新しい ID の一意識別子です。The clientId is a unique identifier for the application's new identity that's used for specifying which identity to use during runtime calls.

Azure リソースのトークンを取得するObtain tokens for Azure resources

アプリは、そのマネージド ID を使って、Azure Key Vault など Azure AD で保護されているその他のリソースにアクセスするトークンを取得できます。An app can use its managed identity to get tokens to access other resources protected by Azure AD, 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 access 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. Azure Active Directory トークンをサポートしているリソースの詳細については、「Azure AD 認証をサポートしている Azure サービス」をご覧ください。To learn more about which resources support Azure Active Directory tokens, see Azure services that support Azure AD authentication.

重要

マネージド ID のバックエンド サービスは、リソース URI ごとのキャッシュを約 8 時間保持します。The back-end services for managed identities maintain a cache per resource URI for around 8 hours. 特定のターゲット リソースのアクセス ポリシーを更新し、そのリソースのトークンをすぐに取得した場合、そのトークンの有効期限が切れるまで、期限切れのアクセス許可を持つキャッシュされたトークンを取得し続ける可能性があります。If you update the access policy of a particular target resource and immediately retrieve a token for that resource, you may continue to get a cached token with outdated permissions until that token expires. 現在、トークンの更新を強制する方法はありません。There's currently no way to force a token refresh.

App Service と Azure Functions には、トークンを取得するための簡単な REST プロトコルがあります。There is a simple REST protocol for obtaining a token in App Service and Azure Functions. これは、すべてのアプリケーションと言語で使用できます。This can be used for all applications and languages. .NET と Java では、Azure SDK によってこのプロトコルが抽象化され、ローカル開発エクスペリエンスを支援します。For .NET and Java, the Azure SDK provides an abstraction over this protocol and facilitates a local development experience.

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

注意

"2017-09-01" の API バージョンを使用するこのプロトコルの古いバージョンでは、X-IDENTITY-HEADER の代わりに secret ヘッダーを使用し、ユーザー割り当てに clientid プロパティのみを許可していました。An older version of this protocol, using the "2017-09-01" API version, used the secret header instead of X-IDENTITY-HEADER and only accepted the clientid property for user-assigned. また、タイムスタンプ形式で expires_on も返していました。It also returned the expires_on in a timestamp format. MSI_ENDPOINT は IDENTITY_ENDPOINT の別名として使用でき、MSI_SECRET は IDENTITY_HEADER の別名として使用できます。MSI_ENDPOINT can be used as an alias for IDENTITY_ENDPOINT, and MSI_SECRET can be used as an alias for IDENTITY_HEADER. このプロトコルのこのバージョンは、現在、Linux 従量課金ホスティング プランに必要です。This version of the protocol is currently required for Linux Consumption hosting plans.

マネージド ID を使用するアプリでは、2 つの環境変数を定義します。An app with a managed identity has two environment variables defined:

  • IDENTITY_ENDPOINT - ローカル トークン サービスに対する URL。IDENTITY_ENDPOINT - the URL to the local token service.
  • IDENTITY_HEADER - サーバー側のリクエスト フォージェリ (SSRF) 攻撃を回避するために使用するヘッダー。IDENTITY_HEADER - a header used to help mitigate server-side request forgery (SSRF) attacks. 値は、プラットフォームによってローテーションされます。The value is rotated by the platform.

IDENTITY_ENDPOINT は、お使いのアプリがトークンを要求するローカル URL です。The IDENTITY_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 トークンを取得する必要のあるリソースの Azure AD リソース URI。The Azure AD resource URI of the resource for which a token should be obtained. これは Azure AD 認証をサポートしている Azure サービスの 1 つか、その他のリソース URI になります。This could be one of the Azure services that support Azure AD authentication or any other resource URI.
api-versionapi-version クエリQuery 使うトークン API のバージョン。The version of the token API to be used. "2019-08-01" 以降を使用してください (ただし、現在 "2017-09-01" のみが提供されている Linux 従量課金プランを使用している場合を除きます。上記の注を参照)。Please use "2019-08-01" or later (unless using Linux Consumption, which currently only offers "2017-09-01" - see note above).
X-IDENTITY-HEADERX-IDENTITY-HEADER ヘッダーHeader IDENTITY_HEADER 環境変数の値。The value of the IDENTITY_HEADER environment variable. このヘッダーは、サーバー側のリクエスト フォージェリ (SSRF) 攻撃を回避するために使用されます。This header is used to help mitigate server-side request forgery (SSRF) attacks.
client_idclient_id クエリQuery (省略可能) 使用するユーザー割り当て ID のクライアント ID。(Optional) The client ID of the user-assigned identity to be used. principal_idmi_res_id、または object_id を含む要求では使用できません。Cannot be used on a request that includes principal_id, mi_res_id, or object_id. すべての ID パラメーター (client_idprincipal_idobject_id、および mi_res_id) を省略した場合、システム割り当て ID が使用されます。If all ID parameters (client_id, principal_id, object_id, and mi_res_id) are omitted, the system-assigned identity is used.
principal_idprincipal_id クエリQuery (省略可能) 使用するユーザー割り当て ID のプリンシパル ID。(Optional) The principal ID of the user-assigned identity to be used. object_id は代わりに使用する別名です。object_id is an alias that may be used instead. client_id、mi_res_id、または object_id を含む要求では使用できません。Cannot be used on a request that includes client_id, mi_res_id, or object_id. すべての ID パラメーター (client_idprincipal_idobject_id、および mi_res_id) を省略した場合、システム割り当て ID が使用されます。If all ID parameters (client_id, principal_id, object_id, and mi_res_id) are omitted, the system-assigned identity is used.
mi_res_idmi_res_id クエリQuery (省略可能) 使用するユーザー割り当て ID の Azure リソース ID。(Optional) The Azure resource ID of the user-assigned identity to be used. principal_idclient_id、または object_id を含む要求では使用できません。Cannot be used on a request that includes principal_id, client_id, or object_id. すべての ID パラメーター (client_idprincipal_idobject_id、および mi_res_id) を省略した場合、システム割り当て ID が使用されます。If all ID parameters (client_id, principal_id, object_id, and mi_res_id) are omitted, the system-assigned identity is used.

重要

ユーザー割り当て ID のトークンを取得する場合は、省略可能なプロパティの 1 つを含める必要があります。If you are attempting to obtain tokens for user-assigned identities, you must include one of the optional properties. このようにしないと、トークン サービスは存在する場合と存在しない場合があるシステムが割り当てた ID のトークンを取得しようとします。Otherwise the token service will attempt to obtain a token for a system-assigned identity, which may or may not exist.

正常終了の応答である 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.
client_idclient_id 使用された ID のクライアント ID。The client ID of the identity that was used.
expires_onexpires_on アクセス トークンが期限切れになるまでの期間。The timespan when the access token expires. 日付は "1970-01-01T0:0:0Z UTC" からの秒数として表されます (トークンの exp 要求に対応)。The date is represented as the number of seconds from "1970-01-01T0:0:0Z UTC" (corresponds to the token's exp claim).
not_beforenot_before アクセス トークンが有効になり、承認されるまでの期間。The timespan when the access token takes effect, and can be accepted. 日付は "1970-01-01T0:0:0Z UTC" からの秒数として表されます (トークンの nbf 要求に対応)。The date is represented as the number of seconds from "1970-01-01T0:0:0Z UTC" (corresponds to the token's nbf claim).
resourceresource アクセス トークンの要求対象リソース。要求の resource クエリ文字列パラメーターと一致します。The resource the access token was requested for, which matches the resource query string parameter of the request.
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).

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

REST プロトコルの例REST protocol examples

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

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: localhost:4141
X-IDENTITY-HEADER: 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": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "5E29463D-71DA-4FE0-8E69-999B57DB23B0"
}

コード例Code examples

ヒント

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

private readonly HttpClient _client;
// ...
public async Task<HttpResponseMessage> GetToken(string resource)  {
    var request = new HttpRequestMessage(HttpMethod.Get, 
        String.Format("{0}/?resource={1}&api-version=2019-08-01", Environment.GetEnvironmentVariable("IDENTITY_ENDPOINT"), resource));
    request.Headers.Add("X-IDENTITY-HEADER", Environment.GetEnvironmentVariable("IDENTITY_HEADER"));
    return await _client.SendAsync(request);
}

.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 identity is through the Microsoft.Azure.Services.AppAuthentication package. このライブラリを使うと、Visual Studio、Azure CLI、または 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, or Active Directory Integrated Authentication. クラウドでホストされている場合は、システムによって割り当てられた ID が既定で使用されますが、この動作は、ユーザー割り当て ID のクライアント ID を参照する接続文字列環境変数を使用してカスタマイズできます。When hosted in the cloud, it will default to using a system-assigned identity, but you can customize this behavior using a connection string environment variable which references the client ID of a user-assigned identity. このライブラリでの開発オプションについて詳しくは、[Microsoft.Azure.Services.AppAuthentication の参照]に関する記事をご覧ください。For more on 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 とその他の必要な NuGet パッケージに対する参照をアプリケーションに追加します。Add references to the Microsoft.Azure.Services.AppAuthentication and any other necessary NuGet packages to your application. 下の例では Microsoft.Azure.KeyVault も使用されています。The below example also uses Microsoft.Azure.KeyVault.

  2. 次のコードをアプリケーションに追加し、正しいリソースが対象となるように変更します。Add the following code to your application, modifying to target the correct resource. この例では、Azure Key Vault と連携動作するための 2 つの方法が示されています。This example shows two ways to work with Azure Key Vault:

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

ユーザー割り当てのマネージド ID を使用する場合は、AzureServicesAuthConnectionString アプリケーション設定を RunAs=App;AppId=<clientId-guid> に設定できます。If you want to use a user-assigned managed identity, you can set the AzureServicesAuthConnectionString application setting to RunAs=App;AppId=<clientId-guid>. <clientId-guid> は、使用する ID のクライアント ID に置き換えます。Replace <clientId-guid> with the client ID of the identity you want to use. カスタム アプリケーション設定を使用し、その値を AzureServiceTokenProvider コンストラクターに渡すことで、このような接続文字列を複数定義できます。You can define multiple such connection strings by using custom application settings and passing their values into the AzureServiceTokenProvider constructor.

    var identityConnectionString1 = Environment.GetEnvironmentVariable("UA1_ConnectionString");
    var azureServiceTokenProvider1 = new AzureServiceTokenProvider(identityConnectionString1);
    
    var identityConnectionString2 = Environment.GetEnvironmentVariable("UA2_ConnectionString");
    var azureServiceTokenProvider2 = new AzureServiceTokenProvider(identityConnectionString2);

AzureServiceTokenProvider の構成とそれによって公開される操作の詳細については、[Microsoft.Azure.Services.AppAuthentication の参照]に関するページと MSI .NET での App Service と KeyVault のサンプルに関するページをご覧ください。To learn more about configuring AzureServiceTokenProvider and the operations it exposes, see the Microsoft.Azure.Services.AppAuthentication reference and the App Service and KeyVault with MSI .NET sample.

Azure SDK for Java を使用するUsing the Azure SDK for Java

Java のアプリケーションと関数の場合、マネージド ID を利用する最も簡単な方法は、Azure SDK for Java を経由する方法です。For Java applications and functions, the simplest way to work with a managed identity is through the Azure SDK for Java. このセクションでは、コードでライブラリを使い始める方法を示します。This section shows you how to get started with the library in your code.

  1. Azure SDK ライブラリの参照を追加します。Add a reference to the Azure SDK library. Maven プロジェクトの場合、プロジェクトの POM ファイルの dependencies セクションにこのスニペットを追加できます。For Maven projects, you might add this snippet to the dependencies section of the project's POM file:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure</artifactId>
        <version>1.23.0</version>
    </dependency>
    
  2. 認証には AppServiceMSICredentials オブジェクトを使用します。Use the AppServiceMSICredentials object for authentication. この例からは、このメカニズムを使用して Azure Key Vault を操作する方法がわかります。This example shows how this mechanism may be used for working with Azure Key Vault:

    import com.microsoft.azure.AzureEnvironment;
    import com.microsoft.azure.management.Azure;
    import com.microsoft.azure.management.keyvault.Vault
    //...
    Azure azure = Azure.authenticate(new AppServiceMSICredentials(AzureEnvironment.AZURE))
            .withSubscription(subscriptionId);
    Vault myKeyVault = azure.vaults().getByResourceGroup(resourceGroup, keyvaultName);
    
    

ID を削除するRemove an identity

システム割り当て ID は、ポータル、PowerShell、または CLI を使用して、作成時と同じ方法で機能を無効にすることで、削除できます。A system-assigned identity can be removed by disabling the feature using the portal, PowerShell, or CLI in the same way that it was created. ユーザー割り当て ID は個別に削除することはできません。User-assigned identities can be removed individually. すべての ID を削除するには、ID の種類を "None" に設定します。To remove all identities, set the identity type to "None".

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

ARM テンプレートのすべての ID を削除するには、次のようにします。To remove all identities in an ARM template:

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

Azure PowerShell のすべての ID を削除するには (Azure Functions のみ) 次のようにします。To remove all identities in Azure PowerShell (Azure Functions only):

# Update an existing function app to have IdentityType "None".
Update-AzFunctionApp -Name $functionAppName -ResourceGroupName $resourceGroupName -IdentityType None

注意

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

次のステップNext steps