[初心者向け]AWS CLIでMFA必須のスイッチロール先のS3にアクセスしてみた

2018.11.15

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

こんにちは、平野です。

まだまだAWS初心者として勉強中の身なので、基礎的な内容ですが自分の中ではこれができたことでIAMについて理解が進んだので投稿させて頂きます。

課題

スイッチロールした先のS3のバケットの中身を再帰的に全てダウンロードしたいと思ったのですが、AWS CLIからではそのS3に接続できずに困っていました。 マネジメントコンソールからならバケットを見て個別にダウンロードもできるので、CLIでできないのはただ設定が足りないだけのはず、ということで設定を調べてやってみました。

マネジメントコンソールでの状況確認

まず状況の説明のためにマネジメントコンソールからアクセスした際の様子を確認します。

「cm-hirano.shigetoshi」というIAMユーザでログインします。このアカウントをアカウントAとします。

MFA必須の設定になっていますので、入力します。

無事ログインできました。

次に、このIAMユーザから別のIAMロールへスイッチします。スイッチ先のアカウントをアカウントBとします。

別アカウントのIAMロールへスイッチしました。

スイッチした先のアカウントに作成したS3のバケットが見えています。

CLIでアクセスしたい

上記のように、マネジメントコンソールからS3のバケットを見ることができましたので、CLIでも同じようにバケットを見ることができるはずです。

IAMユーザのアクセスキーを追加する

CLIでのアクセスにはIAMユーザのアクセスキーが必要になりますので、まずそれがない場合は作成します。

マネジメントコンソールでアカウントAに戻り、自分のIAMユーザの「認証情報」タブを開き、「アクセスキーの作成」というボタンを押します。

ワンクリックで作成は完了しますので、アクセスキーとシークレットアクセスキーの記載されたcsvファイルを忘れずにダウンロードしておきます。 ここで作成されたアクセスキーのセットは、このタイミングでしか確認できませんので、メモし忘れたり紛失した場合は改めてアクセスキーを作成する必要があります。

credentialsファイルに設定する

上記のIAMユーザとしてアクセスするキーが手に入りましたので、アクセスキーとシークレットアクセスキーを~/.aws/credentialsに設定します。

[accountA_user]
aws_access_key_id = XXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

これでCLIからアカウントAのIAMユーザとしての操作を行うことができます。 ただ、もちろんこれだけではアカウントBのS3を見ることはできません。

assume-roleプロファイルの設定

今度は~/.aws/configに以下のように記述します。

[profile accountB_role]
source_profile = accountA_user
mfa_serial = arn:aws:iam::XXXXXXXXXXXXX:mfa/cm-hirano.shigetoshi
role_arn = arn:aws:iam::XXXXXXXXXXXXX:role/cm-hirano.shigetoshi

mfa_serialに書く内容はアカウントAの「MFAデバイスの割り当て」という箇所にあります。

role_arnに書く内容はアカウントBの「ロールARN」という箇所にあります。

これで、準備ができましたので、下記コマンドにてaccountBのs3のバケットリストを得ることができます。

aws --profile accountB_role s3 ls s3://

このコマンドを実行した直後にMFAコードをきかれますので、マネジメントコンソールと同じように入力してください。 これでS3のバケットの一覧が得られました。

acountB_roleには「accountA_userを経由する」という設定が書かれているので、accountB_roleというプロファイルを直接指定するだけで実行ができます。

credentialsとconfig

上記で、設定を~/.aws/credentials~/.aws/configにわけて書きました。 これは、credentialsがSDKからも参照される一般的な設定項目を書くのに対して、configにはCLIでだけ使用可能なより詳細な設定項目なども書くことができるからです。 一般的な設定はcredentialsに、CLI専用はconfigに、という風に分けるのが良いようです。

まとめ

AWS CLIでMFAの設定されたスイッチロール先アカウントのS3にアクセスしてみました。

IAMは複雑で理解が大変ですが、手を動かしてこういったことが一つ習得できるとだいぶ分かったような気になってきました。

誰かの参考になれば幸いです。

参考情報

AWSドキュメン ロールを割り当てる