この記事はAzure DevOpsアドベントカレンダー24日目の記事です。
実は去年から考えていたネタでしたが、ようやく重い腰を上げてというかなんというかという感じです😅。PATはPersonal
というだけあって個人に紐づくものではあるのですが、Entraに接続しているAzure DevOps OrganizationではREST APIで作成、更新といった管理が可能です。
そんなものを含む認証系のサンプルを用意してくれています。ただ、これ全部はいらないのと、もうすぐ廃止になるAzure AD Graphモジュールを使われていたので、Microsoft Graphモジュールに書き直したものをこちらに用意しました。
まだちょっとだけ足りないところがあるので、完全に自動化はできていません…。具体的にはService Principalを作った後、user_impersonation
の追加ができていません…。また調べます。
ここのAzure DevOpsのuser_impersonationを追加してください。
実行は大体ドキュメントに書いていますが、必要なもの。
- Python 3以降(私は3.12で実行)
- Flask 2未満など この辺に書かれているもの
私は実行環境作るのがめんどかったので、PyCharm使ってしまいました…。
準備
src/prepare/configure.ps1
を実行します。macOSでも動くようにしています。- Service Principalが作成できたらAzure DevOpsの
user_impsersonation
を追加してください。 - アプリケーションID, テナントID, シークレットキーを
app_config.py
に置き換えてください。 flask run --host localhost --port 5010
で実行します。(ドキュメントに書いているリダイレクトURI間違えていますので気をつけて)
※ 5000でないのはmacOSがデフォルトでとっているからです。
実行
http://localhost:5010
にアクセスして、sing_inをクリックすると、同意の画面が出るはずです。
同意すると、こんな感じでPAT作成画面が表示されます。
最後に
これはサンプルなのでローカルで動く単なるWebアプリですが、Azure Functions + Automation or Logic Appsなどにして定期的にPATの作成や期限切れの警告を出すとかできたらいいと思います。使ってみてください。