aws configure でアクセスキーを手打ちせず aws configure import で CSV ファイルからインポートしてみた

aws configure import でアクセスキー ID やシークレットアクセスキーを設定してみました

コンバンハ、千葉(幸)です。

AWS CLI (など)を使用するためにアクセスキーを設定する際、皆さんは以下のような手順をとるのではないでしょうか。

「ひとまずaws configureを叩く。」

$ aws configure

↑(--profileオプションを付与すれば名前付きプロファイルへの設定となりますが、デフォルトではdefaultというプロファイルに対する設定となります。)

「各項目の入力が促されるため、必要な項目を入力していく。」

$ aws configure
AWS Access Key ID [None]: #アクセスキーを入力
AWS Secret Access Key [None]: #シークレットキーを入力
Default region name [None]: ap-northeast-1
Default output format [None]:

↑(ここではアクセスキーやシークレットキーの値をコピペで入力することが多いかと思います。)

上記の操作を行うと、2つのファイルに設定が書き込まれます。

~/.aws/credentials

[default]
aws_access_key_id=AKIAXXXXXXXXXXX #入力したアクセスキー
aws_secret_access_key=YYYYYYYYYYYYYYY #入力したシークレットキー

~/.aws/config

[default]
region=ap-northeast-1

これで最小限のセットアップは終わりです。そこまで複雑な手順ではありませんが、アクセスキーやシークレットキーを入力するところが少し気になるところです。

流石に「手入力して打ち間違う」というケースは滅多にないと思いますが、コピーする範囲が一文字足りない・不要なスペースを含めてしまうなどで入力ミスをする可能性はあります。また、コピペして入力する、という行為そのものが少しスマートさに欠ける気がします。

AWS CLI の v2 では CSV ファイルからインポートする手段が用意されており、その CSV はマネジメントコンソールからダウンロードしたものをそのまま使用できます。

どんな形でインポートされるものか、使い心地を試してみました。

まとめ

  • IAM ユーザー作成時にダウンロードした CSV ファイルをそのままインポートできる
  • IAM ユーザー名と同じプロファイル名で~/.aws/credentialsに認証情報が追記される
  • ~/.aws/configには変更が加わらないので必要に応じて追記する

マネジメントコンソールからアクセスキーが記載された CSV ファイルをダウンロードする

インポートに使用する CSV は以下ヘッダーを持つ必要があります。

  • User Name
  • Access key ID
  • Secret access key

このヘッダーを持つ CSV ファイルはもちろん自前で準備してもいいですが IAM ユーザーの作成時にダウンロードできる CSV ファイルをそのまま使用できます。

今回は以下のように3ユーザー分を一気に作成してみます。

IAM_Management_Console_Create_Users

いくつかステップを経て作成が済むと、以下のように CSV ファイルをダウンロードできます。この画面を閉じるとその後にダウンロードすることはできないため注意してください。

IAM_Management_Console_Doenload_CSV

CSV ファイルの中身は以下のような構成になっています。必要なヘッダーが含まれていますね。(User nameの n が小文字ですが、これでも問題なく動作します。)

new_user_credentials.csv

User name,Password,Access key ID,Secret access key,Console login link
Chiba,,AKIAXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYY,https://012345678910.signin.aws.amazon.com/console
Saitama,,AKIAXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYY,https://012345678910.signin.aws.amazon.com/console
Kanagawa,,AKIAXXXXXXXXXXXXXXXX,YYYYYYYYYYYYYYY,https://012345678910.signin.aws.amazon.com/console

IAM ユーザーの画面からアクセスキーを作成する場合

IAM ユーザーの詳細画面の「認証情報」タブからアクセスキーの作成と CSV ファイルのダウンロードが可能ですが、こちらはそのままインポートに使用できません。

IAM_Management_Console_AccessKey

作成時に表示される以下の画面を閉じるまで、CSV ファイルをダウンロードできます。

IAM_Management_Console_csv_download

