概要
terraformでIAMユーザーを作成&管理するように設定したかったので調べた内容をメモしておく。
前提条件
- windows10 (macOSでもいけると思う)
- Git for windows (git bashを使う -> macであればターミナル)
- Docker Toolbox ( Docker for mac )
GPG鍵 - GNU Privacy Guard
アクセスキーを作成するのに必要なため、作成しておきます。
※ 今回はwindows環境なのでgit for windows
に付属されているGit Bash
で作業します。
GPG鍵を作成する
下記のコマンドで新規にGPG鍵を作成する
$ gpg --gen-key
Real name: app-user <- 識別する名前を入力(任意)
Email address: hoge@example.com <- メールアドレスを入力(任意)
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O <- 「O」を入力してEnterキーを押す
※ $ gpg --full-generate-key
というコマンドもあります
GPG鍵を確認する
作成した鍵を下記のコマンドで確認する
$ gpg --list-keys
GPG鍵をファイルに出力する
$ gpg -o ./app-user.public.gpg --export app-user
$ gpg -o ./app-user.private.gpg --export-secret-key app-user
※ app-user
の部分は作成時に指定した名前にします
公開鍵をBase64エンコードする
公開鍵をBase64エンコードする必要があるようです。
作成した公開鍵をエンコードし、改行を取り除きファイルに出力しておきます。
$ cat app-user.public.gpg | base64 | tr -d '\n' > app-user.public.gpg.base64
ここで作成した文字列をterraformで使うのでコピーしておく。
$ cat app-user.public.gpg.base64
mQENB5Tdm6wBCADXaA5u*******************************************************
...
*************************************************************aF3KW4LXw=
作成したGPG鍵をどこかに保存して削除しておく。
rm -f app-user.public.gpg
rm -f app-user.private.gpg
※ 復号化する際などに使うので大切に保管しておく
terraformの作業について
dockerコンテナでterraformコマンドが使える環境を作成します。
ここからは、terraformに関する作業になります。
terraform環境構築
下記のようなファイルを作成します。
opt
├ docker
│ └ terraform
│ ├ .aws
│ │ ├ config.default
│ │ └ credentials.default
│ ├ Dockerfile
│ └ init.sh
├ src
│ └ main.tf
└ docker-compose.yml
※ 本題の説明のみにしたいので、解説は省略します。
( 構築方法は、「 Qiita - dockerでterraform環境を作る 」を参照ください )
main.tfを作成する
下記の内容にて作成します。
※ pgp_keyの値にBase64エンコードした公開鍵の文字列
を挿入する
# GPG鍵
variable "pgp_key" {
default = "mQENB5******* ... ******LXw="
}
# IAMユーザー
resource "aws_iam_user" "AppUser" {
name = "app-user"
path = "/system/"
}
# アクセスキー
resource "aws_iam_access_key" "AppUser" {
user = "${aws_iam_user.AppUser.name}"
pgp_key = "${var.pgp_key}"
}
# シークレットキーを出力する
output "app_user_secret" {
value = "${aws_iam_access_key.AppUser.encrypted_secret}"
}
dockerコンテナ起動
下記コマンドにてterraformコンテナを起動する。
$ docker-compose run --rm terraform bash
terraform実行
dockerコンテナ内で下記コマンドを実行し、terraformを実行します。
$ terraform init
$ terraform plan
$ terraform apply
生成されたシークレットキーを取得します。
$ terraform output app_user_secret
wcBMA********* ... **********wFAA==
※ gpgコマンドが使える環境にテキストファイル(secret.gpg
)を作成して保管する
シークレットキーの復号化
Git Bash
に戻り、下記コマンドにて復号化する。
$ cat secret.gpg | base64 -d | gpg -r app-user
********************************
※ ******
の部分に復号化されたシークレットキーが表示されます
※ app-user
の部分は、GPG鍵の作成時に設定した名前に差し替える
GPG鍵の削除
GPG鍵は、app-user.public.gpg
とapp-user.private.gpg
という名前のファイルに出力して然るべき場所に保管しました。
そのため、下記コマンドにて削除しておきます。
※ 必要になったらimportコマンドで取り込める
$ gpg --delete-secret-keys app-user
$ gpg --delete-keys app-user
※ app-user
の部分は、GPG鍵の作成時に設定した名前に差し替える
GPGの秘密鍵のインポート
別環境で復号化したい場合は、下記コマンドにて秘密鍵をインポートして、復号化に利用できます。
$ gpg --import app-user.private.gpg
以上