別のブログを書いてる時にこの操作が必要になったんですが、そっちで書くと主旨からずれるのでここで書くことにしました。
GitHub Actions で Azure へログインする際、従来は Azure 側で publish profile を使ったり secret をつかったりでしたが、有効期限があるので期限切れになったら更新するという管理が必要でした。
そんな最中 OpenID Connect (OICD) でのログインが昨年サポートされました。
OIDC でのログインにすると、ログインする度に短期の有効期限付きトークンを取得して認証するので、期限切れによる管理が不要になり幸せになります。
ということでやっていきましょう。
Azure Portal での操作
Federated identity credential (フェデレーション ID 資格情報) の作成
Federated identity credential は、Azure AD の App registrations から作成します。
ということで、デプロイなどの操作をしたい リソースがあるサブスクリプションの Azure Portal を開き、Azure AD のリソースを開きます。よくわからない方は検索バーをクリックすれば Azure AD のアイコンがきっとあるでしょう。無ければ検索すれば出てきます。
App registrations をクリック → New registration をクリックします。
Name は適宜入力します。あとで使うので覚えておきましょう。ここでは「sample-federated-identity-credential」としました。 また、Supported account types は一番上の single tenant のを選び、Register ボタンをクリックします。
作成したアプリの画面が開きますので、Certificates & secrets (①) > Federated credentials (②) > Add credential (③) をクリックします。
表示された画面で GitHub の情報を入力します。悩みそうなのは Entity type くらいです。これは大事な部分なので、 こちらのドキュメント でどれにすべきか確認しましょう。 入力したら下部の Add ボタンをクリックして追加します。
最後に GitHub Actions 側の secret に登録する以下の3つの情報を取得します。
- Application (client) ID
- Directory (tenant) ID
- Subscription ID
まずは今開いている app の Overview をクリックし以下の2つをメモしておきます。
- Application (client) ID
- Directory (tenant) ID
最後に Subscription ID ですが、操作したいリソースグループの Overview を開けば見えるので手順は書きません。
Contributor ロールの割り当て
GitHub Actions からデプロイとかの操作をしたいリソース対して、作成した credential に Contributor ロールを割り当てます。今回はリソースグループに割り当てます。そうするとリソースグループの中にあるリソース全てに適用されます。個別のリソースに割り当てることももちろん可能です。
Azure Portal で、操作したいリソースグループを開き Access control (①) → Add (②) → Add role assignment (③) をクリックします。
Role タブが表示されるので Contributor をクリックして Next ボタンをクリックします。
先ほど作成した service principal「sample-federated-identity-credential」をメンバーに追加します。
後は、Review + assign ボタン をクリックして追加します。こんな感じで必要なリソースを操作できる権限を割り当てることができます。
GitHub での操作
Secret の登録
先ほど Azure 側で取得した3つの情報を secret に保存します。
GitHub の repo で Settings (③) をクリック → Secret > Actions (②) をクリック → New repository secret をクリックします。これで1つづ3つの情報を登録します。
今回はこんなキーで登録しました。
GitHub Actions を構成する
GitHub Actions はログインして az コマンドでリソースを見るだけのシンプルな構成にしました。
name: Azure login using OIDC sample on: [push] permissions: id-token: write contents: read jobs: oidc-login: runs-on: ubuntu-latest steps: - name: OIDC Login to Azure uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_FIC_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_FIC_TENANT_ID }} subscription-id: ${{ secrets.AZURE_FIC_SUBSCRIPTION_ID }} - name: run commands run: | az account show az group list -o table
実行すると、GitHub Actions のログでは正常に Azure の情報が取れてることがわかります。
まとめ
OIDC でのログインをすることで、従来の secret の期限切れを意識する必要もなくなり、トークン自体は使ったら捨てる感じなのでセキュアになるので、今後は基本的にこの方法で Azure へログインするのが良いです。
GitHub Actions の azure/login@v1
の細かい構成方法は、以下のドキュメントに書かれていますので、実際に使う際は必ず確認しましょう。