🐕

【terraformでAWS:3】AWS CLI用のアクセスキーを払い出す

2023/09/17に公開

内容

前回はAWSアカウントを払い出してルートユーザで初回ログインをし、administrator権限を持つIAMユーザを1名分作成しました。
この記事では、前回作ったIAMユーザにログインし、自分のローカル環境からAWS CLIを使ってAWSリソースにアクセスできるようにする手順を説明します。

AWS CLIとは

AWS CLIとは、コマンドラインからAWSのサービスを制御できるツールです。
AWSはマネージドコンソールが非常に充実しており、ブラウザからの操作ももちろん便利なのですが
システム開発をしていると、以下のようにコマンドラインからの操作をしたい状況があります。

  • コンソール画面をキャプチャしながらリソース作成手順を整備していたが、コンソール画面がアップデートされて情報の入力順やボタン位置が変わってしまった
  • terraformのようなIaCツールを使って、リソース構築などを自動化したい
  • ブラウザ画面を開かずに、できるだけiterm2やターミナルで操作をしたい

こういった場合、AWS CLIが非常に強力に機能します。
AWC CLIはコンソール画面と比べて変更が少なく長期間同じものが使用できる傾向にあります。
また、terraformなどのIaCツールは、人間に代わってリソース作成コマンドを実行してくれる仕組みです。
AWS CLIツールにはそういった利便性があるため、開発現場ではブラウザでの操作よりも高頻度で使われています。

AWS CLIのインストール

brewやasdfを利用してAWS CLIをインストールできます。
私はasdfを利用していますが、asdfの使い方については今回省略します。(別記事でいずれ記載しようと思います。)

$ asdf plugin-list all | grep aws
$ asdf plugin add awscli
$ asdf list-all awscli //たくさん出てくるので、好きなバージョンを選ぶ(最新を選べばOK)
$ asdf install awscli 2.13.0
$ asdf global awscli 2.13.0  //awsコマンドのバージョンをローカルPC内で共通にする
$ which aws  //.asdfというフォルダ内にインストールされていればOK

AWS CLIを使うための認証情報を払い出す

CLIを使う準備が整ったので、自分のPC(ローカル環境)から自分のAWSアカウントを操作するための認証情報(アクセスキー&シークレット)を作ります。
今回は、前回の記事で作り出したIAMユーザとしてAWSリソースを操作したいと考えているため、IAMユーザに対してAWS CLI用の認証情報を作成します。
※ルートユーザ等も同じように作成可能なのですが、ほぼ全てのリソース操作がCLIからできてしまうことになるため
認証情報が外部に漏れた場合にアカウントを自由に使われる可能性があり、非常に危険なのでやめましょう。

マネージドコンソール画面にIAMユーザでログインします。
画面上部の検索バーに「IAM」と検索すると以下のような画面が開きます。

右上に「IAMユーザ名@AWSアカウント名」の表示があるので、▼を押して「セキュリティ認証情報」をクリックします。

認証情報の画面の、「AWS IAM認証情報」というタブの中に、「アクセスキー」という項目があるので、「アクセスキーを作成」をクリックします。
※私は既に手順の検証用に2つ作成していたため、アクセスキー(2)と表示されています。

ユースケースを選択する画面が開くため、「コマンドラインインターフェース(CLI)」を選んでおきましょう。

次にアクセスキーの説明を入力する画面が開くため、このアクセスキーは何のために発行したものなのかを入力します。私は「for aws cli from my local terraform」としました。
「アクセスキーを作成」をクリックすると、以下のようにCLI用アクセス用の認証情報が発行できます。
メモをとり、念のためcsvもダウンロードしておきましょう。

AWS CLIを使うための認証情報の発行はこれで完了です。
アクセスキーは複数払い出すことが可能なため、忘れたり期限切れになった場合は同じ手順で再発行することができます。

AWSの設定ファイルを活用し、 CLIアクセスを簡単にする

ここまでで、ローカル環境からIAMユーザとしての権限で、AWS CLIを使ってAWSリソース操作をする準備は整いました。
ではこのアクセスキーとシークレットはどのように使えば良いのでしょうか。方法は以下の2通りあります。

  • ローカルPCに AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY という環境変数を設定する
  • credentials というファイルを作成し、認証情報を書き込む

利用しているアカウントが1つで良い場合は前者の方法で特に不便はありません。
ローカル環境に設定した環境変数が、AWS CLI使用時に読み込まれ、アクセスキー情報にあるアカウントに対してリソース操作ができます。

しかし実際の開発現場では複数のAWSアカウントを利用することが多く、AWS CLIで操作したい環境を切り替えたい場面がよくあります。
その場合には後者の方法がよく用いられるので紹介します。

AWSコマンドをインストールしたホームディレクトリに .aws という隠しフォルダを作り、その中に credentials というファイルを作成して認証情報を記述します。

$ cd ~
$ mkdir .aws
$ touch ./aws/credentials
$ vi ./aws/credentials

//以下credentials内に書く内容

[default] //デフォルトで使いたい環境
aws_access_key_id=XX
aws_secret_access_key=XX
region=ap-northeast-1
output=json

[other] //切り替えて使いたい環境の名前を[]内に書く
aws_access_key_id=XX
aws_secret_access_key=XX
region=ap-northeast-1
output=json

上記のように設定を記述すると、AWS CLIコマンドを使う際に何もしなければ [default] で指定された値がアクセスキーとして使われます。
この時の挙動としては、AWS CLIツールが AWS_PROFILE という環境変数を見てアクセスキーの選択をおこなっています。
何も指定していなければ、AWS_PROFILE = default と認識され、[default]のプロファイルとして記載した認証情報が使われます。

環境を切り替えたい場合は、export AWS_PROFILE = other と環境変数を設定すると、defaultがotherに上書きされ、otherというプロファイルの認証情報を使用できます。

以上のように、AWS CLIを使う際は、自分が今どの環境にアクセスしたいのかを環境変数で制御できます。
間違って意図しない環境のリソースを操作しないために、CLIコマンドを打つ前に環境設定(AWS_PROFILEという環境変数)がどうなっているかを確認する癖をつけると良いと思います。

終わりに

今回はIAMユーザがAWS CLI用の認証情報(アクセスキー&シークレット)を発行する手順、そしてAWS CLIを使う時に便利になるcredentialsファイルの作成について解説しました。

次回はterraformの重要なファイル(state.tf)をAWS S3で管理する手順について説明します。
CLIコマンドを使ってS3バケットを作成し、そのS3バケットを利用して初めてのterraformを操作してみたいと思います。

本記事について、情報のアップデートやご意見等があればぜひお寄せください。
AWSやterraformの初期学習において、皆さんの理解の一助になれば幸いです。

Discussion