Azure 認証について
terraform を使って、Azure リソースをデプロイする際に、まず Azure への認証が必要です。
ユーザーアカウントでの認証と、自動認証 (サービス プリンシパル) の 2 つの手段があります。
- ユーザーのアカウントで認証
- サービスプリンシパルで自動認証
ユーザーのアカウントで認証
この方法は、ユーザーが自分のアカウントでAzure にログインして、実行する手段となります。
- 前提
- Azure Cli (Azure 操作用コマンドライン) がインストール済み
az login # Azure の対話型ログイン
az account list # ログインの確認
az account set --subscription="<SUBSCRIPTION_ID>" # デプロイ先の サブスクリプション を指定
az account show --query "{subscriptionId:id, tenantId:tenantId}" # ログイン結果の確認
# Terraform コマンドは以下で実行できます
サービスプリンシパルで自動認証
この方法は、CI/CD などの自動化パイプラインに使うことができるので、お勧めです。
やり方は、環境変数を設定するだけです。
下記の環境変数を設定したら、terraform は変数の情報を使って認証するので、手動で認証する必要はないです。
※ サービスプリンシパルは変数でのみ認証できます。az login
は tf 認証できません。
- 設定する Terraform 用の環境変数名
- ARM_SUBSCRIPTION_ID
- ARM_CLIENT_ID
- ARM_CLIENT_SECRET
- ARM_TENANT_ID
- ARM_ENVIRONMENT
Linux の設定例:
echo "Setting environment variables for Terraform"
export ARM_SUBSCRIPTION_ID=<your_subscription_id>
export ARM_CLIENT_ID=<your_appId>
export ARM_CLIENT_SECRET=<your_password>
export ARM_TENANT_ID=<your_tenant_id>
# 確認
export
Windows の場合:
REM 現在のターミナルに環境変数を設定する(ターミナル閉じると、消える)
set ARM_SUBSCRIPTION_ID "<your_subscription_id>"
set ARM_CLIENT_ID "<your_appId>"
set ARM_CLIENT_SECRET "<your_password>"
set ARM_TENANT_ID "<your_tenant_id>"
REM ユーザーの環境変数に書き込む、次回のターミナル起動で反映される
REM /M を付けると、システムの方に書き込まれる(管理者権限で起動する必要あり)
setx ARM_SUBSCRIPTION_ID "<your_subscription_id>"
setx ARM_CLIENT_ID "<your_appId>"
setx ARM_CLIENT_SECRET "<your_password>"
setx ARM_TENANT_ID "<your_tenant_id>"
REM 設定確認
set
appendix:Azure cli でサービスプリンシパルを作成
SUBSCRIPTION_ID=<サブスクリプション ID>
az login # Azure の対話型ログイン
az account list # ログインの確認
az account set --subscription="${SUBSCRIPTION_ID}" # デプロイ先の サブスクリプション を指定
# 共同作成者権限のサービスプリンシパルを作成する
az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/${SUBSCRIPTION_ID}"
# 実行結果:
# {
# "appId": "****************************:",
# "displayName": "***********************",
# "password": "**********************************",
# "tenant": "************************************"
# }
## 権限確認
# 作成したサービスプリンシパルでログイン
az login --service-principal -u <appId> -p <password> --tenant <tenant>
az vm list-sizes --location japaneast
Terraform 実行
認証ができたら、以下のことをして、Terraform を実行しましょう
.tf
ファイル作成terraform init
実行terraform plan
実行terraform apply
実行terraform show
実行
コメント