「上腕二頭筋」という意味をもつ Bicep(バイセップ)で Entra ID を管理します。
- ライター:渥美 淳一
- セキュリティアーキテクト。「ID で守り、ID を守る」がセキュリティの本質であり、未来への入り口だと考えている。
目次
Bicep とは?
Bicep は Microsoft Azure の設定をファイルに書いてまとめて管理できる仕組みです。
もともと Azure は、ARM テンプレート(Azure Resource Manager テンプレート)というファイルに設定を書いてまとめて管理できますが、「読み書きが少し難しい」という課題があります。それを、人が読み書きしやすい形に改善したものが Bicep です。
たとえば、Azure にストレージを作る場合を見てみましょう。
左が ARM テンプレート、右が Bicep で書いたファイルです。
何ができるの?
Bicep は Azure の設定(ストレージや仮想マシンなど)を管理できます。
Bicep は無料で使えます。
Microsoft のサポートも受けられます。
さらに Bicep 用 Microsoft Graph 拡張(Bicep から Graph API を使えるようにする機能)により、Entra ID の設定も Bicep ファイルに書いてまとめて管理できるようになりました。Azure も Entra ID も同じ Bicep ファイルで管理できる点がメリットです。
Bicep ファイルは Azure CLI を使って実行できます。
Azure CLI からの命令にしたがって Graph API は Entra ID を操作します。

Bicep でできる Entra ID 設定例
- グループ
- エンタープライズ アプリ
- アプリの登録
- アプリのアクセス権(ロール)の割り当て
- API のアクセス許可
はじめての Bicep
① Bicep ツールをインストールする
Bicep ツール「Microsoft Visual Studio Code」のインストーラー(今回は VSCodeUserSetup-x64-1.110.1.exe ファイル)をダウンロードして実行します。

「完了」をクリックして Visual Studio Code を実行します。

Visual Studio Code が起動します。
これを日本語にします。拡張機能を表示します。
View > Extensions
「Japanese Language Pack」で検索し、「Install」します。

右下に表示される「Change Language and Restart」します。
日本語になりました。
Bicep をインストールします。拡張機能を表示します。
表示(V) > 拡張機能
「Bicep」で検索し、「インストール」します。

② Bicep から Microsoft Graph を使えるようにする
Bicep をインストールしたら「ファイルの作成」をします。

main.bicep ファイルをつくります。以下の内容で保存します。
targetScope = 'tenant'
extension MG
解説
-
targetScope 行
この Bicep ファイルは Entra ID テナントに対して設定する -
extension 行
bicepconfig.json に書いた MG(Bicep 用 Microsoft Graph 拡張)を使う
main.bicep ファイルと同じフォルダーに bicepconfig.json ファイルをつくります。
ファイル(F) > 新しいファイル

bicepconfig.json ファイルを以下の内容で保存します。
{
"extensions": {
"MG": "br:mcr.microsoft.com/bicep/extensions/microsoftgraph/v1.0:1.0.0"
}
}
これで Bicep 用 Microsoft Graph 拡張(MG)を使う準備が整いました。
③ Entra ID でやりたいことを Bicep ファイルに書く
main.bicep ファイルに「Entra ID ユーザーの表示名を出力して」と書いてみます。
targetScope = 'tenant'
extension MG
param UPN string
resource U 'Microsoft.Graph/users@v1.0' existing = { userPrincipalName: UPN }
output displayname string = U.displayName
解説
-
param 行
Bicep ファイル実行時に --parameters で指定した UPN を受け取る -
resource 行
Microsoft Graph 拡張を使い、UPN と一致する既存ユーザーを参照する -
output 行
参照したユーザーの displayName(表示名)を出力する
④ Azure CLI をインストールする
最新の Azure CLI(64 ビット)の MSI をダウンロードして実行します。

インストールされたことをコマンドで確認できます。
PS C:\> az version
{
"azure-cli": "2.84.0",
"azure-cli-core": "2.84.0",
"azure-cli-telemetry": "1.1.0",
"extensions": {}
}
PS C:\>
⑤ Azure CLI で Bicep ファイルを実行する
まず Entra ID 管理者でログインします。
PS C:\> az login
ログインが要求されます。

