Azure Container Instances でマネージド ID を使用する方法How to use managed identities with Azure Container Instances

Azure リソース用のマネージド ID を使用して、他の Azure サービスと対話する Azure Container Instances 内のコードを実行します。こうするとシークレットや資格情報をコード内に保持する必要がありません。Use managed identities for Azure resources to run code in Azure Container Instances that interacts with other Azure services - without maintaining any secrets or credentials in code. この機能により、Azure Active Directory で自動管理される ID が Azure Container Instances のデプロイに提供されます。The feature provides an Azure Container Instances deployment with an automatically managed identity in Azure Active Directory.

この記事では、Azure Container Instances でのマネージド ID の詳細について、および次の点について説明します。In this article, you learn more about managed identities in Azure Container Instances and:

  • コンテナー グループでユーザー割り当て ID またはシステム割り当て ID を有効にするEnable a user-assigned or system-assigned identity in a container group
  • ID に Azure Key Vault へのアクセス権を付与するGrant the identity access to an Azure key vault
  • マネージド ID を使用して、実行中のコンテナーから Key Vault にアクセスするUse the managed identity to access a key vault from a running container

サンプルを調整することにより、Azure Container Instances 内の ID を有効にし、それを使って他の Azure サービスにアクセスします。Adapt the examples to enable and use identities in Azure Container Instances to access other Azure services. これらのサンプルは対話型です。These examples are interactive. ただし実際には、コンテナー イメージがコードを実行して Azure サービスにアクセスします。However, in practice your container images would run code to access Azure services.

重要

現在、この機能はプレビュー段階にあります。This feature is currently in preview. プレビュー版は、追加使用条件に同意することを条件に使用できます。Previews are made available to you on the condition that you agree to the supplemental terms of use. この機能の一部の側面は、一般公開 (GA) 前に変更される可能性があります。Some aspects of this feature may change prior to general availability (GA). 現時点では、Azure Container Instances のマネージド ID は Linux コンテナーでのみサポートされており、Windows コンテナーではまだサポートされていません。Currently, managed identities on Azure Container Instances, are only supported with Linux containers and not yet with Windows containers.

マネージド ID を使用する理由Why use a managed identity?

実行中のコンテナーでマネージド ID を使用すると、資格情報をコンテナー コード内で管理しなくても、Azure AD 認証をサポートするサービスに対して認証することができます。Use a managed identity in a running container to authenticate to any service that supports Azure AD authentication without managing credentials in your container code. AD 認証をサポートしないサービスについては、Azure Key Vault の中にシークレットを格納し、マネージド ID を使って Key Vault にアクセスして資格情報を取得できます。For services that don't support AD authentication, you can store secrets in an Azure key vault and use the managed identity to access the key vault to retrieve credentials. マネージド ID の使用法の詳細については、「Azure リソースのマネージド ID とは」を参照してください。For more information about using a managed identity, see What is managed identities for Azure resources?

マネージド ID の有効化Enable a managed identity

コンテナー グループを作成するときに、ContainerGroupIdentity プロパティを設定することで 1 つまたは複数のマネージド ID を有効にできます。When you create a container group, enable one or more managed identities by setting a ContainerGroupIdentity property. また、コンテナー グループが実行状態になった後でマネージド ID を有効化または更新できます。どちらの場合も、それによりコンテナー グループが再起動します。You can also enable or update managed identities after a container group is running - either action causes the container group to restart. 新規または既存のコンテナー グループで ID を設定するには、Azure CLI、Resource Manager テンプレート、YAML ファイル、または別の Azure ツールを使用します。To set the identities on a new or existing container group, use the Azure CLI, a Resource Manager template, a YAML file, or another Azure tool.

