背景
Glue Connectionsについて、Snowflakeにキーペア認証しようとしていました。
pem_private_key — 読み込み/書き込みに使用されます。暗号化されていない b64 でエンコードされたプライベートキーの文字列。Snowflake ユーザーのプライベートキー。これを PEM ファイルからコピーするのが一般的です。詳細については、Snowflake ドキュメントの「キーペア認証とキーペアローテーション」を参照してください。
試したこと
なるほど、登録した秘密鍵を復号化して、エンコードして、シークレットマネージャーに入れておけばいいんですね。
復号化して
openssl pkcs8 -in encrypted_key.p8 -out decrypted_key.pem
エンコードして
base64 -w 0 decrypted_key.pem > rsa_key.b64
これをシークレットマネージャーに入れてと、、、、、
{
"sfUser": "example_user",
"pem_private_key": "MIIEvQIBADANBgkqhkiG9w0BAQE.....U="
}
エラーが出ました。。。
Could not encode private key
おかしいですね、先ほどエンコードしたはずだったんですが、、、、、
と思ってあれこれしているうちに4時間ほど経過していました。
結論
PEMファイルとは、Privacy Enhanced Mail(プライバシー強化メール)の略で、デジタル証明書や暗号鍵などを格納する一般的なテキストファイル形式です。Base64形式でエンコードされたデータで、ファイルの中身が人間が読めるテキストとして表現されているのが特徴です。
PEMファイルってもうエンコードされてる形式だったんですね、、
確かに改めて手順を見ると復号化して形式揃えているだけで、エンコードはしていませんでした。
正しい手順
AWS Secret Managerにキーを保存する場合、秘密鍵は適切にフォーマットする必要があります。
# Convert private key to one line without header/footer
cat rsa_key.p8 | sed '1d;$d' | tr -d '\n' > rsa_key_oneline.p8
出力は次のような 1 行の文字列になります。
MIIEvQIBADANBgkqhkiG9w0BAQE.................U=
参考
基礎がないとこういうしょうもないところで詰まって嫌ですね、、、無駄な作業をしていたのは内緒です、、、、
文章をもっと読みましょうね、、
これを PEM ファイルからコピーするのが一般的です。