Azure Container Registry のロールとアクセス許可

Azure Container Registry サービスは、Azure コンテナー レジストリにさまざまなレベルのアクセス許可を提供する 組み込みの Azure ロール のセットをサポートします。 Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、たとえばコンテナー イメージをプッシュまたはプルするために、レジストリを操作する必要があるユーザー、サービス プリンシパル、またはその他の ID に特定のアクセス許可を割り当てます。 レジストリに対するさまざまな操作権限を細かく設定したカスタム ロールを定義することもできます。

ロール/アクセス許可 Resource Manager へのアクセス レジストリの作成/削除 イメージのプッシュ イメージのプル イメージ データを削除する ポリシーの変更 イメージの署名
所有者 X X X X X X
Contributor X X X X X X
Reader X X
AcrPush X X
AcrPull X
AcrDelete X
AcrImageSigner X

ロールを割り当てる

既存のユーザー、グループ、サービス プリンシパル、またはマネージド ID にロールの割り当てを追加するための手順の概要については、「ロールの割り当てを追加する手順」を参照してください。 Azure portal、Azure CLI、Azure PowerShell、またはその他の Azure ツールを使用できます。

サービス プリンシパルを作成する場合は、コンテナー レジストリなどの Azure リソースへのアクセスとアクセス許可も構成します。 Azure CLI を使用したスクリプトの例については、「 サービス プリンシパルによる Azure Container Registry 認証」を参照してください。

ユーザーとサービスを区別する

アクセス許可が適用されるときのベスト プラクティスは常に、タスクを実行できる範囲で最も限定的なアクセス許可のセットを人またはサービスに提供することです。 以下のアクセス許可セットでは、人およびヘッドレス サービスで使用できる機能のセットが示されています。

CI/CD ソリューション

CI/CD ソリューションから docker build コマンドを自動化するときは、docker push の機能が必要です。 これらのヘッドレス サービス シナリオでは、AcrPush ロールを割り当てることをお勧めします。 このロールでは、さらに範囲の広い共同作成者ロールとは異なり、アカウントによる他のレジストリ操作の実行または Azure Resource Manager へのアクセスは禁止されます。

コンテナー ホスト ノード

同様に、コンテナーを実行するノードでは、AcrPull ロールは必要ですが、閲覧者の機能は必要ないはずです。

Visual Studio Code Docker 拡張機能

Visual Studio Code Docker 拡張機能などのツールでは、使用可能な Azure コンテナー レジストリの一覧を取得するために、追加のリソース プロバイダー アクセスが必要です。 この場合は、閲覧者または共同作成者ロールへのアクセスをユーザーに提供します。 これらのロールでは、docker pulldocker pushaz acr listaz acr build、およびその他の機能が許可されます。

Resource Manager へのアクセス

Azure portal と Azure CLI によるレジストリ管理には、Azure Resource Manager へのアクセスが必要です。 たとえば、az acr list コマンドを使用してレジストリの一覧を取得するには、このアクセス許可セットが必要です。

レジストリの作成と削除

Azure コンテナー レジストリを作成および削除する権限です。

イメージのプッシュ

レジストリに対して、イメージの docker push を行う、または Helm Chart などの別のサポートされている成果物をプッシュする権限です。 承認された ID を使用してレジストリで認証を行う必要があります。

イメージのプル

レジストリから検疫されていないイメージの docker pull を行う、または Helm Chart などの別のサポートされている成果物をプルする権限です。 承認された ID を使用してレジストリで認証を行う必要があります。

イメージ データを削除する

レジストリから、コンテナー イメージを削除する機能、または Helm チャートなどの他のサポートされている成果物を削除する機能。

ポリシーの変更

レジストリでポリシーを構成する権限です。 ポリシーには、イメージの削除、検疫の有効化、イメージの署名が含まれます。

イメージの署名

イメージに署名する権限であり、通常は、サービス プリンシパルを使用する自動化されたプロセスに割り当てられます。 通常、このアクセス許可は、レジストリへの信頼できるイメージのプッシュを許可するイメージのプッシュと組み合わされます。 詳細については、「Azure Container Registry におけるコンテンツの信頼」をご覧ください。

カスタム ロール

他の Azure リソースと同様に、Azure Container Registry に対するきめ細かいアクセス許可を持つカスタムロールを作成できます。 次に、ユーザー、サービスプリンシパル、またはレジストリと対話する必要がある他の ID にカスタムロールを割り当てます。

どのアクセス許可をカスタムロールに適用するか決めるには、Microsoft.containerregistry アクション の一覧を参照し、組み込みの ACR ロール で許可されているアクションを確認するか、次のコマンドを実行します:

az provider operation show --namespace Microsoft.ContainerRegistry

カスタムロールを定義するには、 カスタムロールを作成する手順 を参照してください。

Note

Azure Resource Manager プライベート リンクを使用して構成されたテナント内の Azure Container Registry では、カスタム ロールで Microsoft.ContainerRegistry/*/readMicrosoft.ContainerRegistry/registries/*/write などのワイルドカード アクションを使用することがサポートされており、一致するすべてのアクションへのアクセスが許可されます。 ARM プライベート リンクのないテナントで、必要なすべてのレジストリ アクションをカスタム ロールで個別に指定します。

例:イメージをインポートするためのカスタム ロール

たとえば、次の JSON では、レジストリへのイメージ インポートを許可するカスタム ロールの最小アクションが定義されます。

{
   "assignableScopes": [
     "/subscriptions/<optional, but you can limit the visibility to one or more subscriptions>"
   ],
   "description": "Can import images to registry",
   "Name": "AcrImport",
   "permissions": [
     {
       "actions": [
         "Microsoft.ContainerRegistry/registries/push/write",
         "Microsoft.ContainerRegistry/registries/pull/read",
         "Microsoft.ContainerRegistry/registries/read",
         "Microsoft.ContainerRegistry/registries/importImage/action"
       ],
       "dataActions": [],
       "notActions": [],
       "notDataActions": []
     }
   ],
   "roleType": "CustomRole"
 }

JSON 記述を使用してカスタム ロールを作成または更新するには、Azure CLIAzure Resource Manager テンプレートAzure PowerShell、その他の Azure ツールを使用します。 組み込み Azure ロールのロール割り当て管理と同じ方法でカスタム ロールのロール割り当てを追加したり、削除したりします。

次のステップ