7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TISAdvent Calendar 2021

Day 22

【Azure】TerraformでAzureADユーザを作成する際のパスワードの扱い

Last updated at Posted at 2021-12-22

概要

TerraformでAzureADユーザを作成する際に、Terraformコード内にAzureADユーザに設定するパスワードを記載する必要があります。ただし、Terraformコード内にパスワードを平文で記載してしまうと、コード管理するリポジトリ内にパスワード情報が含まれてしまいます。

AWSの場合は以下の参考URLのように、GnuPGを用いてIAMユーザのパスワードやシークレットアクセスキーを暗号化する方法があります。

参考URL: https://qiita.com/takkii1010/items/eef57e29be6cb7061d95

しかし、Azureでは同様の手法を使うことができません。
そこで、Terraformのrandomプロバイダーを用いて、Terraformコード内にパスワード情報を含まない方法で実装しました。

Terraformで変数にシークレットを扱いたい場合の一般的な方法

一般的にパスワード等のシークレットをTerraformの変数で扱いたい場合は、環境変数や外部ファイルに記載してTerraformコードを実行する際に読み込みます。
その際に外部ファイルは.gitignoreで指定してリポジトリに登録されないようにします。

この方法の場合、Terraformコードにはパスワード情報が含まれません。
ただし、環境変数やパスワード情報が記載された外部ファイルを管理する必要があり、情報漏洩のリスクや管理の手間が増えます。

今回実装した方法について

初期パスワードにランダムで生成した文字列を割り当て、初回ログイン時にパスワード変更を強制させる方法です。

ランダムに生成したパスワードはtfstateもしくはTerraform実行時のOutputに出力することで確認できます。ここで生成されたパスワードを用いてログインし、パスワード変更することでtfstateにもTerraformコードにも有効なパスワードが含まれません。

randomプロバイダーを用いて生成するランダムな文字列は、Azureのパスワードポリシーに準拠できるように、大文字、小文字、数字、特殊文字のそれぞれが少なくとも1文字以上含まれるように設定しています。
特殊文字を使用する際は、デフォルトだとAzureで使用できない文字が含まれているため、override_specialというパラメータで使用する特殊文字を再定義する必要があります。

具体的な実装方法について

ここでは、初期パスワードをランダムな文字列で設定し、初回ログイン時にパスワード変更を強制させる具体的な実装方法について記載します。

バージョン情報

実装する際に使用した各バージョンは以下の通りです。

  • Terraform: 0.15.4
  • hashicorp/random: 3.1.0
  • hashicorp/azuread: 1.5.0

Terraformコード

random_passwordというリソースを用いて、任意の文字数や文字を指定したランダムな文字列が生成できます。
ここで生成した文字列をazuread_userpasswordに設定することで、ランダムなパスワードが割り当てられたAzureADユーザを作成できます。

また、azuread_userforce_password_changeを有効化することで、作成されたAzureADユーザの初回ログイン時に強制的にパスワード変更をさせることができます。

resource "random_password" "password" {
  length      = 15
  number      = true
  lower       = true
  upper       = true
  special     = true
  min_numeric = 1
  min_lower   = 1
  min_upper   = 1
  min_special = 1
  override_special = "!@#$%&*()-_=+[]{}:?"
}

resource "azuread_user" "user" {
  user_principal_name     = "sample.user@example.com"
  display_name            = "sample.user"
  password                = random_password.password.result
  force_password_change   = true
  usage_location          = "JP"
}

length
生成するランダムな文字列の文字数を指定します。
AzureADパスワードポリシーでは8文字以上となっていますが、ここではBuilding a Digital Defense with Passwordsに従ってパスワードを15文字で設定しました。

number/lower/upper/special
AzureADパスワードポリシーでは大文字、小文字、数字、特殊文字のうち3種類以上を使用することが求められるため、上記パラメータのうち少なくとも3つをtrueに設定する必要があります。

override_special
パスワードに使用できる特殊文字を設定します。
specialtrueに設定する場合、デフォルトではAzureADで使用できない特殊文字が含まれるため、override_specialで上書きする必要があります。
AzureADで使用できる特殊文字についてはAzureADパスワードポリシーを参照してください。

force_password_change
このパラメーターをtrueに設定することで、初回ログイン時のパスワード変更を有効化できます。

その他のパラメーターの詳細については、以下のTerraform公式ドキュメントをご参照下さい。

まとめ

TerraformでAzureADユーザを作成する場合のパスワードの扱いにはいくつかの方法があると思いますが、今回はランダムに生成した文字列をAzureADユーザに割り当て、初回ログイン時にパスワードを強制変更させる方法について記載しました。

Terraformを用いてAzureADのアカウントを管理する場合は参考にしてください。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?