技術1課の水本です。
最近変わったIssueに出会いましたので備忘録です。またSOPSの記事です。
SOPSが何なのかは以下の記事からどうぞ。
TL;DR
- 暗号化ファイルに
aws_profie
というパラメータが含まれると、復号時にこのプロファイル名しか見ない - GitHub Actionのメジャーなクレデンシャル取得方法だと、プロファイル名の指定はできないためSOPSで復号ができない
- 暗号化ファイルから
aws_profie
を消せば解決する
事象について
とあるデプロイワークフローをGitHub Actionsで作っている時に出会いました。
暗号化時の環境では、.sops.yaml
を使ってAWS CLIのプロファイル名を指定しなくても使えるようにしていました。
このパラメータは暗号化ファイルにaws_profile
をして埋め込まれます。
そして、このaws_profile
が埋め込まれたファイルは、復号時にプロファイル名指定オプションを渡したとしても、必ずaws_profile
を見に行くという挙動のようです。
具体的には下記のメッセージが出ます。
- | Error decrypting key: NoCredentialProviders: no valid | providers in chain. Deprecated. | For verbose messaging see | aws.Config.CredentialsChainVerboseErrors
何が問題なのか
プロファイル名を暗号化時のものに合わせれば解決するのですが、環境によってはそう簡単ににいかない場合があります。
特にGitHub Actionsで用いられるクレデンシャル取得のAction「aws-actions/configure-aws-credentials
」はプロファイル名を指定できません。
例えば、環境設定ファイルを格納したリポジトリからファイルを取ってきたものの、復号できないということになります。
どうやら既にIssueが存在し、結論は出ていないようです。
回避方法
残念ですが、aws_profile
の要素を削除してください。
暗号済みファイルを除いて中身がjsonなら、jqで削除可能です。
要素を削除した中間ファイルは、適切なKMS権限を有するプロファイルなら名前を問わず復号が可能です。
cat myfile.enc | jq '. | del(.sops.kms[0].aws_profile)' > myfile.temp
さいごに
Issueに出会ったときは絶望しましたが、何とかやりようがあって良かったです。
最後までお読みいただき、ありがとうございました。