Azure Container Instances は、ユーザー割り当て、システム割り当ての両方の種類の Azure マネージド ID をサポートしています。Azure Container Instances supports both types of managed Azure identities: user-assigned and system-assigned. 各コンテナー グループで、1 つのシステム割り当て ID、1 つまたは複数のユーザー割り当て ID、または両方の種類の ID を有効化できます。On a container group, you can enable a system-assigned identity, one or more user-assigned identities, or both types of identities. Azure リソースのマネージド ID の基本点な事柄については、概要を参照してください。If you're unfamiliar with managed identities for Azure resources, see the overview.

マネージド ID の使用Use a managed identity

マネージド ID を使用するには、サブスクリプション内の 1 つ以上の Azure サービス リソース (Web アプリ、キー コンテナー、ストレージ アカウントなど) へのアクセス権を ID に付与する必要があります。To use a managed identity, the identity must be granted access to one or more Azure service resources (such as a web app, a key vault, or a storage account) in the subscription. 実行中のコンテナーでマネージド ID を使用する方法は、Azure VM での ID の使用と似ています。Using a managed identity in a running container is similar to using an identity in an Azure VM. トークンAzure PowerShell または Azure CLI、または Azure SDK の使用に関する VM ガイダンス資料を参照してください。See the VM guidance for using a token, Azure PowerShell or Azure CLI, or the Azure SDKs.

制限事項Limitations

  • 現在、仮想ネットワークにデプロイされたコンテナー グループ内でマネージド ID を使用することはできません。Currently you can't use a managed identity in a container group deployed to a virtual network.
  • マネージド ID を使用して、コンテナー グループの作成時に Azure Container Registry からイメージをプルすることはできません。You can't use a managed identity to pull an image from Azure Container Registry when creating a container group. ID は、実行中のコンテナー内でのみ使用できます。The identity is only available within a running container.

Azure Cloud Shell を使用するUse Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。You can use either Bash or PowerShell with Cloud Shell to work with Azure services. ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell を開始するには:To start Azure Cloud Shell:

オプションOption 例とリンクExample/Link
コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. [使ってみる] を選択しても、コードは Cloud Shell に自動的にコピーされません。Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
https://shell.azure.com に移動するか、 [Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. 新しいウィンドウで Cloud Shell を起動するLaunch Cloud Shell in a new window
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the menu bar at the upper right in the Azure portal. Azure Portal の [Cloud Shell] ボタン

Azure Cloud Shell でこの記事のコードを実行するには:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell を開始します。Start Cloud Shell.

  2. [コピー] ボタンを選択して、コード ブロックをコードにコピーします。Select the Copy button on a code block to copy the code.

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードを Cloud Shell セッションに貼り付けます。Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Enter キーを選択して、コードを実行します。Select Enter to run the code.

CLI をローカルにインストールして使用する場合、この記事では、Azure CLI バージョン 2.0.49 以降を実行していることが要件となります。If you choose to install and use the CLI locally, this article requires that you are running the Azure CLI version 2.0.49 or later. バージョンを確認するには、az --version を実行します。Run az --version to find the version. インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。If you need to install or upgrade, see Install Azure CLI.

Azure Key Vault を作成するCreate an Azure key vault

この記事の例では、Azure Container Instances でマネージド ID を使用して Azure Key Vault シークレットにアクセスします。The examples in this article use a managed identity in Azure Container Instances to access an Azure key vault secret.

まず、次の az group create コマンドを使用して、myResourceGroup という名前のリソース グループを eastus の場所に作成します。First, create a resource group named myResourceGroup in the eastus location with the following az group create command:

az group create --name myResourceGroup --location eastus

キー コンテナーを作成するには、az keyvault create コマンドを使います。Use the az keyvault create command to create a key vault. 必ず一意のキー コンテナー名を指定してください。Be sure to specify a unique key vault name.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \ 
  --location eastus

az keyvault secret set コマンドを使って、サンプルのシークレット例をキー コンテナーに格納します。Store a sample secret in the key vault using the az keyvault secret set command:

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

