Azure Container Registry の権限範囲の確認

イメージの取得だけを行う主体の Azure Container Registry 権限を制限してください。

説明

イメージを取得するだけのワークロードに公開権限も与えると、侵害された主体がイメージをアップロードしたり、タグを変更したりするおそれがあります。イメージの取得、公開、レジストリ管理に必要な権限を分けてください。AcrPush はイメージの読み書きを許可しますが、レジストリの構成管理権限は付与しません。

想定される影響

  • 不要な書き込み権限でイメージやタグが変更され、改ざんされたイメージがデプロイされるおそれがあります。
  • 侵害されたワークロードが他のデプロイに影響する可能性があります。

対処方法

取得だけが必要な主体には、レジストリの権限モードに合う読み取りロールを付与してください。RBAC Registry Permissions モードでは AcrPull、ABAC を使うモードでは必要なリポジトリに範囲を限定した Container Registry Repository Reader を検討してください。公開・管理用の主体を分離し、他のロール割り当ても含めた実際の権限を確認してください。

例

RBAC Registry Permissions モードでイメージを取得する kubelet ID のロールを比較します。

変更前

hcl
resource "azurerm_role_assignment" "workload" {
  principal_id         = azurerm_kubernetes_cluster.example.kubelet_identity[0].object_id
  role_definition_name = "AcrPush"
  scope                = azurerm_container_registry.example.id
}

AcrPush はイメージの取得と公開を許可します。取得だけを行うワークロードには書き込み権限は不要です。

変更後

hcl
resource "azurerm_role_assignment" "workload" {
  principal_id         = azurerm_kubernetes_cluster.example.kubelet_identity[0].object_id
  role_definition_name = "AcrPull"
  scope                = azurerm_container_registry.example.id
}

この割り当ては AcrPull でイメージの読み取りを許可します。他のロールや認証情報による書き込み権限が残っていないか確認してください。

参考資料