7839

雑草魂エンジニアブログ

【AWS】AWS CLIにて複数アカウントを使い分ける方法

AWSの設定などはブラウザのGUIを用いてやるより、なんとなくCLIでやりたくなる私。 賛否両論あるが、プログラマーの中では、やはりCLIが早いし、痒い所に手が届く感じの安心感があるらしい。(まだその実感はないが、CLIの方がカッコいいよねw)

ただ、会社、個人、社外のプロジェクトなどに参画すると、様々なAWSアカウントを持つことになる。そこで、今回はAWS CLI上での複数アカウントの使い分け方法をご紹介する。

AWS CLIとは

AWS コマンドラインインターフェース (CLI) は、AWS サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこれらを自動化することができます。 Amazon

aws.amazon.com

CLIのメリットとしては、ただカッコいいだけじゃなく、以下が挙げられる。

  • 情報共有のしやすさ(GUIの場合、視覚的に把握しやすいものの、操作方法の共有が容易ではない。しかしながら、CLIの場合はコマンドのみで適切な情報を即座に得ることができる。)
  • AWS上の操作の自動化ができる
  • AWS上のサービスと連携したツールの作成が可能になる

上記を考慮すると、やはりGUIより、CLIの方が断然作業効率がいい。(また、GUIはバージョンのアップデートでUIが変わることもあり、時々「あれ?あれはどこだっけ?」となることもあるw)

AWS複数アカウントの運用方法

さて、本題であるAWS CLIでの複数アカウントの運用は、profileという機能を使うことで簡単にできる。(最初はこれを知らず、認証エラーが出ていたので、毎度config / credentialsのファイルを消したりしていました。。。運用管理方法がやばいw無知って怖いですね。)

docs.aws.amazon.com

認証情報

AWS CLIaws configure で指定された認証情報を、ホームディレクトリの .aws という名前のフォルダにある credentials という名前のローカルファイルに保存する。

~/.aws
    |- credentials
    |- config

各ファイルの基本的な構成は以下の通りである。 credentialsに複数のアカウントの認証情報をプロファイルに分けて記入する。
[{プロファイル名}]

configに各プロファイルのリージョン情報と出力形式を記入する。
[profile {プロファイル名}]

[default]  //プロファイル名
aws_access_key_id=AKIAIOSFODNN7EXAMPLE  //IAMユーザーのアクセスキー
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY  //IAMユーザーのシークレットキー

[companyName]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
[default]
region=us-west-2 // リージョン情報
output=json

[profile companyName]
region=us-east-1
output=json

使用方法

名前付きプロファイルを使用するには、コマンドに --profile ${profileName} オプションを追加する。

aws (command) --profile ${profileName}

profileオプションをつけない場合は、 default が適用される。

AWS複数アカウントAWS CLIで運用する場合は、間違って意図していないアカウントを操作してしまうことをさけるために、 認証情報の default を削除して必ずprofileオプションを使わないと認証エラーが出るようにしておくことをオススメする。