広告

Terraform_Azure認証

Authentication

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 実行

コメント

タイトルとURLをコピーしました