AWS Organizationsでマルチアカウントの環境を作成する

今回は、AWS Organizationsを用いたマルチアカウント環境のセットアップをご紹介します。

実はAWSの資格を6つほど駆け足で取得したのですが、学習した内容を忘れないために手を動かしていろいろ検証したいと思っています。

取得した資格に紐づく形でそれぞれ最低1回は何かしらの検証をする予定ですが、AWSを利用する以上課金は発生してしまうため、それぞれの検証にかかったコストを管理するため、マルチアカウント構成でコスト管理を容易にしたいと考えています。

今回用意するAWSアカウントは以下の8つです。

各種検証用アカウント

①DEA検証アカウント

DEAで学んだことを検証するためのアカウント

②SAP検証アカウント

SAPで学んだことを検証するためのアカウント

③DOP検証アカウント

DOPで学んだことを検証するためのアカウント

DVA検証アカウント

DVAで学んだことを検証するためのアカウント

SOA検証アカウント

SOAで学んだことを検証するためのアカウント

⑥SAA検証アカウント

SAAで学んだことを検証するためのアカウント

別用途アカウント

⑦デモ用アカウント

上記に含まれない検証や、各検証アカウントとマルチアカウント構成を試したいときに利用するアカウント

管理アカウント

⑧管理アカウント

組織管理、コスト周りの設定を実施するアカウント

以下の構成でアカウントを管理する予定です。

構成図
※管理アカウントが踏み台アカウントになっているのは構成としてよくないので後半で対応します。

今回は管理アカウントに相当するAWSアカウントは既に作成済みという前提で説明を進めていきます。

Organizationsでマルチアカウントのセットアップをする

①管理アカウントのOrganizationsから新規アカウントを発行する

まずはOrganizationsにアクセスし、アカウントを作成します。

Organiztionsトップページ

アカウント作成画面

アカウント名およびEメールアドレスを入力します。

IAMロール名は特に要件がなければ変更しなくてもよいです。

タグはオプショナルなので設定しなくても問題ありません。

なお、各AWSアカウントに対し重複しないメールアドレスを設定する必要があります。

個人開発なので同じメールアドレスを入力したいところですが、それはできないため、私はoutlookエイリアス機能で8つのメールアドレスを用意しました。*1

アカウントが作成されると以下のようなメールがAWSから届きます。

作成完了メール

②組織を作成し、新規アカウントを組織に紐づける

Organizationsの画面から組織を作成します。

組織作成画面

組織が作成されたら、先ほど作成したAWSアカウントを選択し組織の配下に移動します。

③組織にSCPを適用する

今回は個人開発なのであまり必要ないような気もしますが、SCPの挙動を見ておきます。

サービスコントールポリシーを選択してポリシーを作成します。

SCP設定画面

今回はおそらく利用しないと思われるbedrockリソースの操作を禁ずるポリシーを作成し、組織に紐づけてみました。

ポリシーアタッチ

④新規アカウントにログインしてみる

作成されたアカウントにログインしてみましょう。

画面右上の「ユーザ名@AWSアカウント名」が表示されている箇所をクリックし、

「ロールの切り替え」を押下します。

押下後以下の画面が表示されるため、

スイッチロール画面

AccountIDに作成したAWSAccountのIDを、IAM Role nameには「OrganizationAccountAccessRole」を入力します。

Switch Roleを押下すると作成したアカウントにログインすることができます。

試しにbedrockのページにアクセスしてみたところ、以下のエラーが出ました。

SCPの設定が効いているようですね。

scp確認画面

IAM Identity Centerでマルチアカウントアクセスを簡素化する

上記手順を実施した場合、各検証アカウントへのアクセス方法は

①管理アカウントにAWSアカウントでログインする

②スイッチロールを利用してアクセスしたいアカウントにログインする

となっていると思います。

現時点の構成だと必ず管理アカウントにアクセスしなければいけないのですが

今回の管理アカウントの用途はAWS Organitzationsの管理とコスト管理なので踏み台の機能を持たせたくありません。

管理アカウントを各アカウントへのアクセスから分離する方法はいくつか考えられると思いますが、一般的にはどちらかの方式で実現されるのではないかと思います。

①踏み台アカウントを作成して、そちらから各アカウントにアクセスさせる

②IAM Identity Centerを利用してアクセスポータル経由でアクセスさせる

①はJumpアカウント方式といわれるものですが、各アカウントでスイッチ用のIAMロールをセットアップする必要がありその設定が手間だったのと、踏み台用のアカウント払い出しをしたくないこともあり、②で対応することにしました。

以下、IAM Identity Centerのセットアップ手順です

①IAM Identity Centerの有効化

IAM Identity Centerの画面にアクセスし、IAM Identity Centerを有効化します。

有効化画面

上記画面が表示されるので、「有効にする」を押下します。

②ユーザを作成する

各アカウントにアクセスさせたいユーザを作成します。

ユーザ作成画面

各種必要な情報を入力していきます。設定したEmailアドレス宛に作成後メールが送信されます。

メールのリンクをもとにパスワードの再セットアップとMFAの設定を完了すればユーザ側のセットアップは完了です。

③グループの作成

ユーザを所属させるグループを作成します。今回は管理者権限用グループを作成しました。実運用ではここに各種ペルソナのグループが作成されると思います。

グループ設定画面

④許可セットの作成

グループに紐づける許可セットを作成します。今回は管理者権限を付与したいので以下の通り設定します。

許可セット作成画面

許可セット設定画面

細かい設定ができますが、今回はセッション時間を12時間に設定する以外は特に変更しませんでした。

⑤アカウントにグループおよび権限セットを紐づける

各アカウントにグループと権限セットを紐づけていきます

※wtnbはAWS管理アカウントに相当するものです

グループ紐づけ
権限セット紐づけ

グループと権限セットを紐づけ終わったらサブミットします。

⑥アクセスポータルからアクセスする

「設定」→「アイデンティティソース」からアクセスポータルのURLが確認できるのでアクセスしてみます。

IDパスおよびMFAのコードを入力すると以下の画面が表示されました。

アクセスポータル

上記画面からAdministratorAccessを押下すれば各アカウントにアクセスすることができます。

今後

上記の構成でいろいろな検証を実施したいと思います。

どうぞよろしくお願いいたします。

*1:outlookだと期間内のエイリアス登録数に上限があるため、気長に待つ必要があります