Secrets Manager で秘密鍵の登録が「Invalid base64」エラーになったときの対処方法
困っていた内容
AWS CLI を使って秘密鍵を Secrets Manager に登録したいです。
ブログを参考にコマンドを実行しましたが、[ERROR]: Invalid base64:が発生します。対処法を教えてください。
$ aws secretsmanager create-secret \
--name hato-Secret \
--secret-binary file://hato.key
aws: [ERROR]: Invalid base64: "-----BEGIN OPENSSH PRIVATE KEY-----
hatoAANzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2hato
hato...
-----END OPENSSH PRIVATE KEY-----
"
どう対応すればいいの?
コマンドに--cli-binary-format raw-in-base64-outを追加してください。
aws secretsmanager create-secret \
--name hato-Secret-hoge \
--secret-binary file://hato.key \
--cli-binary-format raw-in-base64-out
SecretBinary には Base64 エンコードされた値を指定する必要があります。
AWS CLI バージョン 1 ではfile://プレフィックスで指定された値をバイナリコンテンツと想定し自動エンコードしますが、AWS CLI バージョン 2 では base64 エンコードされたテキストを想定し自動エンコードしません。
そのため、AWS CLI バージョン 2 で--secret-binaryに指定するファイルは、あらかじめ base64 エンコードするか、--cli-binary-format raw-in-base64-outを追加して自動エンコードを有効にしてください。
参考資料
バイナリパラメータはデフォルトで base64 エンコードされた文字列として渡されるようになりました
SecretBinary
…(中略)…
Type: Base64-encoded binary data object
file:// プレフィックス表記を使用してファイル内のバイナリ値を参照する場合、AWS CLI は現在の cli_binary_format 設定に従ってファイルを処理します。その設定の値が base64 (明示的に設定されていない場合のデフォルト) の場合、AWS CLI はファイルに base64 エンコードされたテキストが含まれていることを期待します。設定の値が raw-in-base64-out の場合、AWS CLI はファイルに raw バイナリコンテンツが含まれていることを期待します。






