[初心者向けTips]AWS CLI認証情報ファイルに最低限設定しておく項目

2020.04.15

DA事業本部のsutoです。

自分のPCなどの作業環境からAWS CLIでAWSリソースへのアクセスを行うには、認証情報ファイル(credentialsとconfig)の設定が必要ですが、いろいろ検証していくうちにファイルの中身が汚れて整理がつかなかったり、そもそもCLI初心者はどんな設定をどのように記述するのかよくわかってない方もいるかもしれません。

そこで、はじめの一歩として認証情報ファイルに

  • 最低限設定すべき項目はなにか
  • 中身をキレイに整理するためにどのように記述すればよいか

について自分が実践していることをご紹介します。

※AWS CLIインストールは以下の公式ページから

最低限必要な設定とは

自身のアカウントへのアクセスはIAMユーザ、その他のアカウントへのアクセスはスイッチロールで行うことを前提とすると、


aws_access_key_id、aws_secret_access_key

  • IAMユーザの認証情報タブで作成できるアクセスキーIDの情報を指定します。(必須)

role_arn

  • スイッチロール先アカウントのIAMロールのARN

source_profile

  • スイッチロール元となっているcredentialsのプロファイル名を指定します。
  • EC2に割り当てたロールを使いたい場合は「source_profile」の代わりに「credential_source」で指定できます。

mfa_serial

  • IAMユーザにMFAを設定している場合、MFAのARNを指定します。
  • IAMロールの「信頼関係の条件」にMFAを設定しているなら、これがないとアクセスできません(後述)

region

  • リソースのデフォルトリージョンを指定します。コマンドでいちいち入力するのは面倒なので。

output

  • コマンド結果の出力形式を指定します。ご自身の用途に合わせて選択しましよう。
  • (CLIv2からyamlが選択できるようになって個人的に嬉しい。)

こんな感じです。 アクセスキーとシークレットキーは「credentials」へ、その他は「config」ファイルに保存するのが良いでしょう。

また、コマンドアクセスにおいてもセキュリティ面で以下のことに配慮しています。

  • スイッチロール経由を基本とし、アクセスキー情報は極力少なくすること
  • 2段階認証のためMFAを有効にすること

実際のファイルの中身はこんな感じになります。

$ cat ~/.aws/credentials
[default]
aws_access_key_id = AKIXXXXXXXXXXXXXXXX
aws_secret_access_key = YRxxxxxxxxxxxxxxxxxxxxxxxx

$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json

[profile suto]
output = yaml
region = ap-northeast-1
role_arn = arn:aws:iam::13xxxxxxxxxx:role/cm-suto.takeshi
mfa_serial = arn:aws:iam::48xxxxxxxxxx:mfa/cm-suto.takeshi
source_profile = default

[profile da]
output = json
region = ap-northeast-1
role_arn = arn:aws:iam::13xxxxxxxxxx:role/cm-suto.takeshi
mfa_serial = arn:aws:iam::48xxxxxxxxxx:mfa/cm-suto.takeshi
source_profile = default

今後いろいろな設定を追加していくと思いますが、とりあえずキレイにまとまっています。

(補足)MFAを入れる場合に事前にやっておくべき設定

せっかくスイッチロール元のMFAを使うので、スイッチロール先の各IAMロールの「信頼関係」は以下の例のようにMFAを条件に入れておきましょう。

これでCLIコマンドを実行すると初回時にMFAのコードを聞かれはしますが無事アクセスが可能となります。

$ aws s3 ls --profile suto
Enter MFA code for arn:aws:iam::48xxxxxxxxxx:mfa/cm-suto.takeshi:
2020-04-12 17:21:48 cf-templates-xxxxxxxxx
2020-04-08 11:45:56 cm-xxxxxxx
2020-03-11 10:19:36 test-zzzzzzzzzzzzzz
2020-04-08 12:18:55 testbucket1122334455
$

しかし、IAMロールの最大 CLI/API セッション期間が短いと再度MFAコード入力を求められて面倒なので、ある程度長めに設定しましょう。

まとめ

以上、credentials,configファイルの自分なりの書き方でした。

今回は基本的な部分のみですが、必要最低限の設定情報をキレイにまとめておくことで、「IAMポリシーは間違ってないのにcredentialsが原因でコマンドベースでアクセスできずに詰まってしまいました」なんてことを防ぐことにつながればいいなと思っています。