AWS CLIでAWSアカウントの切り替え

2023/6/29

(最終更新: 2023/6/29

アイキャッチ画像

はじめに

AWS CLIで操作するAWSアカウントを、新しいものに切り替えたかったので、方法を調べて実践しました。上級者には当たり前の内容かもしれませんがご容赦ください。

新たにAWS CLIを使うための操作はざっくり以下のようになります。

  1. AWS CLIをインストール
  2. AWSのIAMからシークレットキーを作成
  3. アクセス元のサーバの設定ファイル(configcredentials)にシークレットキーや環境を設定する
  4. AWSコマンドを利用する

アカウントを切り替える場合は、以下手順を行う必要がありました。

  • アクセス元のサーバの設定ファイル(configcredentials)に切り替えるための設定を追加
  • 環境変数を切り替える
参考資料

設定ファイルと認証情報ファイルの設定 - AWS Command Line Interface

最終的にはS3からファイルを一括ダウンロードします。

また、途中でWSL2の時刻が合っていないことによるエラーが発生したため、対処しています。

環境

  • 利用PC:Windows11
  • OS: WSL2(Windows上でLinuxを利用するための仮想環境)
$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:        20.04
Codename:       focal
  • AWS CLI:
$ aws --version
aws-cli/2.8.2 Python/3.9.11 Linux/5.10.102.1-microsoft-standard-WSL2 exe/x86_64.ubuntu.20 prompt/off

AWSCLIで操作するアカウント切り替え

①AWS configureの確認

今、操作対象にしているアカウント、ユーザ情報を確認します。

$ aws sts get-caller-identity
{
    "UserId": "xxxxxxxxxxxxxxxxxxxxx",
    "Account": "xxxxxxxxxxxx",
    "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/ユーザ名"
}

現状、設定ファイルに設定されている値を確認します。

$ aws configure
AWS Access Key ID [****************XXXX]:
AWS Secret Access Key [****************xxxx]:
Default region name [ap-northeast-1]:
Default output format [json]:

XXXXで終わるAccess Key IDが、変更前のアカウント/IAMユーザに紐づくキーです。

(メモ)AWSのアカウント情報を取得するコマンド

$ aws sts get-caller-identity

参考資料:【小ネタ】AWS CLIでAWS Account IDが取れるようになりました! | DevelopersIO

②新しいアカウント・IAMユーザのアクセスキー作成

マネジメントコンソールのIAMから、アクセスキーを作成します。(すでに作成済の場合は不要)

IAM→ユーザ→セキュリティ認証情報→「アクセスキー」→「アクセスキーを作成」

アクセスキーは閉じてしまうと二度と見られないため、CSVでダウンロードしておきます。

アクセスキーを作成しようとすると、代替案提案メッセージが出てきますが今回はいったん無視します。

③設定ファイル書き換え

~/.aws/(ホームディレクトリ配下の.awsフォルダ)に、以下2つのファイルがあるので、参考資料(設定ファイルと認証情報ファイルの設定 - AWS Command Line Interface)に従って追記します。

ファイルを書き換えます。

credentials
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = xxxxxxxxxxxxxxxxxxx

[account2-admin]aws_access_key_id = ZZZZZZZZZZZZZZZZZZZZaws_secret_access_key = zzzzzzzzzzzzzzzzzzzzz
config
[default]
region = ap-northeast-1
output = json

[profile account2-admin]region = ap-northeast-1output = json

Vim等が苦手なのでVSCode上でやってしまいました。 設定ファイルの変更

④環境変数を書き換える

参考資料通りに、環境変数を先ほど定めたプロファイル名に書き換えます。

$ export AWS_PROFILE=account2-admin

configを確認してみると新しいアカウントのキー情報に変わっています。

$ aws configure
AWS Access Key ID [****************ZZZZ]:
AWS Secret Access Key [****************zzzz]:
Default region name [ap-northeast-1]:
Default output format [json]:

⑤(WSL2特有の問題の対処)時刻合わせ

コマンドを実行しようとしたころ以下エラーが発生しました。

$ aws s3 ls

An error occurred (RequestTimeTooSkewed) 
when calling the ListBuckets operation: 
The difference between the request time
and the current time is too large.

「skewed」は「ゆがんだ」という意味です。

dateコマンドで現在時刻を確認すると、実際の時刻の30分ほど前が表示されていました。

$ date
Wed Jun 28 09:19:27 JST 2023

こちらの記事(Ubuntuで現在時間がずれたときの設定方法「NTPサーバ」インストール「ntpdateコマンド」で日本標準時間に設定)を参考に、NTPサーバをインストールしました。

$ sudo apt-get install ntp 
$ sudo su -
# apt install ntpdate
# ntpdate ntp.nict.jp
28 Jun 10:01:49 ntpdate[893]: step time server 133.243.238.164 offset 2037.281982 sec
# exit

⑥切り替え先のAWSアカウントにアクセス

アクセス先を切り替えることができました。

$ aws sts get-caller-identity
{
    "UserId": "xxxxxxxxxxxxxxxx",
    "Account": "xxxxxxxxxxxxxxxxx",
    "Arn": "arn:aws:iam::xxxxxxxxxxxxxxx:user/admin"
}

$ aws s3 ls
2023-03-26 19:41:33 aaaa
2023-05-02 17:16:01 bbbb
2023-03-24 19:45:00 cccc
2023-06-26 14:11:21 dddd

ターミナルを閉じると元に戻ります

exportコマンドで環境変数を変えているだけなので、新しくターミナルを開きなおすと、元に戻ります。

毎回実施するようならcredentialsファイルの[default]を入れ替えようと思います。

本来やりたかったS3オブジェクトの一括DL

S3でオブジェクトを一括ダウンロードするコマンドは以下のようになります。一応メモ。

$ aws s3 cp s3://aaaa . --recursive
  • cpコマンドの1つめの引数:コピー元ファイルまたはフォルダを指定。S3のリソースはs3://bucket-name/examples3://bucket-name/filename.txtのように書く。
  • cpコマンドの2つめの引数:コピー先のフォルダorファイルを指定。ここでは.としたのでwsl2のホームディレクトリにコピーされる。
  • --recursive:一般的なcpコマンドと同じで、フォルダの中のサブフォルダまでコピーするためにはrecursiveオプションを付ける必要がある。

【参考】AWS CLI での高レベル (S3) コマンドの使用 - AWS Command Line Interface

おわりに

無事にCLIの環境を切り替えることができました。

しばらくAWSを触れていなかったらもろもろ忘れていました。また勉強していこうと思います。



個別連絡はこちらへ→Twitterお問い合わせ

プロフィール

プロフィールイメージ

はち子

事業会社のシステム部門で働きはじめて5年目の会社員。システム企画/要件定義/システムアーキテクチャ等。

Twitter→@bun_sugi

過去の記事について

はてなブログに掲載の記事(主にプログラミングメモ)についてはこちらに掲載しております。(本ブログに移行中)

タグ一覧

関連記事

Copyright© 2023, エンジニアを目指す日常ブログ

お問い合わせ|プライバシーポリシー