マネージド ID を使用した Azure Container Apps イメージのプル

管理資格情報の使用を避けるために、マネージド ID を認証に使用して Microsoft Azure Container Registry のプライベート リポジトリからイメージをプルできます。 システム割り当てまたはユーザー割り当てのマネージド ID を Azure Container Registry の認証に使用できます。

システム割り当てマネージド ID の場合、ID は Azure Container Apps によって作成および管理されます。 ID はコンテナー アプリに関連付けられているため、アプリが削除されると削除されます。 ユーザー割り当てマネージド ID の場合、Azure Container Apps の外部で ID を作成および管理します。 Azure Container Apps を含む複数の Azure リソースに割り当てることができます。

Container Apps では、コンテナーを起動するたびにイメージの新しいバージョンを確認します。 Docker や Kubernetes の用語では、Container Apps は各コンテナーのイメージのプル ポリシーを always に設定します。

この記事では、ユーザー割り当ておよびシステム割り当てのマネージド ID を使用してプライベート Azure Container Registry リポジトリからイメージをプルするように、Azure portal を使用してコンテナー アプリを構成する方法について説明します。

ユーザー割り当てマネージド ID

以下の手順では、ユーザー割り当てマネージド ID を使用してプライベート Azure Container Registry リポジトリからイメージをプルするようにコンテナー アプリを構成するプロセスについて説明します。

  1. パブリック イメージを使用してコンテナー アプリを作成します。
  2. ユーザー割り当てマネージド ID をコンテナー アプリに追加します。
  3. プライベート イメージとユーザー割り当てマネージド ID を使用して、コンテナー アプリのリビジョンを作成します。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。

  • プルするイメージが含まれているプライベート Azure Container Registry。

  • マネージド ID を使用してイメージをプルするには、Azure Container Registry で ARM 対象ユーザー トークンを認証に使用できるようにする必要があります。 次のコマンドを使用して、ARM トークンが ACR にアクセスできるかどうかを確認します。

    az acr config authentication-as-arm show -r <REGISTRY>
    

    ARM トークンが許可されていない場合は、次のコマンドを使用して許可することができます。

    az acr config authentication-as-arm update -r <REGISTRY> --status enabled
    
  • ユーザー割り当てマネージド ID を作成します。 詳細については、「ユーザー割り当てマネージド ID を作成する」を参照してください。

コンテナー アプリの作成

既定のクイックスタート イメージを使用してコンテナー アプリを作成するには、次の手順に従います。

  1. ポータルの [ホーム] ページに移動します。

  2. 上部の検索バーで「コンテナー アプリ」を検索します。

  3. 検索結果でコンテナー アプリを選択します。

  4. [作成] ボタンを選択します。

  5. [基本] タブで、次の操作を行います。

    設定 アクション
    サブスクリプション Azure サブスクリプションを選択します。
    リソース グループ 既存のリソース グループを選択するか、新しいリソース グループを作成します。
    コンテナー アプリ名 コンテナー アプリ名を入力します。
    場所 場所を選択します。
    コンテナー アプリ環境の作成 新しい環境を作成するか、既存の環境を選択します。
  6. [コンテナーアプリの作成] ページの下部にある [確認と作成] ボタンを選択します。

  7. [コンテナー アプリの作成] ウィンドウの下部にある [作成] ボタンを選択します。

コンテナー アプリのデプロイが完了するには数分かかります。 デプロイが完了したら、[リソースに移動] を選択します。

ユーザー割り当てマネージド ID の追加

  1. 左側のメニューから [ID] を選択します。
  2. [ユーザー割り当て済み] タブを選択します。
  3. [ユーザー割り当てマネージド ID の追加] ボタンを選択します。
  4. サブスクリプションを選択します。
  5. 作成した ID を選択します。
  6. [追加] を選択します。

コンテナー アプリのリビジョンの作成