ログインした管理者にテナントの Owner 権限を与えて再ログインします。
PS C:\> $AOID = az ad signed-in-user show --query id -o tsv
PS C:\> az role assignment create --scope "/" --role "Owner" --assignee-object-id $AOID --assignee-principal-type User
PS C:\> az logout
PS C:\> az login
main.bicep ファイルを実行します。
指定した Entra ID ユーザーの表示名「スズキ イチロー」を確認できます。
PS C:\> cd .\Users\xxxxx\Desktop\Bicep
PS C:\Users\xxxxx\Desktop\Bicep> az deployment tenant create --location japaneast --template-file main.bicep --parameters UPN='ichiro@nosbiz.biz' { (中略) "outputs": { "displayname": { "type": "String", "value": "スズキ イチロー" } }, (中略) }
解説
-
az deployment tenant create
Bicep ファイルを実行するコマンド
(--location が必須です) -
--location japaneast
東日本リージョンを指定して実行 -
--template-file main.bicep
実行したい Bicep ファイル -
--parameters UPN='ichiro@nosbiz.biz'
表示名を確認したいユーザー
(main.bicep ファイルに UPN の値を渡します)
Bicep で Entra ID を管理する
グループを管理する
グループをつくってユーザーを追加する
newgroup.bicep ファイルをつくります。
targetScope = 'tenant'
extension MG
param UPN string param GROUP string
resource U 'Microsoft.Graph/users@v1.0' existing = { userPrincipalName: UPN }
resource G 'Microsoft.Graph/groups@v1.0' = { displayName: GROUP uniqueName: GROUP mailNickname: GROUP mailEnabled: false securityEnabled: true members: { relationships: [ U.id ] } }
output userid string = U.id output groupid string = G.id
解説
-
param 行
Bicep ファイル実行時に --parameters で指定した値を受け取る -
resource 行
Microsoft Graph 拡張を使い、グループをつくって名前を GROUP にし、
UPN と一致する既存ユーザーの id をグループに追加する -
output 行(オプション)
つくったグループと追加したユーザーの id を知りたいとき
newgroup.bicep ファイルを実行します。
PS C:\Users\xxxxx\Desktop\Bicep> az deployment tenant create --location japaneast --template-file newgroup.bicep --parameters UPN='ichiro@nosbiz.biz' GROUP='G1' { (中略) "outputs": { "groupid": { "type": "String", "value": "gggggggg-1234-5678-9000-gggggggggggg" }, "userid": { "type": "String", "value": "uuuuuuuu-1234-5678-9000-uuuuuuuuuuuu" } }, (中略) }
解説
-
az deployment tenant create
Bicep ファイルを実行するコマンド
(--location が必須です) -
--location japaneast
東日本リージョンを指定して実行 -
--template-file newgroup.bicep
実行したい Bicep ファイル -
--parameters UPN='ichiro@nosbiz.biz' GROUP='G1'
追加したいユーザーと作成したいグループ名
(newgroup.bicep ファイルに渡します)
ichiro@nosbiz.biz を追加したグループ「G1」がつくられます。

既存のグループにユーザーを追加する
groupadd.bicep ファイルをつくります。
targetScope = 'tenant'
extension MG
param UPN string param GROUP string
resource U 'Microsoft.Graph/users@v1.0' existing = { userPrincipalName: UPN }
resource G 'Microsoft.Graph/groups@v1.0' existing = { uniqueName: GROUP }
resource ADD 'Microsoft.Graph/groups@v1.0' = { uniqueName: GROUP displayName: G.displayName mailNickname: G.mailNickname mailEnabled: false securityEnabled: true members: { relationships: [ U.id ] } }
解説
-
resource 行
resource G で既存のグループ(GROUP)を参照する
resource ADD で既存のグループ(GROUP)にユーザーを追加する
groupadd.bicep ファイルを実行します。
PS C:\Users\xxxxx\Desktop\Bicep> az deployment tenant create --location japaneast --template-file groupadd.bicep --parameters UPN='jiro@nosbiz.biz' GROUP='G1'
解説
-
--parameters UPN='jiro@nosbiz.biz' GROUP='G1'
追加したいユーザーと既存のグループ名
(groupadd.bicep ファイルに渡します)
jiro@nosbiz.biz が既存のグループ「G1」に追加されます。

グループからユーザーを削除する
az rest コマンドで削除します。
(グループとユーザーの id を指定します)
PS C:\Users\xxxxx\Desktop\Bicep> az rest --method DELETE --url 'https://graph.microsoft.com/v1.0/groups/gggggggg-1234-5678-9000-gggggggggggg/members/uuuuuuuu-1234-5678-9000-uuuuuuuuuuuu/$ref'
ichiro@nosbiz.biz がグループ「G1」から削除されます。

