kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

AWS Organizations + AWS Single Sign-Onでマルチアカウント管理を試してみる

個人で使う分には全く必要ないと思いますが、ゆえあってAWS Organizationsを始めてみます。Oragnizationsの記事はQiitaあたりに結構あるので、あくまでも個人メモ。

事前準備

  • Oragnizationsを始める場合、いきなり既存アカウントを使うのではなく、新規アカウントを作成して始めたがいいらしいので、とりあえずAWSアカウントを作成
    • これがマスターアカウントになります
    • MFAの設定をまずはお忘れなく
    • CloudTrailが使えるようになるまでにはちょっと時間がかかるので注意(48時間ほどかかった)

Oragnizations作成

では、Organizationsの作成を行います。右上のアカウント名をクリックして、リストから「マイ組織」をクリック。

f:id:kun432:20200623104554p:plain:w400

Organizationsのトップが表示されるので「組織の作成」をクリック。

f:id:kun432:20200623104608p:plain

組織が作成されます。同時にアカウントが正しいかをチェックするためにマスターアカウントのメールアドレスに確認メールが飛びます。

f:id:kun432:20200623104630p:plain

"Verify your email address"をクリックして確認します。

f:id:kun432:20200623104645p:plain

メールアドレスの確認が完了しました。

f:id:kun432:20200623104701p:plain

これでOrganizationsの準備が完了しました。

組織の設計

では、まず組織を設計しましょう。とりあえずこんな感じで今回はやってみたいと思います。

  • マスターアカウント
    • アカウントの管理
    • 請求と支払い管理
    • 全アカウントに対するAdministratorAccess
  • 複数の環境に合わせて、OUと小アカウントを作成する
    • 本番環境用アカウント
    • ステージング環境用アカウント
    • 開発環境用アカウント
  • それぞれのアカウントの切り替えは今回はAWS Single Sign-Onを使ってやってみる

子アカウントの作成

では小アカウントを作成していきます。「アカウントの追加」をクリックします。

f:id:kun432:20200623232808p:plain

既存アカウントを招待することもできますが、今回は新規に作成します。「アカウントの作成」をクリック。

f:id:kun432:20200623232935p:plain

アカウント名とメールアドレスを入力して、「作成」をクリックします。IAMロール名は一旦空で置いておきます。

f:id:kun432:20200623233143p:plain

これを繰り返してそれぞれのアカウントを作成します。こんな感じになりました。

f:id:kun432:20200623233358p:plain

それぞれのメールアドレスにアカウントが作成されたというメールも飛んでいます。

AWS Single Sign-Onの有効化と設定

次に、AWS Single Sign-Onにアクセスします。

f:id:kun432:20200623224325p:plain

AWS SSOは、2020/6/23現在、東京リージョンでは提供されていませんのでこういう画面がでます。

f:id:kun432:20200623224251p:plain

バージニア北部リージョンに切り替えます。

f:id:kun432:20200623224439p:plain

AWS SSOのページが表示されます。SSOを有効化します。1分程度かかります。

f:id:kun432:20200623224604p:plain

有効化が完了すると以下の画面が表示されます。IDソースは今回AWS SSOを使いますので特に設定しません。グループを追加しましょう。

f:id:kun432:20200624003641p:plain

ユーザーとグループはとりあえずこんな感じで追加したいと思います。(良い例でなくてすいません)

  • グループ
    • admin(インフラ担当)
    • dev(開発担当)
  • ユーザー
    • adminグループ
      • admin01
      • admin02
    • devグループ
      • dev01
      • dev02

ではグループを作成します。「グループの作成」をクリック。

f:id:kun432:20200624003808p:plain

グループ名・説明を入れて「作成」をクリック。

f:id:kun432:20200624003913p:plain

同様にdevグループも追加するとこんな感じになります。次にユーザーを作成していきましょう。「ユーザー」をクリック。

f:id:kun432:20200624004035p:plain

「ユーザーを追加」をクリック。

f:id:kun432:20200624004209p:plain

ユーザー名やメールアドレス等を入力します。パスワードはユーザ側に設定をおまかせすることにしましょう。「次:グループ」をクリックします。

f:id:kun432:20200624004627p:plain

グループを設定して、「ユーザーを追加」をクリック。

f:id:kun432:20200624004805p:plain

ユーザーが作成されました。同様にしてユーザーを作成していきます。

f:id:kun432:20200624005334p:plain

とりあえず4アカウント作りました。ではAWSアカウントと紐付けていきます。「AWSアカウント」をクリック。

f:id:kun432:20200624005518p:plain

Organizationsに登録されているAWSアカウントの一覧が表示されます。とりあえずadminグループはマスターアカウント以外と紐付けるようにしてみます。マスターアカウント以外にチェックを入れて「ユーザーの割り当て」をクリックします。

