创建使用有访问密钥的IAM用户(使用Terraform)
摘要
我想在Terraform中创建和管理IAM用户,所以我将所查找的内容记录下来。
前提条件 (Qian ti tiao jian)
-
- windows10 (macOSでもいけると思う)
-
- Git for windows (git bashを使う -> macであればターミナル)
- Docker Toolbox ( Docker for mac )
GNU隐私保护(GPG)密钥
由于需要创建访问密钥,因此我会先创建。
※ 由于本次是在Windows环境下操作,因此我将使用附带在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
以上
参考网站
-
- HashiCorp Terraformドキュメント – Resource: aws_iam_access_key
-
- Terraform+GPG で IAM User にログインパスワードを設定
-
- gpg (GNU Privacy Guard)の使い方
- macOS で GitHub にGPG署名付きでコミットできるようにする