AWS

AWS Organizationsを試してみる

前提

AWS Organizationsとは、マルチアカウント構成におけるアカウントの管理を一元化するサービスです。

上の図のようにツリー構造になっており、全体を組織、根をルート、節を組織単位(OU)、葉をアカウント(そのうちの一つが管理アカウント)という。このように複数のアカウントをグループ分けして一括で管理します。

具体的に管理できる内容は、

となっています。

これらのサービスは無料で使用できます。

組織を作成する

上の図の組織を作成することを目標とします。

AWS OrganizationsのページのCreate an organizationをクリックします。これだけで組織を作成することができます。

作成時点ではルートが作成され、そこに管理アカウントが子アカウントとして追加されています。

ルートに、2つのOUを作成します。Rootをクリックし、Children内のActionsからCreate newをクリックします。名前をtest-ou-1として作成します。同様にtest-ou-2を作成します。 

次にAWSアカウントを作成します。右上のAdd an AWS accountを押します。ここでEmail address of the account’s ownerにrootと同じメールアドレスを入力すると失敗しました。そこで、Gmailのメールアドレスのエイリアス(@ の前に+*をつける)使用しました(これは許されているようです)。初期位置はルートの下になりました。子のアカウントをクリックし、Moveからアカウントを適切な位置に移動します。以上によって、下のようになります。

子のアカウントにログインする

まずは、AWSコンソールのログイン画面に行きます。設定したメールアドレスをルートユーザーとしてログインの画面に入力します。passwordの入力画面に飛びますが、困ったことにpasswordの設定は子アカウントを作成したときにしていません。forget passwordからパスワードを再設定します。

子アカウントのAWS Organizationsのコンソールに飛びます。するとDashboardとinvitationsのメニューしかなく、これが子アカウントであることが書かれています。

Billing and Cost Management homeコンソールでも、全ての項目がAccess deniedになっています。

OrganizationAccountAccessRole

子のアカウント作成と同時に、OrganizationAccountAccessRoleが自動的に子のアカウントに作成されます。これは管理アカウントのユーザーが子のアカウントにアクセスするときに使用するIAM Roleです。

信頼ポリシーが以下のようになっています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<管理アカウントのID>:<管理アカウントのアカウント名>"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

デフォルトでPermissionsはAdministratorAccessとなっています。これは変更が可能です。

管理アカウントから子アカウントへのログイン

さて、このIAM Roleを利用して、管理アカウントから子アカウントにアクセスします。画面右上の自分のアカウント名からSwitch roleを押します。以下のように入力してロールを切り替えます。

Account ID<子アカウントのアカウントID>
IAM role nameOrganizationAccountAccessRole

これは上のようにルートユーザーを作成しなくてもできます(OrganizationAccountAccessRoleの内容からもわかりますね)。

お片付け

親アカウントのOrganizationsコンソールから子アカウントの画面にいき、Closeを押します。

terraform

時間があるときにterraformコードを書いて公開したいと思います。

CTAサンプル

これはCTAサンプルです。
内容を編集するか削除してください。