【Bicep入門 #6】サービスプリンシパルの作成とGitHub Repoへの登録
この記事の内容
- Bicepデプロイ用のテンプレートリポジトリを活用してGitHub Actionsを有効化する手順を解説します
- GitHub ActionsからAzure環境へデプロイするために必要なサービスプリンシパルを作成します
- サブスクリプションレベルで共同作業者(Contributor)権限を付与する方法を説明します
- サービスプリンシパルのクライアントID・クライアントシークレット・サブスクリプションID・テナントIDをGitHubリポジトリのシークレットに登録します
テンプレートリポジトリの利用とGitHub Actionsの有効化
今回はBicep × GitHub Actionsのサンプルが含まれたテンプレートリポジトリを使用します。このリポジトリには開発コンテナの設定や、Azure CLIを用いたデプロイ・検証用のワークフローファイルがあらかじめ用意されています。
「Use this template」からご自身のリポジトリとして作成することで、すぐに試せる環境が整います。リポジトリはパブリックとして作成し、テンプレートから生成します。
リポジトリを作成したら、GitHub ActionsタブからActionsを有効化します。サンプルのワークフローには以下のような処理が含まれています。
- Azure CLIのセットアップ(
azコマンド) - Bicepの設定・検証(
az bicepコマンド) - Bicepテンプレートのデプロイ
ただし、権限(クレデンシャル)がないとGitHub ActionsからAzureへの接続はできません。次のステップでその権限のもとになるサービスプリンシパルを作成します。
サービスプリンシパルの作成
GitHub ActionsからAzure環境にアクセスするためには、サービスプリンシパルを作成し、そのサービスプリンシパルにサブスクリプションに対する権限を付与する必要があります。
Azureポータルからアプリ登録を行う
今回はAzureポータルを使って操作します。「アプリの登録」から新規登録を行います。
- Azureポータルを開く
- Microsoft Entra ID → アプリの登録 へ移動
- 「新規登録」をクリック
- アプリケーション名を入力(例:
github-actions) - リダイレクトURIは設定不要のまま「登録」をクリック
登録後、以下の情報をメモしておきます。
- クライアントID(アプリケーション ID)
- テナントID(ディレクトリ ID)
サブスクリプションへの権限付与
作成したサービスプリンシパルに対して、AzureサブスクリプションレベルでContributor(共同作業者)ロールを割り当てます。
- Azureポータルで サブスクリプション を開く
- 対象のサブスクリプションを選択
- アクセス制御(IAM) → ロールの割り当ての追加 をクリック
- ロール:**共同作業者(Contributor)**を選択
- メンバーの選択で「ユーザー、グループ、またはサービスプリンシパル」を選択し、先ほど作成したアプリ(例:
github-actions)を追加 - 「保存」をクリック
これにより、作成したサービスプリンシパルがサブスクリプションに対してリソース操作の権限を持つ状態になります。
クライアントシークレットの作成
GitHub ActionsからAzureにログインするには、クライアントシークレット(パスワードに相当するもの)が必要です。
- 先ほど登録したアプリの画面に戻る
- 証明書とシークレット → 新しいクライアントシークレット をクリック
- 説明を入力して「追加」をクリック
- 表示されたシークレットの値をコピーしておく(この画面を閉じると二度と表示されません)
GitHubリポジトリへのシークレット登録
GitHub ActionsのワークフローではAzureへのログインに以下の4つの情報を使用します。
| 項目 | 取得元 |
|---|---|
clientId | アプリの登録 → クライアントID |
clientSecret | 証明書とシークレット → 先ほど作成した値 |
subscriptionId | サブスクリプション画面 |
tenantId | アプリの登録 → ディレクトリID |
これらをGitHubリポジトリのシークレットとして登録します。
- GitHubリポジトリの Settings → Secrets and variables → Actions を開く
- 「New repository secret」 をクリック
- シークレット名(例:
AZURE_CREDENTIALS)を入力 - 以下の形式でJSONとして値を貼り付ける
{
"clientId": "<クライアントID>",
"clientSecret": "<クライアントシークレット>",
"subscriptionId": "<サブスクリプションID>",
"tenantId": "<テナントID>"
}
- 「Add secret」ボタンをクリック
リポジトリ単位でシークレットを管理できるため、複数のプロジェクトで異なる権限を使い分けることも可能です。
まとめ
今回はBicep × GitHub Actionsを使ったAzureデプロイに向けて、サービスプリンシパルの作成からGitHubリポジトリへのシークレット登録までの手順を解説しました。
- テンプレートリポジトリを活用すると、GitHub Actionsのサンプルワークフローがすぐに利用可能です
- Azureポータルのアプリの登録からサービスプリンシパルを作成し、サブスクリプションにContributorロールを付与します
- クライアントID・クライアントシークレット・サブスクリプションID・テナントIDの4つをGitHubリポジトリのシークレットとして登録することで、GitHub ActionsからAzure環境への認証が可能になります
次回はこの設定を使って、実際にGitHub Actions経由でBicepのデプロイを実行する手順を紹介します。