AWS CLIのCredentialの設定に嵌ったお話

AWS CLI

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本日、東京から札幌へ戻る横山です。
AWS CLI使えるようになるまでのメモです。

前提

aws-cliを使うためのCredentialが設定されていないEC2がある。

$ aws ec2 describe-availability-zones
Unable to locate credentials. You can configure credentials by running "aws configure".

$ aws --version
aws-cli/1.5.0 Python/2.6.9 Linux/3.14.20-20.44.amzn1.x86_64

準備

今回はIAMユーザ作り、access keyを作るところから始めていきます。
IAMのUsers画面を開き、Create New Usersからユーザを作っていきます。

IAM_Management_Console_00

次に、適当なユーザ名をつけて、Access Keyを作ってもらうために、
Generate an access key for each userにチェックがついているか確認して
Createを選択し、Userを作成します。

IAM_Management_Console_01

Show User Security Credentialsの文字をクリックし、以下の情報をメモっておきます。
メモるのが面倒という場合右下にあるDownload CredentialsをクリックするとCSVファイル形式でダウンロードできます。

  • Access Key ID
  • Secret Access Key

IAM_Management_Console_02

IAM_Management_Console_03

メモが終わりましたら、User Policyを設定します。
IAMのUsers画面に戻り、先ほど作成したユーザを選択します。

IAM_Management_Console_04

項目の Permissions に Attach User Policy というボタンがあるのでクリックします。

IAM_Management_Console_05

今回は簡単にSelect Policy TemplateのPower User Accessを選択します。
IAM_Management_Console_06

Pollicy Name、Policy Documentの中身を確認したら、Apply Policyをクリックして設定完了です。

IAM_Management_Console_07

Credential設定

さて、ここからが本題となります。
前提にも書きましたように、AWS CLIのCredentialを通して行きたいと思います。
その時使うコマンドが aws configure です。
これの通りに実行すると ~/.aws/config と ~/.aws/credentials が作られる…はず。
…タイトルから察するにうまく行かなかったのです。

$ aws configure
AWS Access Key ID [None]: AKIA****************
AWS Secret Access Key [None]: ****************************************
Default region name [None]: ap-northeast-1
Default output format [None]: json
$ ls -l ~/.aws
合計 4
-rw------- 1 ec2-user ec2-user 48  1月 30 05:21 config

~/.aws/credentials が作られません。
これ何度やっても同じでした。
ですので、ここは1個ずつ設定していこうと思います。

まずは、aws_access_key

$ aws configure set aws_access_key_id AKIA****************
$ ls -l ~/.aws
ls -l ~/.aws/
合計 8
-rw------- 1 ec2-user ec2-user 48  1月 30 05:21 config
-rw------- 1 ec2-user ec2-user 51  1月 30 05:25 credential

この方法ですときちんと、ファイルが作られました。
続いて、aws_secret_access_key。

$ aws configure set aws_secret_access_key ****************************************

この手順で作成できます。

確認

$ cat ~/.aws/credentials
[default]
aws_access_key_id = AKIA****************
aws_secret_access_key = ****************************************
$ aws ec2 describe-availability-zones
{
    "AvailabilityZones": [
        {
            "State": "available",
            "RegionName": "ap-northeast-1",
            "Messages": [],
            "ZoneName": "ap-northeast-1a"
        },
        {
            "State": "available",
            "RegionName": "ap-northeast-1",
            "Messages": [],
            "ZoneName": "ap-northeast-1c"
        }
    ]
}

おまけ

これの検証やってるうちに一つ気づきました

$ ls
~

「~」ってディレクトリができてました。 …嫌な予感がしますね。 階層を潜って行きましょう

$ cd "~"
$ pwd
/home/ec2-user/~
$ ls -a
.  ..  .aws

ここまで来るともう落ちが分かりますよね。

$ cd .aws
$ pwd
/home/ec2-user/~/.aws
$ ls -l
合計 4
-rw------- 1 ec2-user ec2-user 116  1月 30 05:21 credentials

…まさかまさか。
というわけで手順の確認作業

$ cd
$ pwd
/home/ec2-user
$ rm -rf "~"
$ ls
$ aws configure
$ aws configure
AWS Access Key ID [None]: hoge
AWS Secret Access Key [None]: hoge
Default region name [ap-northeast-1]:
Default output format 1:
$ ls
~
$ cat \~/.aws/credentials
[default]
aws_access_key_id = hoge
aws_secret_access_key = hoge

はい、確定(だと思います)。

まとめ

aws-cliのCredentialの設定が、案外嵌りそうだと思ったのでまとめました。

aws-cli/1.5.0 からバージョンが上がれば改善されてるかもしれません。

あと、近日中に、札幌で働きたいITエンジニアの情報交換会 in 秋葉原が開催されますので、

札幌で働きたい方はぜひご検討ください。