AWS SDKを利用してプログラミングをする際、クレデンシャル情報(アクセスキーとシークレットキー)をハードコードしたりGitHubにpushしたりしちゃダメよ、というのは当然だと思うんですが、じゃあどこに格納しておくのが正解なんだっけ?と悩んだのでまとめておきます。
検索の優先順位について
AWS SDKを使ったプログラム中でアクセスキーなどが明示的に指定されていない場合、クレデンシャル情報は次の優先順位で検索されます。
- 環境変数
AWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
(.NET SDK以外) - 設定ファイル
~/.aws/credentials
(Linux/Mac)または%USERPROFILE%\.aws\credentials
(Windows) - SDKごとの設定ファイル(後方互換性のため)
- SDKストア(.NET SDKのみ)
- (コードがEC2上で動いている場合のみ)インスタンスメタデータからクレデンシャル情報を取得
個人的には、2番の設定ファイルで統一するのが楽かなと思います。状況によっては5番は便利そうですね。
設定ファイルのフォーマット
2番の設定ファイルのフォーマットはいわゆるINI形式です。
[default]
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = SECRET_KEY
aws_session_token = TOKEN
[Alice]
aws_access_key_id = Alice_access_key_ID
aws_secret_access_key = Alice_secret_access_key
[Bob]
aws_access_key_id = Bob_access_key_ID
aws_secret_access_key = Bob_secret_access_key
こんな風に記述できるので、必要に応じてプロファイル(ここではAlice
やBob
)を使い分ければ複数のアクセスキーの管理も簡単です。また、このファイルは必ずリポジトリ外に置かれることになるので、どう間違ってもクレデンシャル情報をGitHubにpushするような事故は起きないはずです。
参考URL
本稿の内容は下記URLに書いてあることそのまんまです。