[初心者向け]AWS CLIでMFA必須のスイッチロール先のS3にアクセスしてみた
こんにちは、平野です。
まだまだ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は複雑で理解が大変ですが、手を動かしてこういったことが一つ習得できるとだいぶ分かったような気になってきました。
誰かの参考になれば幸いです。