【Azure】まだ「システム割り当て」使ってる? App Serviceのシークレット管理を一段レベルアップさせる「ユーザー割り当てマネージドID」の作り方Tech TIPS

Azure App ServiceとKey Vaultを連携させて、秘密の情報を安全に管理するには、「マネージドID」を利用する必要がある。2種類のマネージドIDのうち、より便利な「ユーザー割り当てマネージドID」の作り方や注意点を説明する。

» 2025年08月27日 05時00分 公開
[島田広道デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

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

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


 Azureの「App Service」では、APIキーや暗号化パスワード、電子証明書の秘密鍵といった秘密にすべき情報を「Key Vault」に保存しつつ、App Serviceのデプロイ時に自動でKey Vaultからそれらをインポートできる。これにより、秘密の情報を安全に保存しつつ、情報の更新を自動化するといった運用の効率化も可能になる。

 ただ、App ServiceをKey Vaultと連携させるには、App Service固有のIDである「マネージドID」を有効にする必要がある。

 そのマネージドIDのうち、手軽に始められる「システム割り当てマネージドID」だけを利用している人も多いのではないだろうか? 実は、状況によっては、もう1つの「ユーザー割り当てマネージドID」の方が推奨されることがあるのだ。

 そこで本Tech TIPSでは、このユーザー割り当てマネージドIDの作り方とその注意点について説明する。

■執筆時の各種ツール/APIのバージョン


「システム割り当て」「ユーザー割り当て」という2種類のマネージドID

 「システム割り当てマネージドID」は、App Serviceなどの特定リソースにひも付く固有のIDで、デプロイ後に有効化できる(ARMテンプレート/Bicepでデプロイ時に自動で有効化することは可能)。App Serviceを削除すると、そのシステム割り当てマネージドIDも自動的に削除される。設定項目はほとんどないので、使い始めるのは簡単だ。

 一方、「ユーザー割り当てマネージドID」は、Microsoft Entra IDで事前に作成しておき、それをApp Serviceなどのリソースに割り当てる必要がある。

 機能面での両者の大きな違いは、リソースのデプロイ前あるいはデプロイの最中に利用できるかどうかだ。システム割り当てマネージドIDはデプロイ後にしか利用できない。一方、ユーザー割り当てマネージドIDなら、デプロイ前でもデプロイ中でも他のリソースへのアクセスなどに利用できる。

 また、同じようなリソースを複数作成する場合、システム割り当てマネージドIDだと個々のリソースごとにロール割り当てなどを管理する必要がある。ユーザー割り当てマネージドIDなら、そのIDにロールを割り当てるといった管理をするだけで、ひも付けた複数のリソース全てに設定を反映できるため、管理の手間を省ける。

 両者の使い分けの詳細は、Microsoft Learnの「マネージド ID のベスト プラクティスに関する推奨事項」を参照していただきたい。

 いずれにせよシステム割り当てマネージドIDだけを使っているなら、状況によってはユーザー割り当てマネージドIDに切り替えた方がメリットがある、ということだ。それに、ユーザー割り当てマネージドIDの作成は決して難しくない。

【Azureポータル】ユーザー割り当てマネージドIDを作成するには

 さてここからは、実際にユーザー割り当てマネージドIDを作成する手順について説明する。

 Azureポータルの場合、ユーザー割り当てマネージドIDは以下のように「マネージドID」ページから作成できる。

【Azureポータル】ユーザー割り当てマネージドIDを作成する(1/4) 【Azureポータル】ユーザー割り当てマネージドIDを作成する(1/4)
【Azureポータル】ユーザー割り当てマネージドIDを作成する(2/4) 【Azureポータル】ユーザー割り当てマネージドIDを作成する(2/4)
【Azureポータル】ユーザー割り当てマネージドIDを作成する(3/4) 【Azureポータル】ユーザー割り当てマネージドIDを作成する(3/4)
名前」は24文字以内にする必要がある。「分離スコープ」については、後で説明する。
【Azureポータル】ユーザー割り当てマネージドIDを作成する(4/4) 【Azureポータル】ユーザー割り当てマネージドIDを作成する(4/4)

 注意すべき点としては、リソース名(名前)を24文字以内にしなければならないことが挙げられる(これは他の手段でも同じ)。筆者は、他のリソースで区切り文字に使っているハイフンを取り除いて、英数字のみで指定している。

 ユーザー割り当てマネージドIDに固有の設定項目としては、「分離スコープ」がある。これについては後で説明する。

【Bicep】ユーザー割り当てマネージドIDを作成するには

 ARMテンプレート/Bicepでユーザー割り当てマネージドIDをデプロイする場合、リソース名やリージョン(ロケーション)、タグの他に設定可能な項目はない。そのため、以下のように非常にシンプルなコードで済む。

param resourceName string // ユーザー割り当てマネージドIDのリソース名
param location string = resourceGroup().location

// リソース生成: ユーザー割り当てマネージドID(User Assigned Managed Identity)
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2025-01-31-preview' = {
  name: resourceName
  location: location
  // 分離スコープはAzureポータルかREST APIでしか設定できないので、ここでは未設定
}