プライベート イメージとシステム割り当てマネージド ID を使用して、コンテナー アプリのリビジョンを作成します。

  1. 左側のメニューから [リビジョン管理] を選択します。

  2. [新しいリビジョンの作成] を選択します。

  3. [コンテナー イメージ] テーブルからコンテナー イメージを選択します。

  4. [コンテナーの編集] ダイアログに情報を入力します。

    フィールド アクション
    名前 コンテナーの名前を入力します。
    イメージ ソース [Azure Container Registry] を選択します。
    認証 [マネージド ID] を選択します。
    ID ドロップダウン メニューから、作成した ID を選択します。
    レジストリ ドロップダウン メニューから、使用するレジストリを選択します。
    Image 使用するイメージの名前を入力します。
    イメージ タグ プルするイメージの名前とタグを入力します。

    Screen shot of the Edit a container dialog entering user assigned managed identity.

    Note

    Azure Container Registry のレジストリで管理資格情報が有効になっていない場合は、警告メッセージが表示され、イメージ名とタグ情報を手動で入力する必要があります。

  5. [保存] を選択します。

  6. [新しいリビジョンの作成とデプロイ] ページから [作成] を選択します。

新しいリビジョンが作成され、デプロイされます。 ポータルでは、ユーザー割り当てマネージド ID への acrpull ロールの追加が自動的に試行されます。 ロールが追加されない場合は、手動で追加できます。

ロールが追加されたことを確認するには、コンテナー アプリ ページの [ID] ペインで ID を 確認します。

  1. 左側のメニューから [ID] を選択します。
  2. [ユーザー割り当て済み] タブを選択します。
  3. ユーザー割り当てマネージド ID を選びます。
  4. マネージド ID リソース ページのメニューから [Azure ロールの割り当て] を選びます。
  5. acrpull ロールがユーザー割り当てマネージド ID に割り当てられていることを確認します。

プライベート イメージを使用してコンテナー アプリを作成します。

パブリック イメージを使用したコンテナー アプリの作成から始めたくない場合は、次のようにすることもできます。

  1. ユーザー割り当てマネージド ID を作成します。
  2. ユーザー割り当てマネージド ID に acrpull ロールを追加します。
  3. プライベート イメージとユーザー割り当てマネージド ID を使用して、コンテナー アプリを作成します。

この方法は、コードとしてのインフラストラクチャ (IaC) のシナリオで一般的に用いられます。

リソースをクリーンアップする

このアプリケーションを引き続き使用しない場合は、リソース グループを削除することで、Azure Container Apps インスタンスと関連付けられているすべてのサービスを削除できます。

警告

リソース グループを削除すると、グループ内のすべてのリソースが削除されます。 グループ内に他のリソースがある場合は、それらのリソースも削除されます。 リソースを保持したい場合は、コンテナー アプリ インスタンスとコンテナー アプリ環境を削除できます。

  1. [概要] セクションからリソース グループを選択します。
  2. リソース グループ ページの [概要] の上部で [リソース グループの削除] ボタンを選択します。
  3. 確認ダイアログにリソース グループ名を入力します。
  4. [削除] を選択します。
    リソース グループを削除するプロセスが完了するまでに数分かかる場合があります。

システム割り当てマネージド ID

Azure portal でシステム割り当てマネージド ID を構成する方法は、ユーザー割り当てマネージド ID の構成と同じです。 唯一の違いは、ユーザー割り当てマネージド ID を作成する必要がない点です。 代わりに、コンテナー アプリの作成時にシステム割り当てマネージド ID が作成されます。

Azure portal でシステム割り当てマネージド ID を構成する方法は次のとおりです。

  1. パブリック イメージを使用してコンテナー アプリを作成します。
  2. プライベート イメージとシステム割り当てマネージド ID を使用して、コンテナー アプリのリビジョンを作成します。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。
  • プルするイメージが含まれているプライベート Azure Container Registry。 プライベート Azure Container Registry の作成に関するページを参照してください。

コンテナー アプリの作成

次の手順に従い、既定のクイックスタート イメージを使用してコンテナー アプリを作成します。

  1. ポータルの [ホーム] ページに移動します。

  2. 上部の検索バーで「コンテナー アプリ」を検索します。

  3. 検索結果でコンテナー アプリを選択します。

  4. [作成] ボタンを選択します。

  5. [基本] タブで、次の操作を行います。

    設定 アクション
    サブスクリプション Azure サブスクリプションを選択します。
    リソース グループ 既存のリソース グループを選択するか、新しいリソース グループを作成します。
    コンテナー アプリ名 コンテナー アプリ名を入力します。
    場所 場所を選択します。
    コンテナー アプリ環境の作成 新しい環境を作成するか、既存の環境を選択します。
  6. [コンテナーアプリの作成] ページの下部にある [確認と作成] ボタンを選択します。

  7. [コンテナー アプリの作成] ページの下部にある [作成] ボタンを選択します。

