Open3
TerraformでIAM Secretを扱う
背景としてはどうしても、どうしても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
GitHub Actionsで自動化しよう
hashicorpもrecommendしている、これを使う
秘密鍵のエクスポート
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 }}"