コマンド一発でAWSアカウントを作成する~AWS Organizationsを利用するための事前準備を添えて~
はじめに
中山(順)です
AWSを大規模に利用している場合、複数のアカウントを用途に応じて使い分ける戦略を採用している組織も多いと思います。 でも、AWSアカウントの作成は結構面倒ですよね。 具体的には以下のような作業が発生します。
- アカウント用のメールアドレスの準備
- 連絡先情報の入力
- クレジットカード情報の入力
- 電話認証
- サポートプランの変更
めんどい・・・。 しかし、今ならAWS Organizationsというサービスがあります! もうリリースされてから1年半も経過しています。
このサービスを使えば、(全てではありませんが)アカウント作成の手間を削減することが可能です。
今回はコマンドでAWSアカウントを作成する方法およびその前提条件や注意事項をまとめました。
AWS Organizationsとは
まずはAWS Organizationsについて概要を説明します。
AWS Organizationsを利用することにより、AWSアカウントを容易に作成したり、組織というリソースに対して複数のAWSアカウントを紐付けることで支払いの集約やアクセス制御を行うことができます。 アカウントを集約するためのマスターアカウントを中心にそれ以外のAWSアカウント(メンバーアカウント)を組織に紐付けることで管理します。
主に以下のような機能を提供します。
- アカウントの作成
- 一括請求
- 各アカウントがアクセスできる AWS サービスと API アクションのコントロール
- アカウントの階層的なグループ化によりポリシーの適用範囲を制御
- その他サービスとの連携
- AWS SSO
- AWS Firewall Manager
- AWS Config
アカウントの作成、招待
組織内に新規AWSアカウントを作成することが可能です。 作成は、マネージメントコンソールおよびCLI/SDKで行うことが可能です。 また、作成済みのアカウントを組織に招待することも可能です。
一括請求
組織に含まれるAWSアカウントの請求をマスターアカウントに一本化できます(RIやAWSサポートの初回支払いを除いて請求書が月1枚になります)。 従来はConsolidated Billingとして提供されていた機能ですがOrganizationsに統合されました。
SCP(Service Control Policy)
組織内のアカウントにおいて実行可能な操作をサービスコントロールポリシーとして定義できます。
OrganizationsではAWSアカウントをグルーピングするための概念としてOU(Organizational Unit : 組織単位)というリソースが定義されています。 OUは最大5階層のツリー構造で関係を表現することができます。
SCPはOUに対して割り当てることができ、ポリシーを割り当てたOU内のアカウントにポリシーが適用されます。 また、配下のOUに対してもポリシーが継承されます。 ポリシーはアカウントに対して直接割り当てることも可能です。 ちなみに、SCPを利用したい場合には組織を作成する際に機能セットとして"All Features"を選択する必要があります。
AWSのAPIに対するリクエストの可否を評価する際、IAMとOrganizationsの両方で許可されたアクションのみ実行可能です。 本番環境への適用を検討する際には事前に十分な評価を実施してください。
やってみた
今回は組織の作成とメンバーアカウントの作成までをやってみたいと思います。
メンバーアカウントの作成はAWS CLIで実行します。
前提条件
以下の状態を前提として説明を進めます。
- マスターアカウントを作成しておくこと
- マスターアカウントのIAMユーザーがOrganizationsのアクションを実行できる権限を有していること
- 今回は"AdministratorAccess"(AWS ManagedなIAM Policy)をアタッチしたIAMユーザーで作業を実施
用意しておくもの
AWSアカウントの作成にあたり、以下のものを準備します。
- 新規メンバーアカウント用のメールアドレス
ちなみに、メールアドレスはメンテナンス通知などにも利用されるためAWSアカウントの管理者が確実に受信できるようにする必要があります。 ただし、重複はNGです。 AWSアカウントのために通常のメールアドレスを発行するのはコスト的にもったいないです。 Office 365であればGroupsを利用するといいでしょう。 グルーブごとに受信可能なメールアドレスを取得することが可能になります。 AWSアカウントの管理者はもれなくグループのメンバーとなることでAWSからのメールを受信可能になります。 その際にはグループへの参加権限やメンバーのメールボックスにメールをコピーするかどうかの設定などに留意しましょう。
Create an Office 365 group in the admin center
ちなみに、Office 365 Groupsでは1ユーザあたり250のグループを作成可能です。 通常の組織であればこれで十分かと思います。
G suiteでも同様のことは可能です。
ちなみに、G Suiteの限界を突破すると以下のブログ記事のようになり得ます。 普通であれば「こうはならんやろ」という規模ですが、普通じゃない規模の組織の方はご覧頂くとよいと思います。
組織の作成
アカウントを作成する前に、Organizationsを利用するために「組織」というリソースを作成します。
組織の作成
まず、AWS Organizationsのコンソールにアクセスします。
組織が作成されていない場合、以下のような画面が表示されますので「組織の作成」をクリックします。
ダイアログが表示されますので、「有効化 すべての機能」もしくは「一括請求のみを有効化」のいずれかを選択します。 今回は「有効化 すべての機能」を選択します。
組織の作成(確認)
これで組織の作成は完了です。
それでは、組織の作成直後の状態を確認しておきましょう。
まず、組織に含まれるAWSアカウントを確認します。 組織の作成直後はマスターアカウントのみが組織に含まれる状態となります(組織の作成を実行するアカウントがマスターアカウントになります)。 マスターアカウントには行の頭に★マークが表示されます。
次に「アカウントの整理」というタブを確認します。
ここではOU(組織単位)を確認できます。 組織の作成直後には、"Root"というOUのみが存在します。 その名の通り階層の頂点に位置するOUです。 Rootにはマスターアカウントが含まれます。
また、サービスコントロールポリシーはOrganizationsの機能を全て有効化した場合でもデフォルトでは無効になっています。 利用開始前に有効化してください。
最後に、「ポリシー」のタブを確認します。
ここでは、サービスコントロールポリシーの定義およびアカウントやOUへのアタッチ状況を確認できます。 デフォルトでは"FullAWSAccess"というポリシーのみが定義されています。 この記事はサービスコントロールポリシーが主題ではないので、詳細な説明は割愛します(後日、サービスコントロールポリシーについてもブログを書きます)。
アカウントの作成
ここまでの作業でアカウントの作成が可能になりました。 AWSアカウントを作成してみましょう。
アカウントの作成
今回はAWSアカウントの作成を繰り返し実行するような方に向けてAWS CLIでの作業手順をご紹介します。
コマンドリファレンスはこちらです。
アカウントの作成は以下のように実行できます。
EMAIL_ADDRESS="aws-member01@example.com" ACCOUNT_NAME="aws-member01" ROLE_NAME="default-role-by-organizations" BILLING_ACCESS="ALLOW" # ALLOW | DENY aws organizations create-account \ --email ${EMAIL_ADDRESS} \ --account-name ${ACCOUNT_NAME} \ --role-name ${ROLE_NAME} \ --iam-user-access-to-billing ${BILLING_ACCESS}
{ "CreateAccountStatus": { "RequestedTimestamp": 1526897892.412, "State": "IN_PROGRESS", "Id": "car-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "AccountName": "aws-member01" } }
コマンドの実行直後はAWSアカウントは作成中のステータスです。 以下のコマンドでアカウント作成のステータスを確認できます。
ID="car-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" aws organizations describe-create-account-status \ --create-account-request-id ${ID}
{ "CreateAccountStatus": { "AccountName": "aws-member01", "State": "SUCCEEDED", "RequestedTimestamp": 1526897892.506, "CompletedTimestamp": 1526897896.716, "Id": "car-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "AccountId": "XXXXXXXXXXXX" } }
これだけです。簡単ですね。
アカウントの作成(確認)
では、作ったアカウントの初期状態を確認していきたいと思います。
まずは、マスターアカウントのOrganizationsのコンソールを確認してみましょう。
新たに作成されたアカウントを一覧から確認することが可能です。
また、新たに作成したAWSアカウントはRootのOUに所属します。
次に作成したAWSアカウントの中身を確認していきたいと思います。 そのためにマネージメントコンソールにログインしたいと思います。
・・・多くの方はここで疑問に思うでしょう。どうやってマネージメントコンソールにアクセスすればよいのか、と。
方法は一つだけではありませんが、AWSアカウント作成と同時に作成されるIAMロールを使ってスイッチロールするという方法があります。
アカウントを作成する際、"--role-name"というパラメーターを指定しました。 これはAWSアカウント作成と同時に作成されるIAMロールの名前を指定するためのパラメーターです。 これを使ってスイッチロールすることが可能です。
スイッチロールするためには、コンソール上部のメニューから「ロールの切り替え」を選択します。
表示された画面にて、作成したAWSアカウントのIDと指定したデフォルトのロール名を入力してロールの切り替えを実行します。 AWSアカウントのIDはアカウントの作成ステータスを確認するコマンドの戻り値から確認可能です。
無事にスイッチロールを行うことができました。
ちなみにデフォルトのロールには全てのリソースに対して全てのアクションが許可されています。
また、信頼されたエンティティとしてはマスターアカウントが設定されています(マスターアカウントからAssume Roleが可能です)。
ではAWSアカウントの設定を確認しておきましょう。 ここで、通常のAWSアカウントの作成フローを振り返ってみましょう。
- アカウント用のメールアドレスの準備
- 連絡先情報の入力
- クレジットカード情報の入力
- 電話認証
- サポートプランの変更
これを見て、私は以下の点が気になりました。
- AWSアカウント(メールアドレス)でマネージメントコンソールにログインできるか
- 連絡先の情報は(何も設定してないけど)どうなっているのか
- クレジットカード情報はどうなっているのか
ということで、実際に見てみましょう。
AWSアカウント(メールアドレス)でマネージメントコンソールにログインできるか
結論としては可能です。ただし、パスワードリセットが必要です。手順のご紹介は割愛しますが、ログイン画面からパスワードリセットの手順を開始することができます。
AWSアカウントでログインを行う機会は通常ほとんどありませんが一部の申請作業はAWSアカウントでのログインが今でも必要です。 この手順は予め確認しておきましょう。
連絡先の情報は(何も設定してないけど)どうなっているのか
マスターアカウントの設定がコピーされていました。
クレジットカード情報はどうなっているのか
メンバーアカウントには設定されていませんでした。 クレジットカード情報はマスターアカウント(支払いアカウント)のみで設定すればいいようです。
まとめ
AWS Organizationsを利用することでAWSアカウントを簡単に発行することができます。 特に大企業においては目的別にAWSアカウントを分ける戦略を採用している企業も多いかと思います。 このようにコマンド一発でAWSアカウントを作成できると、管理者の手間は大きく削減できるかと思います。
また、作成の手間が減ることもうれしいですが、クレジットカードの情報をAWSアカウント管理者が扱わなくていいので内部犯行による不正利用の懸念を払拭できるなどのメリットもあるかと思います。
今後もOrganizationsの記事をアップしていきますのでご期待頂けると幸いです。