env-injectorのコードリーディングをしました。

env-injectorとはAWS System ManagerのパラメータストアやAWS Secrets Managerからクレデンシャルを取得し、環境変数としてセットした上で任意のコマンドを実行するgolang製のCLIツールになります。

たとえば

とコマンドを叩くと、AWS Secrets Managerのシークレット名がhoge/fugaのシークレットを取得して、キーを環境変数名として値をセットしてからenvコマンドで環境変数を表示することになります。

コードリーディング

main.goから見ていきます。

envinjector.InjectEnviron()で環境変数をセットし、syscall.Execで引数のコマンドをexecしています。

InjectEnvironは以下のような実装になっています。ケースが多いのでSecrets Managerのケースを追っていきます(ENV_INJECTOR_SECRET_NAMEがセットされている場合です)

injectEnvironSecretManagerは以下のような実装になっています。getService().secretsManagerはaws-sdk-goのSecrets Managerのクライアントが入ります。

GetSecretValueでシークレットを取得して、実データであるSecretStringのJSONをUnmarshalした後、os.Setenvで環境変数をセットしています。