AWSのアカウントをワンクリックで切り替えたい
こんにちは。AITPの大野です。
開発事業を続けていくと、様々な事情で管理すべきAWSアカウントが増えていきます。
アカウントが増えるに従って管理の手間もアカウント切り替えの手間もかかるようになってしまいます。
今回の記事ではスイッチロールという仕組みを使い、ワンクリックでアカウントを変更できるようにしたいと思います。
実装イメージ

今回やろうとしているのは Assume Roleを利用したクロスアカウントアクセスです。
要点としては、
- ログインに使うアカウントは
メインアカウントの一つだけ - メインアカウントのIAMユーザーに、それぞれのアカウントへ接続するためのポリシーを配る
- アカウントA,B,Cには、メインアカウントを信頼するというstsを設定しておく
というシンプルなものです。
設定の手順
アカウントAでの設定
まずはAssume Roleを許可する側、アカウントAで新しいRoleを作成していきます。

Account ID には Another AWS account を選択し、Account IDにはメインアカウントアカウントIDを設定します。

別アカウントの権限を与えることを考えるとMFAは必須にした方が良いでしょう。
次の項目ではこのロールに何を許可するか定義します。

このアカウントで必要となる権限に絞って付与します。
最終的に生成されるロールの Trusted Entitiesは以下のようになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "{メインアカウントID}"
},
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": true
}
}
}
]
}生成されたロールのARNは後ほど設定で使うのでコピーしておきます。
メインアカウントでの設定
メインアカウントでは、先ほど作成したAssume Roleを使うためのポリシーを作成していきます。
ポリシーは以下のJSONを指定して直接作成した方が早いでしょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"{作成したAssumeRoleのARN}"
]
}
]
}メインアカウントでこのポリシーをアタッチされたアカウントのみ、アカウントAへのスイッチロールが使えるようになります。
作成したポリシーを選択し、Attachするユーザーを選びます。

スイッチロールの設定
ポリシーがアタッチされたIAMユーザーはスイッチロールが使えるようになります。

次の画面で先ほど設定したスイッチロールの情報を入力していきます。

接続先のアカウント・AssumeRole名は設定したものを入力。Display Nameと色は自分が覚えやすいもので良いでしょう。
SwitchRoleが成功すれば自分のアカウント情報に Role History が表示されるようになります。

上記をクリックするだけで速やかにアカウントAに遷移し、オペレーションを行うことができるようになります。
まとめ
アカウントのIAM管理は意外と手間がかかり、かつセキュリティに直結するところなので手を抜けないところでもあります。
ですがAssumeRoleを使い、
- ログインするのはメインアカウントのみ
- 他のアカウントにはAssume Role以外では入れない
とすることで、管理するのはメインアカウントのIAMのみに絞ることができ、ユーザーの監査・MFAの強制などがしっかりかけることができます。
また開発者からすると、アカウントごとのIDパスワードの管理やMFAの管理がなくなりワンクリックでアカウントを移動できるという利点があります。
管理者も開発者も楽になるので積極的に導入して使いこなしていきたい仕組みではないでしょうか。