kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azure DevOpSのPATをAPI使って自動作成する

この記事はAzure DevOpsアドベントカレンダー24日目の記事です。

qiita.com

実は去年から考えていたネタでしたが、ようやく重い腰を上げてというかなんというかという感じです😅。PATはPersonalというだけあって個人に紐づくものではあるのですが、Entraに接続しているAzure DevOps OrganizationではREST APIで作成、更新といった管理が可能です。

learn.microsoft.com

github.com

そんなものを含む認証系のサンプルを用意してくれています。ただ、これ全部はいらないのと、もうすぐ廃止になるAzure AD Graphモジュールを使われていたので、Microsoft Graphモジュールに書き直したものをこちらに用意しました。

github.com

まだちょっとだけ足りないところがあるので、完全に自動化はできていません…。具体的にはService Principalを作った後、user_impersonationの追加ができていません…。また調べます。

ここのAzure DevOpsのuser_impersonationを追加してください。

実行は大体ドキュメントに書いていますが、必要なもの。

  • Python 3以降(私は3.12で実行)
  • Flask 2未満など この辺に書かれているもの

私は実行環境作るのがめんどかったので、PyCharm使ってしまいました…。

準備

  1. src/prepare/configure.ps1を実行します。macOSでも動くようにしています。
  2. Service Principalが作成できたらAzure DevOpsのuser_impsersonationを追加してください。
  3. アプリケーションID, テナントID, シークレットキーをapp_config.pyに置き換えてください。
  4. flask run --host localhost --port 5010で実行します。(ドキュメントに書いているリダイレクトURI間違えていますので気をつけて)

※ 5000でないのはmacOSがデフォルトでとっているからです。

実行

http://localhost:5010にアクセスして、sing_inをクリックすると、同意の画面が出るはずです。

同意すると、こんな感じでPAT作成画面が表示されます。

最後に

これはサンプルなのでローカルで動く単なるWebアプリですが、Azure Functions + Automation or Logic Appsなどにして定期的にPATの作成や期限切れの警告を出すとかできたらいいと思います。使ってみてください。