概要
Terraformを使用してMicrosoft Azureの環境構築を行う場合、Terraform planコマンドもしくはTerraform Applyコマンドを実行前には、Azureへの認証を済ませておく必要があります。認証せずにコマンドを実行すると下記のようなエラーになります。
Error: building AzureRM Client: obtain subscription(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx) from Azure CLI: parsing json result from the Azure CLI: waiting for the Azure CLI: exit status 1: ERROR: Please run 'az login' to setup account.
TerraformがサポートしているAzure認証方法は現在4種類ありますが、その中でも下記リンク先の認証方法を採用するのが有用だと思いました。
Authenticating using a Service Principal with a Client Secret
以下、上記リンク先を参考に実施した認証設定を備忘録として書いておきます。
設定検証環境
Windows10 Home Edition
設定手順
最初にWindowsのコマンドプロンプトからAzure CLIのaz loginコマンドを実行して、一度Azure環境にログオンします。Azure CLIについては下記のリンク先を参照ください。
Azure CLIドキュメント
ログオン時にはブラウザ認証が必要になりますので、画面の指示に従い対応します。
az login
ブラウザ認証が完了すると、az loginの出力結果がJSON形式でコマンドプロンプトに表示されます。(以下はサンプルです。)
[
{
"cloudName": "AzureCloud",
"homeTenantId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"id": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"isDefault": true,
"managedByTenants": [],
"name": "Azure サブスクリプション 1",
"state": "Enabled",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"user": {
"name": "aaaa@test.com",
"type": "user"
}
}
]
上記出力のうち、この後の設定で必要になる項目をメモしておきます。
- id : SUBSCRIPTION_ID
- tenantid : TENANT_ID
次に、TerraformでAzure環境作成を行う際のロールの設定を行います。今回は自身のAzure環境設定を行うことが目的のため、下記のコマンドで所有者ロールを付与します。SUBSCRIPTION_IDには上記でメモした値を指定します。
az ad sp create-for-rbac --role="Owner" --scopes="/subscriptions/SUBSCRIPTION_ID"
上記コマンド実行後、以下の内容が出力されます。(以下はサンプル)
{
"appId": "xxxxxxx-xxxx-xxxx-xxxxxxxx",
"displayName": "azure-cli-2022-05-16-13-02-26",
"password": "xxxxxxx-xxxxxxxxxxx",
"tenant": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
ここで、下記をメモしておきます。
- appid:CLIENT_ID
- password :CLIENT_SECRET
- tenant : TENANT_ID
ユーザー環境変数の設定
Windowsのユーザー環境変数に下記4つの変数を新規登録します。
- 変数名:ARM_CLIENT_ID、変数値:上記CLIENT_IDの内容
- 変数名:ARM_CLIENT_SECRET、変数値:上記CLIENT_SECRETの内容
- 変数名:ARM_SUBSCRIPTION_ID、変数値:上記SUBSCRIPTION_IDの内容
- 変数名:ARM_TENANT_ID、変数値:上記TENANT_IDの内容
ユーザー環境変数の登録が終わってしまえば、以後は事前のAzure認証を気にすることなく、Terraformを使用したAzure環境構築を実施することが可能です。