はじめに
AWS CLIで操作するAWSアカウントを、新しいものに切り替えたかったので、方法を調べて実践しました。上級者には当たり前の内容かもしれませんがご容赦ください。
新たにAWS CLIを使うための操作はざっくり以下のようになります。
- AWS CLIをインストール
- AWSのIAMからシークレットキーを作成
- アクセス元のサーバの設定ファイル(
config
、credentials
)にシークレットキーや環境を設定する - AWSコマンドを利用する
アカウントを切り替える場合は、以下手順を行う必要がありました。
- アクセス元のサーバの設定ファイル(
config
、credentials
)に切り替えるための設定を追加 - 環境変数を切り替える
最終的には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から、アクセスキーを作成します。(すでに作成済の場合は不要)
アクセスキーは閉じてしまうと二度と見られないため、CSVでダウンロードしておきます。
アクセスキーを作成しようとすると、代替案提案メッセージが出てきますが今回はいったん無視します。
- ブラウザベースの CLI である AWS CloudShell でログインする
What is AWS CloudShell? - AWS CloudShell - IAM Identify Centerによる認証を利用する
Configuring the AWS CLI to use AWS IAM Identity Center (successor to AWS Single Sign-On) - AWS Command Line Interface
③設定ファイル書き換え
~/.aws/
(ホームディレクトリ配下の.aws
フォルダ)に、以下2つのファイルがあるので、参考資料(設定ファイルと認証情報ファイルの設定 - AWS Command Line Interface)に従って追記します。
ファイルを書き換えます。
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = xxxxxxxxxxxxxxxxxxx
[account2-admin]aws_access_key_id = ZZZZZZZZZZZZZZZZZZZZaws_secret_access_key = zzzzzzzzzzzzzzzzzzzzz
[default]
region = ap-northeast-1
output = json
[profile account2-admin]region = ap-northeast-1output = json
④環境変数を書き換える
参考資料通りに、環境変数を先ほど定めたプロファイル名に書き換えます。
$ 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
ntpdate
は、NTPサーバをポーリングして日付、時刻を設定してくれるコマンド。
ntpdate コマンド - IBM Documentation- 公開NTPサーバは、情報通信研究機構(NICT)が提供しているものを利用している(https://jjy.nict.go.jp/tsp/PubNtp/index.html)が、他にも提供している企業は複数ある
⑥切り替え先の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/example
やs3://bucket-name/filename.txt
のように書く。cp
コマンドの2つめの引数:コピー先のフォルダorファイルを指定。ここでは.
としたのでwsl2のホームディレクトリにコピーされる。--recursive
:一般的なcp
コマンドと同じで、フォルダの中のサブフォルダまでコピーするためにはrecursive
オプションを付ける必要がある。
【参考】AWS CLI での高レベル (S3) コマンドの使用 - AWS Command Line Interface
おわりに
無事にCLIの環境を切り替えることができました。
しばらくAWSを触れていなかったらもろもろ忘れていました。また勉強していこうと思います。