
はじめに
こんにちは。ACS事業部の青木です。
このブログでは、HCP TerraformとAzureでOIDC認証連携を行う方法について解説します。
OIDC方式での認証をすることで、デプロイを実行するプリンシパル側でシークレットキーを払い出してHCP Terraform Workspace側に渡すことなく処理を実行することができるようになります。
シークレットキーを使う場合、漏洩した際のセキュリティにおける危険性や、期限切れになった場合のシークレットキーの更新を最低でも2年に一度行わなければいけない手間がありますが、OIDC認証による認証設定を行うことでこれらの懸念点を解消することができます。
早速やってみましょう。
前提条件
以下が対応できていることを前提条件として話を進めていきます。
- HCP TerraformのOrganization環境にログインできること
- 今回作業するHCP Terraformの任意のProjectでWorkspaceが作成されており、そのWorkspaceのAdmin権限を持っていること
- Entra IDでアプリケーション(サービスプリンシパル)の作成権限を持っていること
Azure側(Entra ID)でサービスプリンシパルの作成と、フェデレーション資格情報の追加
まずはアプリの登録(サービスプリンシパルの作成)から行っていきましょう。
EntraIDのメニューより、[アプリの登録]をクリックします。


アプリケーションの登録画面にて、アプリケーションのユーザー向け表示名とアカウントの種類を選択し、[登録]をクリックします。

作成後、作成したアプリの表示名をクリックします。


では、資格情報の追加を行います。
フェデレーション資格情報のシナリオでは、[その他の発行者]を選択しましょう。
ちなみに、GitHub Actionsなどであればプリセットされた設定項目があったりして、設定が簡単だったりします。

続いて、[発行者]、[種類]、[値の入力]です。
| 設定名 | 値 |
|---|---|
| 発行者 | https://app.terraform.io |
| 種類 | 要求照合式 |
| 値の入力 | claims['sub'] matches 'organization: |

run_phaseにはplanやapplyなど、terraformのRunアクションごとに設定を入れることができますが、今回は基本的にどちらも動作させることを可能にするために種類を要求照合式にし、アスタリスクでワイルドカード指定をしています。
また、Organization名やプロジェクト名、ワークスペース名はご自身のものに置き換えて記載してください。
ちょっと解説:値の内容について
種類に「明示的なサブジェクト識別子」と「要求照合式」がありますが、ワイルドカードを使用できるため要求照合式をお勧めします。
また、今回はrun_phaseだけアスタリスクを使用していますが、ワークスペース名やプロジェクト名などでも適宜ワイルドカードは使用できます。これを利用すると、複数のWorkspace環境に対して処理を行う際に共通のプリンシパルを使用する、ということを実現することができます。
例えば「Terraform Workspaceを開発メンバー事に分けつつも、検証の際の権限は同じにしたい」というようなパターンで有用ですので覚えておくとよいと思います。
設定後、任意のフェデレーション資格情報名を入力し、必要であれば説明も加えます。
設定が完了したら、[追加]をクリックしましょう。

フェデレーション資格情報が追加できていることを確認しましょう。

最後に[概要]ペインをクリックし、クライアントIDの値を控えておきましょう。
(赤いマスキングの箇所に表示されています)

HCP Terraform Workspaceで環境変数の追加を行う
続いては、HCP Terraformでvariableを登録します。
設定を行いたいHCP Terraform Workspaceに移動し、[Variables]→[+ Add variable]をクリックして、variableの作成を行います。

設定するパラメータは以下の通りです。
いずれも環境変数での登録となります。terraformのvariableではなく、環境変数として登録するためカテゴリに注意しましょう。
| 設定名 | 値 |
|---|---|
| TFC_AZURE_PROVIDER_AUTH | true |
| TFC_AZURE_RUN_CLIENT_ID | |
| ARM_SUBSCRIPTION_ID | |
| ARM_TENANT_ID | |
以下に登録の際の参考キャプチャを載せます。
センシティブ設定やdescriptionなどは適宜調整してください(今回の例ではクライアントIDのみセンシティブ扱いにしています)




設定が完了したら、最後に一覧で確認しましょう。

設定はこれで完了です!
あとはサービスプリンシパルにAzureリソースの操作権限を付与いただき、HCP Terraform Workspaceと連携しているTerraformのコードを作成いただければシークレットキーを環境変数に持たせることなくデプロイを行うことができます。
おわりに
最後に、参考文献をこちらにまとめます。
簡単に設定が完了しますので、ぜひOIDC認証の設定を行ってみてください。
HCP Terraformでシークレットキーを用いた認証を行っている環境の改善に、本ブログが助けになると幸いです。
ACS事業部のご紹介
私達ACS事業部はクラウドネイティブ技術、Azure AI サービス、Platform Engineering、AI駆動開発支援などを通して、攻めのDX成功に向けた開発者体験・開発生産性の向上・内製化のご支援をしております。
www.ap-com.co.jp
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
www.ap-com.co.jp