TerraformのAzure認証をマネージドIDを使ってやってみた
TerraformのAzure認証にAzure マネージドID(Azure managed identity)を使う事が出来ます。
Azure Provider: Authenticating using managed identities for Azure resources
今回は公式サイトの情報を参考にTerraformのAzure認証にマネージドIDを利用してリソースグループをデプロイする所までやってみました。
その他にもTerraform初心者が色々やってみた内容を公開しています。
TerraformのAzure認証方法は3種類
TerraformでAzureリソースを扱う場合のAzureの認証処理が必要になります。
このAzureの認証処理にはAzure CLIを使った対話形式とAzureサービスプリンシパルやマネージドIDを使った非対話式があります。CI/CDでの利用等、自動化する際にはサービスプリンシパルやマネージドIDと言った非対話形式のログイン方法を利用します。
実施手順 | |
Azure CLI(Microsoft アカウント)を使用した認証 |
Azure CLIを使用してコマンドラインで認証します。 az loginコマンドで認証します(対話形式(ログイン画面が表示されてログインする形))。 |
Azure サービス プリンシパルを使用した認証 |
Azureサービスプリンシパルを利用してコードの中で非対話形式(自動ログイン)する形式になります。 |
Managed identitiesを使用した認証 |
AzureマネージドIDを利用してコードの中で非対話形式(自動ログイン)する形式になります。 ※テナント内のAzure VMからアクセスする場合にのみ使用可能です。(テナント外の場合はサービスプリンシパルを利用する形になります。) |
TerraformのセットアップやAzure CLI使ったログイン等についてはこちらを参照ください。
TerraformのAzure認証をマネージドIDで行う
マネージドIDで認証を行う為に必要な設定は4つ
必要な設定は4つになります。
-
-
- Terraformを実行する仮想マシンにマネージドIDを割り当てる。(今回はシステム割り当てマネージドIDを利用しています)
- 割り当てたマネージドIDにAzure ロールの割り当てを行う
- provider blockにマネージドIDで権限を割り当てたサブスクリプションID(とテナントID)を記載する
- TerraformでマネージドIDで認証を行うようにprovider blockに追記する
-
※マネージドIDに割り当てたAzureロールの権限がTerraformで実行できる権限になります。
※サブスクリプションIDやテナントIDについては環境変数に指定する方法もあります。
仮想マシンでシステム割り当てマネージドIDを有効化
Windows 10の仮想マシン(VM名:Terraform-Test-VM-01)にシステム割り当てマネージドIDの設定を実施します。
仮想マシンでマネージドID設定 | |
仮想マシンのメニューでIDを選択します。 システム割り当て済みのタブで状態をオンに設定後に保存をクリックします。 |
|
システム割り当てマネージドID有効化の確認メッセージが表示されますのではいを選択します。 これで有効化の設定は完了です。 |
システム割り当てマネージドIDにAzureロール割り当てる
システム割り当てマネージドIDにAzureロールを割り当てます。今回はサブスクリプションに対して共同作成者の権限を付与します。
TerraformでAzureマネージドIDを使って認証するように設定
TerraformでAzureマネージドIDを使って認証するように設定します。
-
- 設定内容
- provider blockにsubscription_idを追加
- このsubscription_idはシステム割り当てマネージドIDで権限付与したサブスクリプションのIDとなります。
- use_msi = trueを追加
- この設定によりマネージドIDを使って認証を行うように指示されます。
- provider blockにsubscription_idを追加
- 設定内容
※別のサブスクリプションIDを割り当てたり記載してない場合は認証エラーになります。
AzureマネージドIDを使う場合の記述例 | |
|
※テナントID(tenant_id)を指定する必要があるとの記載も見かけたのですが、subscription_idだけで認証が通ったので今回はテナントIDは記載していません。必要に応じて追記します。
※テナントIDの確認方法はマイクロソフト公式サイトに記載の通りになります。
マネージドIDで認証を行いAzureリソースグループをデプロイ
terraform init、plan、applyまで実行してみます。applyは-auto-approveオプションを付与して確認メッセージを表示しないようにしています。
認証されてデプロイ出来ている事が確認出来ました。
Azureで複数サブスクリプションを指定する場合のprovider記述例 | |
|
最後に
TerraformでマネージドIDを使ったAzure認証をやってみましたが、設定自体は非常に簡単でした。
他の認証方法にはサービスプリンシパルもありますので継続して色々確認していきたいと思います。
過去のTerraform関連の記事はこちらに記載しております。