【Bicep】ユーザー割り当てマネージドIDを作成する
Microsoftのレファレンス: Microsoft.ManagedIdentity userAssignedIdentities

【PowerShell】ユーザー割り当てマネージドIDを作成するには

 PowerShellの場合、ユーザー割り当てマネージドIDは「New-AzUserAssignedIdentity」コマンドレットで作成できる。

New-AzUserAssignedIdentity -Name <リソース名> -ResourceGroupName <リソースグループ名> -Location <リージョン名>


【CLI】ユーザー割り当てマネージドIDを作成するには

 Azure CLIの場合、ユーザー割り当てマネージドIDは「az identity create」コマンドで作成できる。

az identity create -n <リソース名> -g <リソースグループ名> -l <リージョン名>



セキュリティと耐障害性を向上できる「分離スコープ」とは?

 ユーザー割り当てマネージドIDで注意が必要なのは、「分離スコープ」(Isolation Scope)の設定方法である。分離スコープとは、ユーザー割り当てマネージドIDとその割り当て先のリソースを同じリージョン内に限定する、という機能だ。

 App ServiceとKey Vaultとの連携を例に挙げてみる。あるユーザー割り当てマネージドIDの分離スコープを有効にした場合、そのIDと同じリージョン内にあるApp Serviceだけに割り当てられる(他のリージョンのApp Serviceには割り当てられない)。

 一方、アクセス先であるKey Vaultについては、アクセスさえ許可されていれば、どのリージョンに存在していてもApp Serviceと連携できる。

 分離スコープを有効にすると、複数のリージョンでのID濫用を防止できることから、耐障害性やセキュリティを向上できる、というメリットがある。詳細はMicrosoft Learnの「ユーザー割り当てマネージド ID の分離スコープ」を参照していただきたい。

分離スコープを有効化するには?

 それならば積極的に分離スコープは有効化したいところだ。しかし、分離スコープはデフォルトで無効化されるので、明示的に有効化する必要がある。

 ところが、執筆時点で分離スコープを設定できるのは、次の2種類の方法/タイミングに限られる。

  • Azureポータルでユーザー割り当てマネージドIDを作成する時に設定
  • 作成済みのユーザー割り当てマネージドIDにREST APIで設定

 つまり、作成後にAzureポータルから設定を変更したり、ARMテンプレート/Bicepでデプロイ時に有効化したり、といったことができない。

 Azureポータルで対話的に設定するのは自動化という点で何かと不自由だ。そこで、PowerShellで分離スコープを有効化する方法を紹介しよう。

 といっても、対象のユーザー割り当てマネージドIDの管理が許可されているユーザーアカウントでAzureにサインインした状態で、以下のように「Invoke-AzRestMethod」コマンドレットを実行するだけだ(言うまでもなく、対象と同じテナント/サブスクリプションがデフォルトで選択されている必要がある)。

$ResourceGroupName = '<ユーザー割り当てマネージドIDのリソースグループ名>'
$Name = '<ユーザー割り当てマネージドIDのリソース名>'

$ParamsRestAPI = @{
  ResourceGroupName = $ResourceGroupName
  Name = $Name
  ResourceProviderName = 'Microsoft.ManagedIdentity' # マネージドIDのプロバイダ
  ResourceType = 'userAssignedIdentities' # 種別はユーザー割り当てID
  ApiVersion = '2025-01-31-preview' # APIのバージョン
  Payload = '{
    "properties": {
      "isolationScope": "Regional" # 分離スコープを有効化。「None」なら無効化
    }
  }'
  Method = 'PATCH'
}
Invoke-AzRestMethod @ParamsRestAPI # 上記のパラメーターでREST APIを呼び出し

Get-AzUserAssignedIdentity -ResourceGroupName $ResourceGroupName -Name $Name # 確認

【PowerShell】作成したユーザー割り当てマネージドIDの「分離スコープ」を有効化する
サインイン済みのユーザーアカウントの権限でAPIを呼び出すなら、Invoke-AzRestMethodコマンドレットが簡単だ。

 ARMテンプレート/Bicepなどでユーザー割り当てマネージドIDをデプロイした直後、上記のコードも実行するように記述すれば、分離スコープの有効化も含めて自動化できるだろう。


 作成したユーザー割り当てマネージドIDを利用するには、ロールの割り当てやApp Serviceなどのリソースへのひも付けなどが必要になる。それらについては別途解説したい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

アイティメディアからのお知らせ

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。