Amazon Web Services ブログ

AWS Service Catalog、AWS Organizations、AWS Lambda を使用して、アカウントの作成とリソースのプロビジョニングを自動化する

組織が AWS のサービスの使用を拡大するにつれて、ビジネスプロセスの分離またはセキュリティ、コンプライアンス、請求のために複数の AWS アカウントを作成する必要性についてしばしば語られます。私たちが仕事をしている多くのお客様は、各ビジネスユニットで別々の AWS アカウントを使用しているため、組織のさまざまなニーズに対応できます。複数のアカウントを作成すると、運用上の問題が簡素化され、セキュリティやリソースの分離、トラブルの影響の到達範囲の縮小、請求の簡素化などの利点が得られますが、ベースライン設定の作成、ブートストラップ、設定に時間がかかります。お客様は、アカウントの作成とブートストラップをスケーラブルかつ効率的な方法で管理して、定義済みのベースラインを使用して新しいアカウントを作成し、ガバナンスガードレールを配置したいと考えています。最も重要なことは、時間とリソースを節約するために、お客様が自動化を望んでいることです。このブログ記事では、一般的なガードレールを自動化し、デフォルトユーザーの作成、カスタムネットワークの設定、AWS のサービスのキュレーションセットを使用した製品の既存の AWS 環境へのプロビジョニングなどのタスクを設定することにより、アカウントの作成と設定を自動化する方法を紹介します。このブログは、前のブログ記事  AWS Organizations を使用してエンドツーエンドのアカウント作成を自動化する方法で説明した実装を拡張します。

このブログ記事で説明されている AWS のサービス:

  • AWS Organizations は、複数の AWS アカウントのポリシーベースの管理を提供します。AWS Organizations を使用すると、アカウントのグループを作成し、アカウント作成を自動化し、それらのグループのポリシーを適用および管理できます。
  • AWS Service Catalog は、AWS での使用が承認されているサービスのカタログを作成および管理できます。
  • AWS CloudFormation は、クラウド環境のすべてのインフラストラクチャリソースを記述およびプロビジョニングするための共通言語を提供します。AWS CloudFormation を使用すると、シンプルなテキストファイルを使用して、すべてのリージョンとアカウントにわたってアプリケーションに必要なすべてのリソースを自動化された安全な方法でモデリングおよびプロビジョニングできます。
  • AWS Lambda を使用すると、サーバーのプロビジョニングや管理を必要とせずにコードの実行が可能になります。料金は消費したコンピューティングの時間分だけを支払います。コードが実行されていない場合は無料です。

このブログ記事で使用されている用語:

  • ルートアカウント – アカウントビルダーが AWS Service Catalog 製品として起動される単一の AWS アカウント。新しく構築されるすべてのアカウントは、このアカウントで実行されている AWS Organizations のルートの下に作成されます。
  • ベースラインテンプレート – このテンプレートには、新しく作成されたアカウントの AWS Service Catalog ポートフォリオで AWS Service Catalog 製品として利用できるようになる AWS のサービスのリストがあります。
  • ソースバケット– ベースラインテンプレートを保持するマスターアカウントの Amazon S3 バケット。
  • プロビジョニングされた製品 – AWS でプロビジョニングされた製品は、単一のユニットとして管理する 1 つ以上のクラウドリソース (コンピューティングインスタンス、データベース、ネットワークコンポーネントなど) です。
  • ペイロード – アカウントを構築し、AWS Service Catalog 製品をプロビジョニングするための AWS Lambda コード。

アカウントビルダーは、AWS Lambda と AWS Organizations API を使用して AWS アカウントを作成する AWS Service Catalog 製品です。呼び出しごとに、このサンプルソリューションで使用される AWS Lambda 関数は以下を実行します。

  1. 新しい AWS アカウントを作成します。
  2. 提供されている場合は、AWS Organizations のルートアカウントの下に組織単位を作成します。
  3. 新しく作成したアカウントを組織のルートから新しく作成した組織単位に移動します。
  4. サービス制御ポリシーを作成し、それを新しいアカウントにアタッチします。
  5. 以下の新しいアカウントの OrganizationAccountAccessRole ロールを想定します。
    • 指定されたパスワードで IAM ユーザーを作成する。
    • 管理者権限を持つ新しいグループに IAM ユーザーを追加する。
    • AWS Service Catalog のポートフォリオと製品を作成するためのベースラインテンプレートをデプロイする。
    • すべての AWS リージョンのデフォルト VPC を削除する。
    • 提供されたパラメーターを使用してカスタム VPC をデプロイする。
    • 新しく作成したアカウント内で AWS Service Catalog の製品とポートフォリオを作成する。
    • 作成された AWS Service Catalog ポートフォリオに、提供された IAM ユーザーと IAM ロールをプリンシパルとして追加する。

