Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Microsoft Entra ID 認証 / サービスプリンシパル / シークレット / 証...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Masahiko Ebisuda
January 03, 2025
Technology
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Microsoft Entra ID 認証 / サービスプリンシパル / シークレット / 証明書 / マネージドID / Azure外でもマネージドID
Youtubeでの解説はこちら。
https://www.youtube.com/live/-M_MgOC9fmA
Masahiko Ebisuda
January 03, 2025
More Decks by Masahiko Ebisuda
See All by Masahiko Ebisuda
AI時代の「本当の」ハイブリッドクラウド — エージェントが実現した、あの頃の夢
ebibibi
0
190
ローカルLLMでクラウドアプリもAI使い放題_NVIDIA DGX Spark × Azure ハイブリッド構成
ebibibi
0
200
ADに依存しないクラスタの世界へ_On-PremからAzureLocalまで_前半_.pdf
ebibibi
0
140
ファイルサーバー運用の新時代!Azure FilesとArc拡張の最前線
ebibibi
1
270
ハイブリッドクラウド研究会第63回勉強会 / ClaudeCode×Azure, GeminiCLI×Azure
ebibibi
1
140
AIもハイブリッドにできる?!ローカルLLMとクラウドの組み合わせの可能性!
ebibibi
0
250
AIエージェンとはAzureインフラも構築できるのか?
ebibibi
0
260
もうVPNは古い? VPNを使わずに オンプレサーバーを 管理する手法あれこれ
ebibibi
0
300
WSUSが非推奨に!? Windowsの更新管理を改めて勉強する!
ebibibi
0
2.2k
Other Decks in Technology
See All in Technology
手塩にかけりゃいいってもんじゃない
ming_ayami
0
240
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
290
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
130
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
0
160
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
170
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
9.7k
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
1.2k
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
380
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
4
1.2k
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
2.2k
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1k
失敗を資産に変えるClaude Code
shinyasaita
0
290
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
Google's AI Overviews - The New Search
badams
0
1k
Crafting Experiences
bethany
1
170
A better future with KSS
kneath
240
18k
The Curious Case for Waylosing
cassininazir
1
380
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
What's in a price? How to price your products and services
michaelherold
247
13k
Why Our Code Smells
bkeepers
PRO
340
58k
Transcript
Microsoft Entra ID認証 サービスプリンシパル シークレット / 証明書 マネージドID Azure外でもマネージドID @ebi
Masahiko Ebisuda
日本ビジネスシステムズ株式会社 胡田 昌彦(えびすだ まさひこ) Youtube https://youtube.com/@ebibibi 自己紹介 こんな方にオススメ! 企業の情報システム部で働く方
一般ユーザーだけど、コンピューターに興味 があって、もっと詳しくなりたい方 Windows, Azure, M365等のMicrosoft 関連技術に興味がある方 チャンネル登録よろしくお願いします!
None
None
None
None
None
None
None
最終的にやりたいことは 「トークン」を取得したうえで 「API」を叩くことです ※ポータルからの操作でもコマンド操作でもアプリケーションでの操作でも 最後の最後はトークン付きでAPIがたたかれています
何を言っているのかわからない? まずは実際にやってみましょう! Resource Groups - Create Or Update - REST
API (Azure Resource Management) | Microsoft Docs https://docs.microsoft.com/ja- jp/rest/api/resources/resource-groups/create-or-update
None
トークンを https://jwt.io/ でデコードしてみましょう
トークンさえ入手できればよい それをAPIに投げればよい
誰がどうやって トークンを取得するのか?
誰がどうやってトークンを取得するのか? 様々なバリエーションがある Microsoft ID プラットフォームの認証フローとアプリのシナ リオ - Microsoft Entra |
Microsoft Docs https://docs.microsoft.com/ja-jp/azure/active- directory/develop/authentication-flows-app- scenarios#scenarios-and-supported-authentication- flows ※日本語版は誤植が過去あったので注意)
誰が ユーザープリンシパル サービスプリンシパル マネージドID どうやって 対話操作
資格情報 他にも色々あるけどまずはこれだけわかれば 「自動化」程度なら困らない(と思う)
基本の基本 ユーザーが対話的に認証する
誰が ユーザープリンシパル サービスプリンシパル マネージドID どうやって 対話操作
資格情報
サービス ユーザープリンシパルが対話操作でトー クンを取得するパターン
対話操作 サービス ユーザープリンシパルが対話操作でトー クンを取得するパターン
対話操作 トークン取得 サービス ユーザープリンシパルが対話操作でトー クンを取得するパターン
対話操作 トークン取得 サービス ユーザープリンシパルが対話操作でトー クンを取得するパターン
PowerShell # 認証する Connect-AzAccount # 現在のコンテキストを確認する(認証したID,AADテナント,対象のサブスクリプション等) Get-AzContext # 対象サブスクリプションが適切でない場合には切り替える #Get-AzSubscription
#Select-AzSubscription -Subscription <SubscriptionIDを入力> # トークンが取得できることを確認する Get-AzAccessToken $token = (Get-AzAccessToken).token # リソースグループを作成する $subscriptionId = (Get-AzContext).Subscription.Id $resourceGroupName = "testrg1" $url = "https://management.azure.com/subscriptions/${subscriptionId}/resourcegroups/${resourceGroupName}?api- version=2021-04-01" $headers = @{ "Authorization" = "Bearer $token" "Content-type" = "application/json" } $body = '{location:"JapanEast"}' Invoke-RestMethod -Method PUT -Uri $url -Headers $headers -Body $body
None
専用のコマンドレットが存在 ※認証済みなら裏でトークンを取得して APIに投げてくれる
PowerShell # 認証する Connect-AzAccount # トークンを取得する $token = (Get-AzAccessToken).token #
リソースグループを作成する $subscriptionId = (Get-AzContext).Subscription.Id $resourceGroupName = "testrg1" $url = "https://management.azure.com/subscriptions/${subscriptionId}/resourcegroups/$ {resourceGroupName}?api-version=2021-04-01" $headers = @{ "Authorization" = "Bearer $token" "Content-type" = "application/json" } $body = '{location:"JapanEast"}' Invoke-RestMethod -Method PUT -Uri $url -Headers $headers -Body $body
PowerShell # 認証する Connect-AzAccount # リソースグループを作成する New-AzResourceGroup -Name testrg2 -Location
JapanEast
PowerShell # 認証する Connect-AzAccount # リソースグループを作成する New-AzResourceGroup -Name testrg2 -Location
JapanEast 対話的な認証では自動化できない!
サービスプリンシパルを使う
誰が ユーザープリンシパル サービスプリンシパル マネージドID どうやって 対話操作
資格情報
サービスプリンシパルが資格情報でトー クンを取得するパターン サービス
サービスプリンシパルが資格情報でトー クンを取得するパターン 資格情報 サービス
サービスプリンシパルが資格情報でトー クンを取得するパターン 資格情報 トークン取得 サービス
サービスプリンシパルが資格情報でトー クンを取得するパターン 資格情報 トークン取得 サービス
サービスプリンシパル / パスワードベースの認証 1. AADにアプリケーションを登録しサービスプリンシパルを作成する - アプリケーション - サービスプリンシパル 2.
サービスプリンシパルにRBACで権限を付与する 3. シークレットを作成する 4. PowerShellでサービスプリンシパルとして認証する PowerShell $applicationId = "" $clientSecret = "" $tenantId = "" $securedSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential($applicationId, $securedSecret) Connect-AzAccount -ServicePrincipal -Tenant $tenantId -Credential $creds Get-AzContext Get-AzAccessToken New-AzResourceGroup -Name testrg3 -Location JapanEast
サービスプリンシパル / パスワードベースの認証 1. AADにアプリケーションを登録しサービスプリンシパルを作成する - アプリケーション - サービスプリンシパル 2.
サービスプリンシパルにRBACで権限を付与する 3. シークレットを作成する 4. PowerShellでサービスプリンシパルとして認証する PowerShell $applicationId = "" $clientSecret = "" $tenantId = "" $securedSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential($applicationId, $securedSecret) Connect-AzAccount -ServicePrincipal -Tenant $tenantId -Credential $creds Get-AzContext Get-AzAccessToken New-AzResourceGroup -Name testrg3 -Location JapanEast シークレットを生で書くのはダメ!
サービスプリンシパル / 証明書ベースの認証 1. AADにアプリケーションを登録しサービスプリンシパルを作成する - アプリケーション - サービスプリンシパル 2.
サービスプリンシパルにRBACで権限を付与する 3. (どこで作成してもいいが、今回はローカルのWindows上で)証明書を生成する 4. サービスプリンシパルに証明書をアップロードする 5. PowerShellでサービスプリンシパルとして認証する PowerShell $applicationId = "" $tenantId = "" # 証明書作成 New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" ` -Subject "CN=CertforSP" -KeySpec KeyExchange $Thumbprint = (Get-ChildItem cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq "CN=CertforSP" })[0].Thumbprint # 認証 Connect-AzAccount -ServicePrincipal -CertificateThumbprint $Thumbprint ` -ApplicationId $applicationId -TenantId $tenantId Get-AzContext Get-AzAccessToken New-AzResourceGroup -Name testrg4 -Location JapanEast
サービスプリンシパル / 証明書ベースの認証 1. AADにアプリケーションを登録しサービスプリンシパルを作成する - アプリケーション - サービスプリンシパル 2.
サービスプリンシパルにRBACで権限を付与する 3. (どこで作成してもいいが、今回はローカルのWindows上で)証明書を生成する 4. サービスプリンシパルに証明書をアップロードする 5. PowerShellでサービスプリンシパルとして認証する PowerShell $applicationId = "" $tenantId = "" # 証明書作成 New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" ` -Subject "CN=CertforSP" -KeySpec KeyExchange $Thumbprint = (Get-ChildItem cert:\CurrentUser\My\ | Where-Object {$_.Subject -eq "CN=CertforSP" })[0].Thumbprint # 認証 Connect-AzAccount -ServicePrincipal -CertificateThumbprint $Thumbprint ` -ApplicationId $applicationId -TenantId $tenantId Get-AzContext Get-AzAccessToken New-AzResourceGroup -Name testrg4 -Location JapanEast 証明書の管理がめんどくさい!
None
None
誰が ユーザープリンシパル サービスプリンシパル マネージドID どうやって 対話操作
資格情報
Azure上のリソースに を用意してくれる
Azure VM上でマネージドIDのアクセストー クンを取得する Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oaut h2/token?api-version=2018-02- 01&resource=https%3A%2F%2Fmanagement.azure.com %2F’ `
-Headers @{Metadata=“true”} 169.254.169.254 というIPアドレスからトークンが取得できる! マネージドIDがONであれば何もしなくてもいきなりトークンが取れる!
None
None
How managed identities for Azure resources work with Azure virtual
machines - Managed identities for Azure resources | Microsoft Learn https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-managed-identities-work-vm
Microsoft Entra IDにサー ビスプリンシパルを作成 証明書作成、登録、更新 トークン取得のProxy
PowerShell # 認証する Connect-AzAccount # リソースグループを作成する New-AzResourceGroup -Name testrg2 -Location
JapanEast 対話的な認証では自動化できない!
PowerShell # 認証する Connect-AzAccount -Identity # リソースグループを作成する New-AzResourceGroup -Name testrg2
-Location JapanEast パスワードも証明書も必要ない! 超簡単!
None
None
None
None
None
None
None
None
None
None
None
None
IMDS_ENDPOINT= http://localhost:40342 IDENTITY_ENDPOINT= http://localhost:40342/metadata/identity/oauth2/token
None
PowerShell # 認証する Connect-AzAccount -Identity # リソースグループを作成する New-AzResourceGroup -Name testrg2
-Location JapanEast パスワードも証明書も必要ない! 超簡単!
ファイルにアクセス出来ない ケースがあるので注意 ※原因知ってる人いたら教えてください。バグ?
None
None
None
None
None
None
None