Container App のマネージド ID の未設定

対応する Azure サービスへのアクセスにマネージド ID を使い、Container App の固定認証情報への依存を減らしてください。

説明

Container App が Key Vault や Storage への接続用に固定認証情報を保管すると、漏えいや交換漏れのリスクが生じます。マネージド ID では Azure が認証情報を管理するため、アプリケーションシークレットを配布せずに対応するサービスへ認証できます。マネージド ID がないだけで、認証情報の漏えいが確認されたわけではありません。

想定される影響

  • 環境変数や設定ファイル内の認証情報が漏えいするおそれがあります。
  • 交換や失効の漏れにより、認証情報が長期間悪用される場合があります。
  • アプリケーションごとの権限を追跡し、最小限に保つことが難しくなる場合があります。

対処方法

Container App の identity ブロックに、ライフサイクルと運用目的に合う SystemAssigned または UserAssigned ID を構成してください。接続先に必要な RBAC ロールだけを付与し、アプリケーションがマネージド ID のトークンを使うように設定してください。動作確認後、置き換えたシークレットを削除して失効させてください。

例

Container App にシステム割り当てマネージド ID を追加する例です。参照先の環境とリソースグループ、接続先の権限、アプリケーションのトークン利用設定は別途構成してください。

変更前

hcl
resource "azurerm_container_app" "example" {
  name                         = "example-app"
  container_app_environment_id = azurerm_container_app_environment.example.id
  resource_group_name          = azurerm_resource_group.example.name
  revision_mode                = "Single"

  template {
    container {
      name   = "app"
      image  = "mcr.microsoft.com/k8se/quickstart:latest"
      cpu    = 0.25
      memory = "0.5Gi"
    }
  }
}

変更後

hcl
resource "azurerm_container_app" "example" {
  name                         = "example-app"
  container_app_environment_id = azurerm_container_app_environment.example.id
  resource_group_name          = azurerm_resource_group.example.name
  revision_mode                = "Single"

  identity {
    type = "SystemAssigned"
  }

  template {
    container {
      name   = "app"
      image  = "mcr.microsoft.com/k8se/quickstart:latest"
      cpu    = 0.25
      memory = "0.5Gi"
    }
  }
}

変更後は SystemAssigned ID を有効にします。ID の追加だけで接続先の権限が付与されたり、アプリケーションが自動的にこの認証方式を使ったりするわけではありません。

参考資料