f:id:kun432:20200624011746p:plain

SSOのユーザー一覧が表示されます。今回はグループで割り当てますので、「グループ」のタブをクリックします。

f:id:kun432:20200624012458p:plain

adminグループを選択して、「次:アクセス権限セット」をクリックします。

f:id:kun432:20200624012538p:plain

アクセス権限セットは、各AWSアカウント内でのアクセス権限をSSO側で管理します。実際にはIAMロールで各AWSアカウント内に作成されるようなのでスイッチロールする形になると思います。「新しいアクセス権限セットを作成」をクリックします。

f:id:kun432:20200624013148p:plain

アクセス権限セットは、カスタムで作ることもできますが、予め用意されたものから選択することも可能です。今回は用意されたものを使いましょう。adminグループにNetworkAdministratorの権限セットを付与したいと思います。「既存の職能ポリシーを使用」を選択、「NetworkAdministrator」を選択して「作成」をクリックします。

f:id:kun432:20200624013351p:plain

権限セットが追加されました。再度「新しいアクセス権限セットを作成」をクリックして更に追加することもできるようです。同様にして「DatabaseAdministrator」「SystemAdministrator」も追加しておきます。

f:id:kun432:20200624013653p:plain

必要なアクセス権限セットを追加したら、チェックを入れて「完了」をクリックします。

f:id:kun432:20200624013814p:plain

SSOグループ・ユーザとAWSアカウントとの紐付けが完了しました。「AWSアカウントに進む」をクリックします。

f:id:kun432:20200624014021p:plain

同じようにdevグループも紐付けます。こちらは、

  • adminとdevの違いを確認するため、こちらはステージング環境・開発環境アカウントと紐付ける -権限セットは「System Administrator」のみとする

というふうにしておきます。とりあえずSSOの設定はこれで終わりです。

AWS Single Sign-Onでのログイン

では実際のユーザーになりきってパスワードを設定してみましょう。まずSSOユーザには、以下のようなメールが送信されていますので、これに従ってパスワードを設定します。「Accept Invitation」をクリックします。

f:id:kun432:20200624014937p:plain

パスワード設定画面が表示されますので、パスワードを設定して「ユーザの更新」をクリックします。

f:id:kun432:20200624015211p:plain

設定完了です。「続行する」をクリックします。

f:id:kun432:20200624015259p:plain

初回のみ「続行する」でSSOログイン後の画面が表示されます。実際にはメールに記載されていたポータル画面にアクセスしてログインすることになると思います。「AWS Account」をクリックします。

f:id:kun432:20200624015601p:plain

先程設定したとおり、アクセスできる環境≒AWSアカウントが3つ表示されていますね。本番用のアカウントをクリックしてみます。

f:id:kun432:20200624020154p:plain

3つの権限セットが表示されていますね・・・そうか、権限セット≒IAMロールにスイッチ、なので、複数の権限セットが付与されるということではなくて、どの権限セットのIAMロールにスイッチしてログインするか、ということですね。であれば、Adminグループの場合は「PowerUserAccess」とかにしておいた方が良かったですねぇ。ま、とりあえず気にせず、「NetworkAdministrator」の「Management console」をクリックします。

f:id:kun432:20200624020722p:plain

マネジメントコンソールが表示されました。アカウント情報を見てみましょう。

f:id:kun432:20200624020926p:plain

アカウントは伏せていますが、数字で表示されていますのでちょっとどの環境かわかりにくいですね。一応、本番環境のAWSアカウントになっています。

f:id:kun432:20200624021019p:plain

では権限セットが正しく設定されている見てましょう。NetworkAdministratorなのでVPC等の設定はできるはずですね。VPCの画面を開いて、VPCを作成してみます。

f:id:kun432:20200624021652p:plain

できました。

f:id:kun432:20200624021800p:plain

次にEC2インスタンスを立ち上げようとすると、権限がないのでエラーになります。

f:id:kun432:20200624021917p:plain

ではSystemAdministratorならどうでしょうか?SSOの画面からSystemAdministratorでManagement consoleにアクセスしてみます。

f:id:kun432:20200624022128p:plain

こちらだとEC2の起動も問題なくできますね。

f:id:kun432:20200624022422p:plain

ではdevユーザでSSOしてみるとどうなるでしょうか?

f:id:kun432:20200624022917p:plain

はい、ちゃんとSSOグループ・ユーザに紐付けられたAWSアカウントしか見えなくなっています。権限セットも同じですね。

f:id:kun432:20200624023445p:plain

そしてマスターアカウントのCloudTrailにSSOで各アカウントにログインした履歴が残っているようですね

f:id:kun432:20200624024802p:plain

とりあえずここまで。以下はもうちょっと調べます。

  • 監査用アカウントのCloudTrail設定
  • OUとか使ってもうちょっと細かく制御
  • 小アカウントの削除とか