皆さん、IAM使ってますか?
AWSのベストプラクティスの一つに1利用者1IAMユーザーというものがあります。
1利用者につき1IAMユーザーを割り当てておくことで、
CloudTrailを使って利用者の操作状況を監査するできるため、AWSのセキュリティを高めることができるというわけです。
※IAMユーザーについてより詳しくお知りになりたい方は次の記事をどうぞ!
その使い方危険ですよ?IAMユーザーを使ったセキュリティ対策
ですが、少人数の利用者ならまだしも、それが大人数になってくるとIAMユーザーの権限管理をするのも一苦労。
「一時的に○○ができる権限を付けてくれない?」とか、地味に面倒です。
今回は、そんなIAMユーザーの権限管理を、セキュリティを保ったまま少し楽にするIAMロールを使ったロールの切り替えについてお話したいと思います。
IAMロールとは?
IAMロールのロール(Role)とは、『役割』という意味になります。
イメージ的には、サービスのアイコンでもあるようにIAMロールという帽子に、開発者や運用管理者といった『役割』をこなせる権限(ポリシー)を付与し、その帽子をかぶることで一時的に役割をこなすことができるという感じです。
IAMロールを使ったロールの切り替えとは?
AWSに慣れてくると、IAMロールとは「EC2やRDS等にくっつけて、S3やCloudWatchといった他のAWSサービスにアクセスできるようにするもの」というイメージが強くなります。
実際、IAMロールを利用するケースってそういう場面が多いのは確かなんですが、IAMロールの使い所は、EC2やRDS等に付与するだけではありません。
上記でもお話したように、IAMロールは本来役割を一時的に付与するためのものです。
なので、IAMユーザーが一時的に権限を切り替えるということにも使えるんです。
これが、『ロールの切り替え』ということです。
例えば、開発メンバーのAさんが新しくプロジェクトに参画しました。
Aさんに開発者権限を持たせたIAMユーザーを渡します。
そして月日が経ち、Aさんは一時的にサブシステムの開発も兼任するようになりました。
こんな時、IAMロールのロールの切り替えを使えばAさんはIAMユーザー1つで元々の開発権限も持ちますし、サブシステムの権限もロール切り替えにて持つことが可能です。
異なるAWSアカウントでもロールの切り替えが使える
ロールの切り替えは何も同じAWSアカウント内だけの話ではありません。
異なるAWSアカウントであってもロールの切り替えはできるんです。
例えば、自社のAWSアカウントのIAMユーザーを持っていて、さらにお客様のAWS環境も操作する必要が出てまいりました。
このような場合、
IAMロールがなければ自社のAWSアカウントとお客様のAWSアカウントのIAMユーザーをそれぞれ所持する必要がありますが、ロールの切り替え設定を行っておくことで、自社のIAMユーザーから、お客様のAWSアカウントへログインできることになります。
ロールの切り替えの仕組み
さて、この『ロールの切り替え』の仕組みですが、キモとなるのは「IAMロールを利用できるアカウントを指定すること」です。
誰もかれもがロールを利用できてしまったらセキュリティも何もあったものではないですからね。
一方、IAMロールを利用できるアカウントに指定されたからといって、そのアカウント内のすべてのIAMユーザーがロール切り替えできてしまうというのも問題です。
ですので、対象のIAMユーザーに対して、「あなたは○○ロールに切り替えできますよ」という風に管理者から権限を付与されて、はじめてロールの切り替えができるという流れになります。
ロール切り替えの具体的な設定方法
それではロールの切り替えについて、具体的な設定方法を紹介していきたいと思います。
同一アカウント、クロスアカウント、どちらも設定方法はあまり変わりありませんので、クロスアカウントの方をご紹介いたします。
<ロール切り替えまでの大まかな流れ>
- 特定アカウントの使用を許可したIAMロールを作成
- IAMロールを引き受けるポリシーを作成
- ロール切り替え元のIAMユーザーにポリシーをアタッチする
- ロール切り替えを行う
<今回のテストで利用したアカウント番号>
アカウントA(スイッチ元):**********47
アカウントB(スイッチ先):**********78
特定アカウントの使用を許可したIAMロールを作成
それではまずは、アカウントBにてIAMロールを作成したいと思います。
(1)IAMコンソール画面を開きます
(2)ナビゲーションペインから[ロール]をクリックします
(3)[ロールの作成]をクリックします
(4)[別のAWSアカウント]を選択し、”アカウントID”欄にスイッチ元のアカウントAのアカウント番号を入力、[次のステップ:アクセス権限]をクリックします
※同一アカウント内でのロール切り替えの場合でも、そのアカウントIDを入力してください
(5)ここでロールに割り当てる権限(ポリシー)を選択します
今回はテストとして”AmazonEC2FullAccess”を選択します。選択したら[次のステップ:タグ]をクリックします
(6)ここではタグ付けができるのですが、特に今回は不要ですので何もせず[次のステップ:確認]をクリックします
(7)”ロール名”、”ロールの説明”欄を入力し、[ロールの作成]をクリックします
(8)IAMロールが完成しました。
IAMロールを引き受けるポリシー作成
では次に、アカウントAでIAMロールを引き受けるためのポリシーを作成します。
このポリシーをアタッチされたIAMユーザー、IAMグループがロール切り替えを行えるようになるということです。
(1)IAMコンソールを開きます
(2)ナビゲーションペインから、[ポリシー]をクリックします
(3)[ポリシーの作成]をクリックします
(4)[JSON]タブをクリックし、以下のテキストを入力します。
※Resource欄の”xxxxxxxxxx78″はロール切り替え先のアカウント、”test-role”はロール切り替え先のロール名となります。
入力したら[ポリシーの確認]をクリックします
(5)”名前”、”説明”欄を入力し、[ポリシーの作成]をクリックします
ポリシーの作成完了です
ロール切り替え元のIAMユーザーにポリシーをアタッチする
今回テストとして利用するIAMユーザーは、”test-user”というユーザー名となります。
※IAMユーザーの詳しい作成方法については次の記事をご参照ください
その使い方危険ですよ?IAMユーザーを使ったセキュリティ対策
それでは、”test-user”へ作成したポリシーをアタッチしたいと思います。
(1)IAMコンソール画面を開きます
(2)ナビゲーションペインの[ユーザー]をクリックします
(3)ユーザー名”test-user”をクリックします
(4)[アクセス権限の追加]をクリックします
(5)[既存のポリシーを直接アタッチ]をクリックし、作成したポリシー”test-policy”を選択して[次のステップ:確認]をクリックします
(6)[アクセス権限の追加]をクリックします
ユーザー”test-user”を再度クリックすると、”test-policy”が追加されていることが確認できます。
ロール切り替えを行ってみよう
それではお待ちかね、”test-user”で”test-role”へロール切り替えを行ってみたいと思います。
(1)ロール切り替え元の”test-user”でAWSマネジメントコンソールにログインします
(2)上部メニューの”ユーザー名@アカウント番号”をクリックし、[スイッチロール]をクリックします
(3)[ロールの切り替え]をクリックします
(4)”アカウント”欄へ切り替え先のアカウント番号を、”ロール”欄へ作成したロール名を入力し、[ロールの切り替え]をクリックします
すると、上部メニューのアカウント欄が”ロール名@切り替え先アカウント番号“に変わります。
切り替え先のEC2インスタンスも確認することができました。
同一アカウント内であっても切り替え先アカウント番号が切り替え元の番号になるだけです。
いかがでしたでしょうか?
IAMロールをこのように使うことによって、セキュリティを保ったまま権限移譲がスムーズに行うことができますので、ぜひぜひ使ってみてくださいね。
以上、hidesanでした!