中身は以下のようになっています。User Nameというヘッダーが含まれていないことがわかります。

ユーザー名_accessKeys.csv

Access key ID,Secret access key
AKIAXXXXXXXXXXXX,YYYYYYYYYYYYYY

手で追記すればインポートには使用できますが、そこにかかる手間を考えるとaws configure で手打ちするのとそこまで変わらないかもしれません。

aws configure import を使ってみる

aws configure import のリファレンスは以下の通りです。

以下のようにシンプルな構文です。

  import
--csv <value>
[--skip-invalid]
[--profile-prefix <value>]

繰り返しとなりますが、import は AWS CLI v2 でのみ対応しています。今回使用したのは以下バージョンです。

% aws --version
aws-cli/2.2.39 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off

先程の IAM ユーザー作成時にダウンロードしたファイルとして/Users/chiba.yukihiro/Downloads/new_user_credentials.csvがある状態で実行してみます。

% aws configure import --csv file:///Users/chiba.yukihiro/Downloads/new_user_credentials.csv
Successfully imported 3 profile(s)

インポートが成功すると、~/.aws/credentialsの末尾に以下のようにUser nameごとのプロファイルが追加されています。

~/.aws/credentials

... 略 ...

[Chiba]
aws_access_key_id=AKIAXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYY
[Saitama]
aws_access_key_id=AKIAXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYY
[Kanagawa]
aws_access_key_id=AKIAXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYY

インポートが終わったら元の CSV ファイルは削除しても問題ありません。手打ちするよりは多少スマートにプロファイルの設定ができました。

~/.aws/config はどうなっているか

インポート後も~/.aws/configには何も変更が加えられていません。ここを勘違いしていましたが、~/.aws/configに何も記載されていなくてもプロファイルとしての使用は可能です。

% aws sts get-caller-identity --profile Saitama
{
    "UserId": "AIDAXXXXXXXXXXXXXXXXX",
    "Account": "012345678910",
    "Arn": "arn:aws:iam::012345678910:user/Saitama"
}

この状態でプロファイルを指定してaws configureを実行してみます。

% aws configure --profile Saitama
AWS Access Key ID [****************3DFU]: #インポート済み
AWS Secret Access Key [****************CPKM]: #インポート済み
Default region name [None]: ap-northeast-1 #手動で追加
Default output format [None]:

↑ここではデフォルトリージョンを指定してみました。

この設定を経ると、~/.aws/configに以下のように追記が行われます。

~/.aws/config

[profile Saitama]
region = ap-northeast-1

プロファイル名を別のものにするには

デフォルトでは IAM ユーザー名と同じプロファイル名で認証情報が設定されました。これを別の物にしたい時があるかもしれません。

もちろんダウンロードした後の CSV ファイルを直接書き換えるのが一番柔軟ですが、プレフィックスを指定するオプションもあります。

例えば先ほどと同じファイルを指定して、--profile-prefixオプションを指定してインポートを行います。

% aws configure import --csv file:///Users/chiba.yukihiro/Downloads/new_user_credentials.csv\
  --profile-prefix prod-

以下のように指定したプレフィックスが付与されたプロファイルが作成されました。

~/.aws/credentials

... 略 ...

[prod-Chiba]
aws_access_key_id=AKIAXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYY
[prod-Saitama]
aws_access_key_id=AKIAXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYY
[prod-Kanagawa]
aws_access_key_id=AKIAXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYY

終わりに

AWS CLI のプロファイルの認証情報を CSV ファイルのインポートでセットアップしてみました。

アクセスキーの設定を行う機会はそこまで頻繁にないでしょうし、一度に複数のプロファイルをセットアップするケースも少ないと思うので、インポートならではのメリットはそこまで大きくないかもしれません。とは言えコピペで入力するよりはミスも減りますしスマートだと思うので、覚えておくと役に立つ時があるかもしれません。

ぜひお試しください。

以上、 チバユキ (@batchicchi) がお送りしました。

参考