创建使用有访问密钥的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署名付きでコミットできるようにする
广告
将在 10 秒后关闭
bannerAds