アカウントをブートストラップするこのアプローチは、運用のオーバーヘッドを削減し、プロビジョニングされた AWS アカウント全体でアカウント設定を標準化します。以下のアーキテクチャは、アカウントの構築に関連するプロセスフローの概要を示しています。

このブログ記事では、以下の方法を示します。

  1. 新しい AWS アカウントを構築する AWS Service Catalog 製品を作成する。
  2. カスタムパラメータを使用して、すべて新しいアカウント内に IAM ユーザー、IAM ロール、IAM グループを作成する。
  3. すべての AWS リージョンのデフォルト VPC を削除する。
  4. ベースラインテンプレートで定義されている AWS Service Catalog 製品とポートフォリオを作成し、作成された AWS アカウントに追加する。

ステップ 1 – 前提条件

  1. 以下のファイルをダウンロードします。
  2. アカウントビルダーを AWS Service Catalog 製品として作成するユーザーには、AWS Service Catalog のポートフォリオと製品を管理するための AWSServiceCatalogEndUserFullAccess ロールが必要です。
  3. この製品は、AWS Organizations のルートアカウントだけにデプロイする必要があります。
  4. ROOT アカウントで AWS Organizations のすべての機能を有効にします。

ステップ 2 – 新しい AWS アカウントを構築するための AWS Service Catalog 製品を作成します。

    1. AWS マネジメントコンソールで、ROOT アカウントにログインします。
    2. Amazon S3 バケットを作成し、AccountCreationLambda.zip および Accountbaseline.yml ファイルをアップロードします。このアカウント構築プロセスでは、ソースバケットまたはファイルを公開する必要はありません。
    3. Accountbaseline.yml ファイルは、新しいアカウントが利用可能になったときに必要となるベースライン設定を定義します。
    4. AWS Service Catalog コンソールに移動し、[portfolio list] を選択します。
    5. [Create Portfolio] を選択して、ポートフォリオ名を「AccountFactory」と入力します。[Create] を選択する前に、[Description] と [Owner] を指定します。ポートフォリオの作成と削除の詳細については、ポートフォリオの作成と削除を参照してください。
    6. ポートフォリオのリストに新しいポートフォリオが表示されます。

  1. 7.次の手順に従って、accountbuilder.yml ファイルを使用して、新しい製品を AccountFactory ポートフォリオにアップロードします。
    • AccountFactory ポートフォリオに移動し、[UPLOAD NEW PRODUCT] を選択します。
    • 詳細を適切に指定します。
      • Product Name: AccountBuilder
      • Description: アカウント構築製品
      • Provided by: MyOrg
      • Vendor: [Next] を選択
      • Email Contact:<有効な E メールアドレスを指定>
      • Support Link: オプション
      • Support Description: オプション
      • Select Template: コンピューターにダウンロードした accountbuilder.yml ファイルを選択し
      • Version Title: 1.0
      • Description: アカウント構築製品。
      • [次へ] を選択します。
      • 指定した詳細を確認し、[Create] を選択します。

Service Catalog 製品の作成手順の詳細については、ドキュメントの製品の追加トピックを参照してください。

ステップ 3 – ユーザーにアクセスを許可して、AWS Service Catalog 製品を開始する

これらの手順に従って、作成した製品を開始するために、アカウントビルダーをプリンシパルとして使用して AWS アカウントを作成するために必要な特権を持つすべてのエンドユーザーを追加します。

  1. AccountFactory ポートフォリオに移動します。
  2. [Add user, group or role] セクションを展開します。
  3. [Add user, group or role] セクションを選択します。
  4. [Users] タブへ移動します。
  5. ログインしているユーザーに AccountFactory ポートフォリオへのアクセスを許可します。

