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

上の図のようにツリー構造になっており、全体を組織、根をルート、節を組織単位(OU)、葉をアカウント(そのうちの一つが管理アカウント)という。このように複数のアカウントをグループ分けして一括で管理します。
具体的に管理できる内容は、
- ポリシーを適用する
- 請求を一括化する
- そのほかOrganizationsと統合できるサービスを利用して一元管理する(https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_integrate_services_list.html)
となっています。
これらのサービスは無料で使用できます。
組織を作成する

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

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 name | OrganizationAccountAccessRole |
これは上のようにルートユーザーを作成しなくてもできます(OrganizationAccountAccessRoleの内容からもわかりますね)。
お片付け
親アカウントのOrganizationsコンソールから子アカウントの画面にいき、Closeを押します。
terraform
時間があるときにterraformコードを書いて公開したいと思います。
これはCTAサンプルです。
内容を編集するか削除してください。