次に示す例に従い、Azure Container Instances のユーザー定義/システム定義のいずれかのマネージド ID を使って Key Vault にアクセスします。Continue with the following examples to access the key vault using either a user-assigned or system-assigned managed identity in Azure Container Instances.

例 1:ユーザー割り当ての ID を使用して Azure Key Vault にアクセスするExample 1: Use a user-assigned identity to access Azure key vault

ID の作成Create an identity

まず az identity create コマンドを使用して、サブスクリプション内で ID を作成します。First create an identity in your subscription using the az identity create command. Key Vault の作成に使ったのと同じリソース グループを使用することも、別のものを使用することもできます。You can use the same resource group used to create the key vault, or use a different one.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

後続のステップで ID を使用するために、az identity show コマンドを使って ID のサービス プリンシパル ID とリソース ID を変数に格納します。To use the identity in the following steps, use the az identity show command to store the identity's service principal ID and resource ID in variables.

# Get service principal ID of the user-assigned identity
spID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

# Get resource ID of the user-assigned identity
resourceID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query id --output tsv)

Key Vault へのアクセス権をユーザー割り当て ID に付与するGrant user-assigned identity access to the key vault

次の az keyvault set-policy コマンドを実行して、キー コンテナーに対するアクセス ポリシーを設定します。Run the following az keyvault set-policy command to set an access policy on the key vault. 次の例では、ユーザー割り当て ID にキー コンテナーからのシークレットの取得を許可します。The following example allows the user-assigned identity to get secrets from the key vault:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $spID \
    --secret-permissions get

コンテナー グループでユーザー割り当て ID を有効にするEnable user-assigned identity on a container group

次の az container create コマンドを実行して、Microsoft の azure-cli イメージに基づくコンテナー インスタンスを作成します。Run the following az container create command to create a container instance based on Microsoft's azure-cli image. この例で作成される単一コンテナーのグループを使用すると、Azure CLI を実行して他の Azure サービスに対話的にアクセスできます。This example provides a single-container group that you can use interactively to run the Azure CLI to access other Azure services. このセクションでは、基本のオペレーティング システムのみが使用されます。In this section, only the base operating system is used. コンテナーで Azure CLI を使用する例については、「コンテナー グループでシステム割り当て ID を有効にする」を参照してください。For an example to use the Azure CLI in the container, see Enable system-assigned identity on a container group.

--assign-identity パラメーターは、ユーザー割り当てのマネージド ID をグループに渡します。The --assign-identity parameter passes your user-assigned managed identity to the group. 実行時間の長いこのコマンドにより、コンテナーの実行状態が続きます。The long-running command keeps the container running. この例では、Key Vault の作成に使ったのと同じリソース グループを使用していますが、別のものを指定することもできます。This example uses the same resource group used to create the key vault, but you could specify a different one.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $resourceID \
  --command-line "tail -f /dev/null"

数秒以内に、Azure CLI からデプロイが完了したことを示す応答を受信します。Within a few seconds, you should get a response from the Azure CLI indicating that the deployment has completed. az container show コマンドを使用して、その状態を確認します。Check its status with the az container show command.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

出力の identity セクションが次のように表示されたら、コンテナー グループで ID が設定されています。The identity section in the output looks similar to the following, showing the identity is set in the container group. userAssignedIdentities の下の principalID は、Azure Active Directory で作成した ID のサービス プリンシパルです。The principalID under userAssignedIdentities is the service principal of the identity you created in Azure Active Directory:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/xxxxxxxx-0903-4b79-a55a-xxxxxxxxxxxx/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx",
        "principalId": "xxxxxxxx-f25b-4895-b828-xxxxxxxxxxxx"
      }
    }
  },
[...]

ユーザー定義 ID を使用して Key Vault からシークレットを取得するUse user-assigned identity to get secret from key vault

これで、実行中のコンテナー インスタンス内でマネージド ID を使って Key Vault にアクセスすることができます。Now you can use the managed identity within the running container instance to access the key vault. まずコンテナーで bash シェルを次のように起動します。First launch a bash shell in the container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