グループを削除する
az rest コマンドで削除します。
(グループの id を指定します)
PS C:\Users\xxxxx\Desktop\Bicep> az rest --method DELETE --url 'https://graph.microsoft.com/v1.0/groups/gggggggg-1234-5678-9000-gggggggggggg'
グループ「G1」が Entra ID から削除されます。

アプリケーションを管理する
アプリへのアクセス権をグループに与える
appgroup.bicep ファイルをつくります。
targetScope = 'tenant'
extension MG
param APP string param ROLE string param GROUP string
resource R 'Microsoft.Graph/appRoleAssignedTo@v1.0' = { resourceId: APP appRoleId: ROLE principalId: GROUP }
解説
-
param 行
Bicep ファイル実行時に --parameters で指定した値を受け取る -
resource 行
Microsoft Graph 拡張を使い、APP の ROLE を GROUP に与える
appgroup.bicep ファイル実行時に --parameters で指定する値を確認します。
(APP、ROLE、GROUP の 3 つ)
エンタープライズアプリ「A1」の id を確認します。
Entra ID を操作する az ad コマンドで確認できます。
sp list はサービスプリンシパル(エンタープライズアプリのこと)を表示します。
PS C:\> az ad sp list --display-name "A1" --query "[0].id"
"aaaaaaaa-1234-5678-9000-aaaaaaaaaaaa"
このアプリのアクセス権(今回は User ロール)の id を確認します。
PS C:\> az ad sp show --id "aaaaaaaa-1234-5678-9000-aaaaaaaaaaaa" --query "appRoles[]" [ { "allowedMemberTypes": [ "User" ], "description": "User", "displayName": "User", "id": "rrrrrrrr-1234-5678-9000-rrrrrrrrrrrr", "isEnabled": true, "origin": "Application", "value": null }
]
このロールを与えたいグループ「G1」の id を確認します。
PS C:\> az ad group list --display-name "G1" --query "[0].id"
"gggggggg-1234-5678-9000-gggggggggggg"
appgroup.bicep ファイルを実行します。
確認した 3 つの id を --parameters で指定します。
PS C:\Users\xxxxx\Desktop\Bicep> az deployment tenant create --location japaneast --template-file appgroup.bicep --parameters APP="aaaaaaaa-1234-5678-9000-aaaaaaaaaaaa" ROLE="rrrrrrrr-1234-5678-9000-rrrrrrrrrrrr" GROUP="gggggggg-1234-5678-9000-gggggggggggg"
A1 アプリの User ロールが G1 グループに与えられます。
G1 グループのユーザーでマイアプリにアクセスします。
https://myapps.microsoft.com
A1 アプリ(のアイコン)が追加されます。
アイコンをクリックすると A1 アプリを利用(シングルサインオン)できます。
アプリのアクセス権をグループからはく奪する
まずアプリ、ロール、グループの id をそれぞれ変数に格納します。
次にそれらを指定してアプリのロール割り当ての id を確認します。
PS C:\> $APP = "aaaaaaaa-1234-5678-9000-aaaaaaaaaaaa" PS C:\> $ROLE = "rrrrrrrr-1234-5678-9000-rrrrrrrrrrrr" PS C:\> $GROUP = "gggggggg-1234-5678-9000-gggggggggggg"
PS C:\> az rest --method get --url "https://graph.microsoft.com/v1.0/servicePrincipals/$APP/appRoleAssignedTo" --query "value[?principalId=='$GROUP' && appRoleId=='$ROLE'].id | [0]" "sF-3VpxRikaedr3D__wEi92zNP6wG1hOruVneAvUBEE"
アプリのロール割り当ての id を指定して削除します。
PS C:\> az rest --method delete --url "https://graph.microsoft.com/v1.0/servicePrincipals/$APP/appRoleAssignedTo/sF-3VpxRikaedr3D__wEi92zNP6wG1hOruVneAvUBEE"
G1 グループに与えられていた A1 アプリの User ロールがはく奪されます。
G1 グループのユーザーでマイアプリにアクセスします。
https://myapps.microsoft.com
A1 アプリ(のアイコン)が削除されます。
つまり A1 アプリを利用(シングルサインオン)できなくなります。
※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。