コンテナー アプリのデプロイが完了するには数分かかります。 デプロイが完了したら、[リソースに移動] を選択します。

リビジョンの編集とデプロイ

プライベート Azure Container Registry のイメージを使用するようにコンテナーを編集し、システム割り当て ID を使用するように認証を構成します。

  1. 左側のサイド メニューから [コンテナー] を選択します。

  2. [Edit and deploy](編集してデプロイ) を選択します。

  3. 一覧から simple-hello-world-container コンテナーを選択します。

    設定 アクション
    名前 コンテナー アプリ名を入力します。
    イメージ ソース [Azure Container Registry] を選択します。
    認証 [マネージド ID] を選択します。
    ID [システム割り当て] を選択します。
    レジストリ レジストリの名前を入力します。
    Image イメージの名前を入力します。
    イメージ タグ タグを入力します。

    Screen shot Edit a container with system-assigned managed identity.

    Note

    Azure Container Registry のレジストリで管理資格情報が有効になっていない場合は、警告メッセージが表示され、イメージ名とタグ情報を手動で入力する必要があります。

  4. ページの下部にある [保存] を選択します。

  5. [新しいリビジョンの作成とデプロイ] ページの下部にある [作成] を選択します。

  6. 数分後、[リビジョン管理] ページで [更新] を選択すると、新しいリビジョンが表示されます。

新しいリビジョンが作成され、デプロイされます。 ポータルでは、システム割り当てマネージド ID への acrpull ロールの追加が自動的に試行されます。 ロールが追加されない場合は、手動で追加できます。

ロールが追加されたことを確認するには、コンテナー アプリ ページの [ID] ペインで ID を確認します。

  1. 左側のメニューから [ID] を選択します。
  2. [システム割り当て済み] タブを選択します。
  3. [Azure でのロールの割り当て] を選択します。
  4. acrpull ロールがシステム割り当てマネージド ID に割り当てられていることを確認します。

リソースをクリーンアップする

このアプリケーションを引き続き使用しない場合は、リソース グループを削除することで、Azure Container Apps インスタンスと関連付けられているすべてのサービスを削除できます。

警告

リソース グループを削除すると、グループ内のすべてのリソースが削除されます。 グループ内に他のリソースがある場合は、それらのリソースも削除されます。 リソースを保持したい場合は、コンテナー アプリ インスタンスとコンテナー アプリ環境を削除できます。

  1. [概要] セクションからリソース グループを選択します。
  2. リソース グループ ページの [概要] の上部で [リソース グループの削除] ボタンを選択します。
  3. 確認ダイアログにリソース グループ名を入力します。
  4. [削除] を選択します。
    リソース グループを削除するプロセスが完了するまでに数分かかる場合があります。

この記事では、マネージド ID を使用してプライベート Azure Container Registry リポジトリからイメージをプルするように、Azure CLI と Azure PowerShell を使用してコンテナー アプリを構成する方法について説明します。

前提条件

前提条件 説明
Azure アカウント アクティブなサブスクリプションが含まれる Azure アカウント。 持っていない場合は、無料で作成できます。
Azure CLI Azure CLI を使用している場合は、ローカル コンピューターに Azure CLI をインストールします。
Azure PowerShell PowerShell を使用している場合は、ローカル コンピューターに Azure PowerShell をインストールします。 コマンド Install-Module -Name Az.App を実行して、Az.App モジュールの最新バージョンがインストールされていることを確認します。
Azure Container Registry プルするイメージが含まれているプライベート Azure Container Registry。 「クイック スタート: Azure CLI を使用したプライベート コンテナー レジストリの作成」または「クイック スタート:Azure PowerShell を使用してプライベート コンテナー レジストリを作成する

設定

まず、CLI または PowerShell から Azure にサインインします。 次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。