コンテナーの bash シェルで、次のコマンドを実行します。Run the following commands in the bash shell in the container. Azure Active Directory を使って Key Vault に認証するためのアクセス トークンを取得するには、次のコマンドを実行します。To get an access token to use Azure Active Directory to authenticate to key vault, run the following command:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true -s

出力:Output:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

後続のコマンドで認証に使うためにアクセス トークンを変数に格納するには、次のコマンドを実行します。To store the access token in a variable to use in subsequent commands to authenticate, run the following command:

token=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

次に、アクセス トークンを使って Key Vault に対して認証し、シークレットを読み取ります。Now use the access token to authenticate to key vault and read a secret. URL 内のキー コンテナー名を必ず置き換えてください (https://mykeyvault.vault.azure.net/... )。Be sure to substitute the name of your key vault in the URL (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=2016-10-01 -H "Authorization: Bearer $token"

応答では次のようにシークレットが表示されます。The response looks similar to the following, showing the secret. コードの中でこの出力を解析して、シークレットを取得できます。In your code, you would parse this output to obtain the secret. その後、後続の操作でシークレットを使用して、別の Azure リソースにアクセスします。Then, use the secret in a subsequent operation to access another Azure resource.

{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}

例 2:システム割り当ての ID を使用して Azure Key Vault にアクセスするExample 2: Use a system-assigned identity to access Azure key vault

コンテナー グループでシステム割り当て ID を有効にするEnable system-assigned identity on a container group

次の az container create コマンドを実行して、Microsoft の azure-cli イメージに基づくコンテナー インスタンスを作成します。Run the following az container create command to create a container instance based on Microsoft's azure-cli image. この例で作成される単一コンテナーのグループを使用すると、Azure CLI を実行して他の Azure サービスに対話的にアクセスできます。This example provides a single-container group that you can use interactively to run the Azure CLI to access other Azure services.

--assign-identity パラメーター (他の値なし) を指定すると、システム割り当てのマネージド ID がグループで有効になります。The --assign-identity parameter with no additional value enables a system-assigned managed identity on the group. この ID は、コンテナーグループのリソースグループにスコープが設定されています。The identity is scoped to the resource group of the container group. 実行時間の長いこのコマンドにより、コンテナーの実行状態が続きます。The long-running command keeps the container running. この例では、ID のスコープ内にある、キー コンテナーの作成に使用したものと同じリソース グループを使用します。This example uses the same resource group used to create the key vault, which is in the scope of the identity.

# Get the resource ID of the resource group
rgID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity
az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity --scope $rgID \
  --command-line "tail -f /dev/null"

数秒以内に、Azure CLI からデプロイが完了したことを示す応答を受信します。Within a few seconds, you should get a response from the Azure CLI indicating that the deployment has completed. az container show コマンドを使用して、その状態を確認します。Check its status with the az container show command.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

出力の identity セクションが次のように表示され、システム割り当て ID が Azure Active Directory で作成されたことを示します。The identity section in the output looks similar to the following, showing that a system-assigned identity is created in Azure Active Directory:

[...]
"identity": {
    "principalId": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

後続のステップで使用するために、この ID の変数の値を principalId (サービス プリンシパル ID) に設定します。Set a variable to the value of principalId (the service principal ID) of the identity, to use in later steps.

spID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

Key Vault へのアクセス権をコンテナー グループに付与するGrant container group access to the key vault

次の az keyvault set-policy コマンドを実行して、キー コンテナーに対するアクセス ポリシーを設定します。Run the following az keyvault set-policy command to set an access policy on the key vault. 次の例により、システム定義 ID が Key Vault からシークレットを取得できるようになります。The following example allows the system-managed identity to get secrets from the key vault:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $spID \
   --secret-permissions get

コンテナー グループ ID を使用して Key Vault からシークレットを取得するUse container group identity to get secret from key vault

これで、実行中のコンテナー インスタンス内でマネージド ID を使って Key Vault にアクセスすることができます。Now you can use the managed identity to access the key vault within the running container instance. まずコンテナーで bash シェルを次のように起動します。First launch a bash shell in the container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

コンテナーの bash シェルで、次のコマンドを実行します。Run the following commands in the bash shell in the container. まず、マネージド ID を使用して Azure CLI にログインします。First log in to the Azure CLI using the managed identity:

az login --identity

実行中のコンテナーから、キー コンテナーのシークレットを取得します。From the running container, retrieve the secret from the key vault:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

シークレットの値が取得されます。The value of the secret is retrieved:

"Hello Container Instances"

Resource Manager テンプレートを使用してマネージド ID を有効にするEnable managed identity using Resource Manager template

Resource Manager テンプレートを使用してコンテナー グループのマネージド ID を有効にするには、ContainerGroupIdentity オブジェクトを使って Microsoft.ContainerInstance/containerGroups オブジェクトの identity プロパティを設定します。To enable a managed identity in a container group using a Resource Manager template, set the identity property of the Microsoft.ContainerInstance/containerGroups object with a ContainerGroupIdentity object. 次のスニペットは、さまざまなシナリオ別の identity プロパティの構成を示しています。The following snippets show the identity property configured for different scenarios. Resource Manager テンプレート リファレンスを参照してください。See the Resource Manager template reference. 2018-10-01apiVersion 以上指定します。Specify a minimum apiVersion of 2018-10-01.

ユーザー割り当て IDUser-assigned identity

ユーザー割り当て ID は、次の形式のリソース ID です。A user-assigned identity is a resource ID of the form:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

1 つまたは複数のユーザー割り当て ID を有効にすることができます。You can enable one or more user-assigned identities.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

システム割り当て IDSystem-assigned identity

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

システム割り当て/ユーザー割り当て IDSystem- and user-assigned identities

各コンテナー グループで、1 つのシステム割り当て ID と、1 つまたは複数のユーザー割り当て ID の両方を有効化できます。On a container group, you can enable both a system-assigned identity and one or more user-assigned identities.

"identity": {
    "type": "System Assigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

マネージド ID を有効にするには YAML ファイルを使用します。Enable managed identity using YAML file

YAML ファイルを使ってデプロイされるコンテナー グループでマネージド ID を有効にするには、次の YAML を含めます。To enable a managed identity in a container group deployed using a YAML file, include the following YAML. 2018-10-01apiVersion 以上指定します。Specify a minimum apiVersion of 2018-10-01.

ユーザー割り当て IDUser-assigned identity

ユーザー割り当て ID は次の形式のリソース ID ですA user-assigned identity is a resource ID of the form

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'

1 つまたは複数のユーザー割り当て ID を有効にすることができます。You can enable one or more user-assigned identities.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

システム割り当て IDSystem-assigned identity

identity:
  type: SystemAssigned

システム割り当て/ユーザー割り当て IDSystem- and user-assigned identities

各コンテナー グループで、1 つのシステム割り当て ID と、1 つまたは複数のユーザー割り当て ID の両方を有効化できます。On a container group, you can enable both a system-assigned identity and one or more user-assigned identities.

identity:
  type: SystemAssigned, UserAssigned
  userAssignedIdentities:
   {'myResourceID1':{}}

次のステップNext steps

この記事では、Azure Container Instances でのマネージド ID について、および次の方法について説明しました。In this article, you learned about managed identities in Azure Container Instances and how to:

  • コンテナー グループでユーザー割り当て ID またはシステム割り当て ID を有効にするEnable a user-assigned or system-assigned identity in a container group
  • ID に Azure Key Vault へのアクセス権を付与するGrant the identity access to an Azure key vault
  • マネージド ID を使用して、実行中のコンテナーから Key Vault にアクセスするUse the managed identity to access a key vault from a running container