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

Logic App Standard の対応する接続でマネージド ID を使い、ワークフローが管理するシークレットを減らしてください。

説明

Logic App Standard のワークフローが他の Azure サービスへのアクセスキーやクライアントシークレットを保存すると、漏えいや交換失敗のリスクが生じます。マネージド ID を使うと、対応するコネクターやアクションでシークレットを直接保管せずに認証できます。ID を追加しても、すべての接続が自動的に切り替わるわけではありません。

想定される影響

  • ワークフローやアプリケーション設定に長期の認証情報が露出するおそれがあります。
  • シークレットの交換失敗により、サービス停止や不正アクセスが発生する場合があります。
  • ワークフローごとの最小権限とアクセス履歴を一貫して管理しにくくなる場合があります。

対処方法

Logic App Standard に運用目的に合う identity を構成し、マネージド ID 認証に対応する接続とアクションで実際に使用するよう設定してください。ユーザー割り当て ID には identity_ids を指定し、接続先に必要な権限だけを付与してください。各接続をテストしてから、置き換えたシークレットを削除して失効させてください。

例

Logic App Standard にシステム割り当てマネージド ID を追加する例です。参照するプランとストレージ、コネクター、接続先の権限は別途構成してください。

変更前

hcl
resource "azurerm_logic_app_standard" "example" {
  name                       = "example-logic-app"
  location                   = azurerm_resource_group.example.location
  resource_group_name        = azurerm_resource_group.example.name
  app_service_plan_id        = azurerm_service_plan.example.id
  storage_account_name       = azurerm_storage_account.example.name
  storage_account_access_key = azurerm_storage_account.example.primary_access_key
}

変更後

hcl
resource "azurerm_logic_app_standard" "example" {
  name                       = "example-logic-app"
  location                   = azurerm_resource_group.example.location
  resource_group_name        = azurerm_resource_group.example.name
  app_service_plan_id        = azurerm_service_plan.example.id
  storage_account_name       = azurerm_storage_account.example.name
  storage_account_access_key = azurerm_storage_account.example.primary_access_key

  identity {
    type = "SystemAssigned"
  }
}

変更後は SystemAssigned ID を追加しますが、例の storage_account_access_key は引き続き使用します。マネージド ID の追加だけで、ストレージキーやすべてのコネクターのシークレットが削除されるわけではありません。

参考資料