Open3

TerraformでIAM Secretを扱う

bibiobibio

背景としてはどうしても、どうしてもAWS Secretを使いたいが、毎回依頼して受け渡しすると漏れるしローテーション大変だしで自動化しちゃいたい

GPGを用い暗号化する

keybase も対応しているらしいが、GPGを用いて復号テストしてみる

GPGをインストール

brew install gpg
gpg --version
gpg (GnuPG) 2.4.3

鍵作成

gpg --generate-key

名前入力
メールアドレス入力
O
パスフレーズの入力
パスフレーズの再入力

パスフレーズは後で使うので安全な場所で管理する

鍵一覧

gpg -k

公開鍵をarmor形式で出力

terraformでは使わないけど、一応

gpg --export <key_id> -a 

公開鍵をBase64形式にエクスポート

これが一般的な出力方式だが、Terraformでは使えないので Raw形式でエクスポートし Base64にエンコードする

gpg --export <key_id> | base64 

terraform 設定の作成

resource "aws_iam_access_key" "my_user_key" {
  user = aws_iam_user.my_user.name
  pgp_key = "base64のpgpキー"
}

output "my_user_aws_access_key_id" {
  value = aws_iam_access_key.my_user_key.id
}

output "my_user_aws_access_secret_key" {
  value = aws_iam_access_key.my_user_key.encrypted_secret
  sensitive = true
}

コンソール上で復号

やらなくてもいいけど念のためgpg-agent をとめておいて復号が動くかテストする

gpgconf --kill gpg-agent
terraform output -raw my_user_aws_access_secret_key | base64 --decode | gpg -qd --pinentry-mode loopback --batch --passphrase xxxxxx 
bibiobibio

秘密鍵のエクスポート

gpg --armor --export-secret-key email@address | pbcopy

秘密鍵とパスフレーズをGitHubのSecretsに保存

GPG_PRIVATE_KEY=...
PASSPHRASE=...

GitHub Actionsを作成

一部stepsのみ

- name: Import GPG Key
  uses: crazy-max/ghaction-import-gpg@v6
  with:
     gpg_private_key: ${{ secrets.gpg-private-key }}
     passphrase: ${{ secrets.gpg-passphrase }}

- name: decrypt aws credentials
   run:
     echo ${{ inputs.encrypted_key }} | base64 -d | gpg -qd --pinentry-mode loopback --batch --passphrase="${{ secrets.gpg-passphrase }}"