ユーザーへのアクセス許可の詳細については、ユーザーへのアクセス許可を参照してください。

ステップ 4 – AccountBuilder 製品を開始する

  1. 前に作成した AccountBuilder 製品を使用して AWS アカウントを作成するには:
    • 左側のナビゲーションバーで最初の [Products List] リンクを選択します。
    • AccountBuilder 製品の横にある [Launch product] を選択します。

  1. [Launch – AccountBuilder] ページで、以下を行います。
    • Product name を「New-AWS-Account」と指定します。
    • 1.0 バージョンを選択します。
    • [次へ] を選択します。

  1. [Parameters] ページで、次のパラメータを指定します。
    • accountemail: admin@example.com
      • 注意: 以後の通知を受け取るために、上記で指定した E メールアドレスにアクセスできることを確認してください。
      • アカウントのルートユーザーとしてサインインするために使用できるため、必ず一意のE メールアドレスを入力してください。
    • organizationunitname :  NewDevOU
      • 注意: デフォルト値は「None」ですが、指定されている場合、新しいアカウントはこの「AWS Organization – Organization Unit」に移動されます。
    • accountname: New-AWS-Account
    • adminusername: <アカウントで作成する IAM ユーザー>
    • adminpassword : <adminusername のパスワード>
    • stackname: <新しく構築されたアカウントのベースラインスタックの名前を指定>
    • stackregion: <ベースラインテンプレートから AWS ソリューションをデプロイするリージョン。注意: AWS リージョンが、S3 バケットを作成したリージョンと同じであることを確認します (ステップ 2)。>
    • sourcebucket: ステップ 2 で作成した AccountCreationLambda.zip および Accountbaseline.yml ファイルを保持するソースバケットの名前。
    • baselinetemplate: 新しいアカウントに適用されるベースライン設定を含むテンプレート。例では、Accountbaseline.yml です。
    • newrole: <アカウントで作成される新しいロールの名前>
    • newrolepolicy:
       {"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "*","Resource": "*"}]}
      • 注意: このポリシーは、作成される新しいロールに適用されます。Json が唯一の有効な形式です。
      • ここで提供されるサンプルポリシーは、作成された newrole を引き受けるユーザーに管理アクセスを提供します。

デフォルトでは、ロール OrganizationAccountAccessRole は、アカウント作成プロセスの一部として作成されます。適切なアクセス許可を持つルートアカウントユーザーは、必要に応じて、追加の設定を実行するために新しく構築されたアカウントでこのロールを引き受けることができます。

    • カスタム VPC を作成するアベイラビリティーゾーンを選択します。 これらのアベイラビリティーゾーンは、以前に stackregion パラメータで選択したのと同じ AWS リージョンにある必要があります。たとえば、stack-region を us-west-2 と選択した場合、アベイラビリティーゾーンは us-west-2a、us-west-2b、us-west-2c (いずれか 2 つ) を選択します。
      • 注意: stackregion パラメータで選択した AWS リージョンが、アベイラビリティーゾーンが存在するリージョンと異なる場合、エラーが発生する可能性があります
        アベイラビリティーゾーン
    • VPC 設定でパラメータの CIDR 範囲を指定することにより、IP アドレス範囲を定義できます。パブリックサブネットとプライベートサブネットの VPC CIDR ブロックと CIDR 範囲を指定するオプションがあります。

vpc の設定

    • [Next] をクリックします。
    • オプション: [TagOptions] ページで、タグの値を指定します。
    • [Next] をクリックします。
    • [Notifications] ページで [Next] をクリックします。セットアップ通知を希望する場合は、Amazon Simple Notification Service のドキュメントを参照してください。
    • 入力した詳細を確認し、[Launch] を選択します。
    • 開始した後、アカウントビルダー製品は、AccountbuilderLambda という名前の AWS Lambda 関数を作成します。また、LambdaExecuteRole という IAM ロールを作成し、AccountbuilderLambda にアタッチします。
    • LambdaExecuteRole は、マスターアカウントの AWS Organizations および AWS Lambda にアクセスするための AccountbuilderLambda にアクセス許可を付与するサービスロールです。
    • AccountbuilderLambda は自身を呼び出すように設定されており、新しい AWS アカウントが作成されます。
    1. 自己呼び出しの一部として、AccountbuilderLambda は、新しい AWS アカウントを作成するマスターアカウントで AWS Organizations API を呼び出します。

    • OrganizationAccountAccessRole は、アカウント作成の一部として作成されます。
    • 新しいアカウントの準備が整うと、AccountbuilderLambda は OrganizationAccountAccessRole を想定し、ソース Amazon S3 バケットから Accountbaseline.yml ファイルを取得します。
    • 引き受けたロールで、AccountbuilderLambda はベースラインネットワーク設定の更新を行います。
      • すべてのリージョンでデフォルト VPC を削除します。
      • 指定されたパラメータでカスタム VPC を作成します。
      • IAM ロールを作成し、提供されたカスタムポリシーをアタッチする
    1. アカウントをベースライン化した後、AccountbuilderLambda はこれらのカスタムリソースをデプロイすることで機能します。
      • IAM ユーザーを作成します。
      • ユーザーを 管理者権限を備えたグループに追加します。
      • AWS Service Catalog ポートフォリオと製品を作成します。
      • 作成した製品をポートフォリオに追加します。
      • AWS Service Catalog ポートフォリオ内で作成された製品を開始するためのプリンシパルとして IAM ユーザーを追加します。
    2. アカウントビルダー製品が正常に開始すると、プロビジョニングされた製品の詳細を説明する出力画面が表示されます。

    • LoginURL をクリックすると、新しく作成された AWS アカウントにログインできます。
      ログイン後、URL (https://console.thinkwithwp.com/servicecatalog) をクリックして、ポートフォリオおよび Service Catalog 製品を表示できます。スタックがデプロイされたリージョンに移動して、ポートフォリオおよび Service Catalog 製品を表示します。
  1. このプロセスの最後に、新しく作成された AWS Service Catalog ポートフォリオには以下が含まれます。
    • Amazon EMR
    • Amazon RDS
    • Amazon S3
    • Amazon VPC

デプロイされた AWS Service Catalog 製品は、カスタム AWS CloudFormation テンプレートに基づいています。AWS Marketplace 製品をポートフォリオに追加して、エンドユーザーが利用できるようにすることができます。AWS Marketplace は、データベース、アプリケーションサーバー、テストツール、モニタリングツール、コンテンツ管理ツール、ビジネスインテリジェンスソフトウェアなどの製品を含むオンラインストアです。

また、AWS Service Catalog は、AWS Service Catalog in a box オプションを介してサンプル製品のリファレンスブループリントも提供します。AWS Service Catalog in a box により、Service Catalog ポートフォリオの所有者は、AWS のサービスの特定のユースケースに基づいたコレクションから製品を選択して共有することができます。どのように製品を選択しても、AWS リソースを AWS Service Catalog 製品として開始すると、エンドユーザーにとってワンクリックアクションになります。さらに、インフラストラクチャの標準化もサポートしています。

まとめ

このブログ記事は、組織の要件に合わせてカスタマイズできる AWS アカウントのオンデマンド作成を可能にする方法を示しています。新しいアカウントのプロビジョニングが必要な管理者やチームは、このアプローチを使用して、新しいアカウントの使用準備が整ったときにプロビジョニングされるネットワーク設定とリソースを標準化できます。

参考文献

著者について

Vinay Kuchibhotla は、太平洋岸北西部 AWS プロフェッショナルサービスチームのコンサルタントです。Vinay は、クラウドネイティブサービスを活用して、AWS のお客様のアーキテクチャ上の課題について対話し、解決することを楽しんでいます。彼の中心的なテーマは、クラウドのストレージ、コンピューティング、ネットワーキングの分野です。余暇には、彼は旅行と写真の活動で楽しんでいます。

 

 

 

Sandeep Kashyap は、AWS Service Catalog の上級ビジネス開発マネージャーです。Sandeep は、運用の拡張に役立つ革新的なソリューションを構築することで、お客様がクラウド運用モデルを最適化できるよう支援しています。