az login

CLI 用の Azure Container Apps 拡張機能をインストールします。

az extension add --name containerapp --upgrade

現在の拡張機能またはモジュールがインストールされたので、Microsoft.App 名前空間と Microsoft.OperationalInsights プロバイダーを登録したことがない場合は、それらを登録します。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

次に、次の環境変数を設定します。 <PLACEHOLDERS> は、実際の値に置き換えてください。

RESOURCE_GROUP="<YOUR_RESOURCE_GROUP_NAME>"
LOCATION="<YOUR_LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<YOUR_ENVIRONMENT_NAME>"
REGISTRY_NAME="<YOUR_REGISTRY_NAME>"
CONTAINERAPP_NAME="<YOUR_CONTAINERAPP_NAME>"
IMAGE_NAME="<YOUR_IMAGE_NAME>"

リソース グループが既にある場合は、この手順をスキップします。 そうでない場合、リソース グループを作成します。

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

コンテナー アプリ環境の作成

環境が存在しない場合は、次のコマンドを実行します。

環境を作成するために、次のコマンドを実行します。

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION

次のセクションに進んでユーザー割り当てマネージド ID を構成するか、「システム割り当てマネージド ID」のセクションまでスキップします。

ユーザー割り当てマネージド ID

ユーザー割り当てマネージド ID を構成するには、次の手順に従います。

  1. ユーザー割り当てマネージド ID を作成します。
  2. PowerShell を使用している場合は、レジストリに対する acrpull ロールをマネージド ID に割り当てます。 Azure CLI では、この割り当ては自動的に行われます。
  3. ユーザー割り当てマネージド ID を使用して認証するプライベート レジストリからのイメージを使用してコンテナー アプリを作成します。

ユーザー割り当てマネージド ID を作成する

ユーザー割り当てマネージド ID を作成します。 <PLACEHOLDERS> は、実際のマネージド ID の名前に置き換えてください。

IDENTITY="<YOUR_IDENTITY_NAME>"
az identity create \
  --name $IDENTITY \
  --resource-group $RESOURCE_GROUP

ID のリソース ID を取得します。

IDENTITY_ID=`az identity show \
  --name $IDENTITY \
  --resource-group $RESOURCE_GROUP \
  --query id`

コンテナー アプリの作成

この ID を使用して認証するプライベート レジストリからのイメージを使用してコンテナー アプリを作成します。

ID のリソース ID をコピーして、次のコマンドの <IDENTITY_ID> プレースホルダーに貼り付けます。 イメージ タグが latest でない場合は、'latest' をタグに置き換えます。

echo $IDENTITY_ID
az containerapp create \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --user-assigned <IDENTITY_ID> \
  --registry-identity <IDENTITY_ID> \
  --registry-server "$REGISTRY_NAME.azurecr.io" \
  --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME:latest"

クリーンアップ

注意事項

次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのクイックスタートの範囲外のリソースが含まれている場合、それらも削除されます。

az group delete --name $RESOURCE_GROUP

システム割り当てマネージド ID

システム割り当て ID を構成するには、次の手順を実行する必要があります。

  1. パブリック イメージを使用してコンテナー アプリを作成します。
  2. システム割り当てマネージド ID をコンテナー アプリに割り当てます。
  3. プライベート イメージを使用してコンテナー アプリを更新します。

コンテナー アプリの作成

パブリック イメージを使用してコンテナーを作成します。

az containerapp create \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

コンテナー アプリの更新

プライベート コンテナー レジストリからのイメージを使用してコンテナー アプリを更新し、Azure Container Registry のプルを認証するためのシステム割り当て ID を追加します。 イングレス、スケール、Dapr の設定など、コンテナー アプリに必要なその他の設定を含めることもできます。

レジストリ サーバーを設定し、コンテナー アプリでシステム割り当てマネージド ID を有効にします。

az containerapp registry set \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --identity system \
  --server "$REGISTRY_NAME.azurecr.io"
az containerapp update \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME:latest"

クリーンアップ

注意事項

次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのクイックスタートの範囲外のリソースが含まれている場合、それらも削除されます。

az group delete --name $RESOURCE_GROUP

次のステップ