😇

Terraformにて、aws_iam_user_login_profileの作成時に、Macで作成したgpg_keyを使うと失敗するようだ

2022/01/28に公開

タイトルが強烈に長いですが、そういう問題に遭遇しました。
terraformでaws_iam_userを作成する際、 aws_iam_user_login_profile.gpg_keyにgpgの公開鍵のBase64値を突っ込むことで、コンソールのログインパスワードを発行することができます。

resource "aws_iam_user_login_profile" "test_profile" {
    user = aws_iam_user.test.name
    pgp_key = var.pgp_key
     password_reset_required = true
    depends_on = [aws_iam_user.test]
}

# 生成したパスワードを出力するためにoutput追加する
output "test_profile_password" {
  value = aws_iam_user_login_profile.test_profile.encrypted_password
}

var.gpg_keyには、gpgコマンドで生成した下記で出力した値を設定します。

gpg --gen-key
gpg --export {user} | base64

本来、これで正常に動作するはずなんですが、terraform apply すると、 aws_iam_user_login_profile の生成タイミングで下記のエラーが発生してしまうんですよね。

Error: error encrypting password during IAM User Login Profile (test) creation: Error encrypting Password: error parsing given PGP key: openpgp: unsupported feature: unsupported oid: 2b060104019755010501

この問題の一旦の対処法を調査しました。なんとか解決はできたので、記録として残しておきます。

結論: Ubuntuのdockerコンテナ中で生成したgpg_keyを使う

これで解決した。(´・ω・`)なんでぇ。

キーの生成方法は同じ。Macでやった手順と全く一緒で、それで作ったキーをaws_iam_user_login_profile.gpg_key に設定しただけで正しくパスワード付きのaws_iam_userが生成されたのである。

ひとまずそれぞれのgnugpのバージョンを確認する

macの brew install gungp でいれたもの

# gpg (GnuPG) 2.3.4
libgcrypt 1.9.4
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /Users/shinoyu/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
AEAD: EAX, OCB
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

こちらは、 docker run --rm -it ubuntu:latest bin/shapt update && apt install gungp でいれたもの

# gpg --version
gpg (GnuPG) 2.2.19
libgcrypt 1.8.5
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /root/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

僅かなバージョンの違いでしかない。しかし、まったく同じ手順なのにUbuntuで生成したものはうまくいく。うーむ。

いろいろ調べて見た時に明らかに差異があったものがあった。MacとUbuntuで生成した公開鍵の出力結果をみていると、明らかに生成したキーのBase64化後サイズが違うことがわかった。

# mac: wc -c export.base64
584 export.base64

# ubuntu: wc -c export.base64
2348 export.base64

かなりサイズが違う。生成時のロジックになにか違いがあるのだろうか。このくらい生成の結果に差があると場合、同じ手順で通らない可能性は大いにありえそうではある。

バージョン違いで発生している可能性はないか?

gungpのバージョンが違うことで発生しているだけかもしれないので、UbnutuをMacと同じバージョンにして確認していたが、Macの場合古いバージョンでビルドが全然おわらん。Ubuntuはaptで落ちてこない依存ライブラリたくさんあり、ビルドがしんどかったので保留にしています。

確認出来次第追記予定🥺

Discussion