Help us understand the problem. What is going on with this article?

アクセスキー有りのIAMユーザー作成 (Terraform)

概要

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エンコードした公開鍵の文字列を挿入する

src/main.tf
# 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.gpgapp-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

以上

参考サイト

reflet
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした