Amazon Web Services ブログ
AWS Service Catalog、DynamoDB、Lambda、および CloudWatch イベントを使用して、一元化されたタグのコンプライアンスを実施する
AWS のパートナーソリューションアーキテクト、Sagar Khasnis 著
Brillio のクラウドアーキテクト、Arilleendra Tiwari 著
私たちが協力しているお客様の中には、タグ値を保持する中央データベースを持っており、AWS Service Catalog のタグ実施機能を使用して、プロビジョニング時にタグを実施したいと考えているお客様もいます。
たとえば、絶えず更新されるすべてのコストセンター情報をすべて保持する中央の場所を持っていて、その情報を AWS Service Catalog ポートフォリオのタグ値として使用するお客様もいるかもしれません。
この記事では、新しいタグが Amazon DynamoDB に追加されたときにタグオプションライブラリが自動的に更新されるように、タグオプションを適用する方法を紹介します。このソリューションを使用すると、エンドユーザーが起動したすべての AWS Service Catalog 製品に、組織で定義した標準の値のセットが自動的にタグ付けされます。
Brillio は、AWS パートナーネットワーク (APN) のアドバンストコンサルティングパートナーです。 AWS と協力して、数十億ドル規模のエンタープライズ IT 運用の再構築と再編成に取り組み、最新の俊敏なデジタルインフラストラクチャ運用を実現しています。
たとえば、Brillio は最近の AWS WorkLink ローンチで紹介された 5 つの APN パートナーの 1 社であり、企業が安全なエンタープライズモビリティを促進するのをサポートすることを目指しています。
AWS のサービスと定義
以下は、必要な AWS のサービスの簡単な確認と、記事全体で使用するいくつかの専門用語です。専門用語は、このタグ実施ソリューションを理解するために必要となります。
AWS Service Catalog により、組織は AWS での使用が承認されている IT サービスのカタログを作成および管理できます。AWS Service Catalog に関連する主要な概念は次のとおりです。
- Service Catalog 製品は、設定情報と一緒に AWS でのデプロイに利用できるようにしたい AWS リソースを構築するためのブループリントです。AWS CloudFormation テンプレートまたは AWS Marketplace AMI をインポートして製品を AWS Service Catalog にコピーすることにより、製品を作成します。製品は複数のポートフォリオに属することができます。詳細については、ドキュメントをご覧ください。
. - ポートフォリオは、設定情報を含む製品のコレクションです。ポートフォリオを使用して特定の製品へのユーザーアクセスを管理したり、AWS Identity and Access Management (IAM) ユーザー、グループ、およびロールレベルでポートフォリオアクセスを許可したりできます。詳細については、ドキュメントをご覧ください。
. - プロビジョニングされた製品は、作成された AWS リソースを備えた CloudFormation スタックです。エンドユーザーが製品を起動すると、AWS Service Catalog は CloudFormation スタックの形式で製品をプロビジョニングします。詳細については、ドキュメントをご覧ください。
. - 制約は、ユーザーが製品をデプロイする方法を制御します。起動制限を使用すると、ポートフォリオから製品を起動するために AWS Service Catalog が引き受けることができるロールを指定できます。詳細については、ドキュメントをご覧ください。
. - TagOption は、AWS Service Catalog で管理されるキーと値のペアです。これは AWS タグではありませんが、TagOption に基づいてタグを作成するためのテンプレートとして機能します。これらの TagOptions は、プロビジョニングされた製品に AWS タグとして適用されます。
Amazon DynamoDB は、シームレスなスケーラビリティを持ち、高速かつ予測可能なパフォーマンスを提供するフルマネージドの NoSQL データベースサービスです。
AWS Lambda は、サーバーをプロビジョニングまたは管理することなく、コードを実行できるコンピューティングサービスです。
Amazon CloudWatch Events は、AWS リソースの変化を表すほぼリアルタイムのシステムイベントのストリームを配信します。数分で設定できるシンプルなルールを使用して、各タイプのイベントを 1 つ以上のターゲットに簡単にルーティングできます。
ソリューションの概要
これは、タグ適用プロセスのアーキテクチャ図です。
図 1 – AWS Service Catalog、Lambda、DynamoDB、および CloudWatch イベントを使用したタグ適用アーキテクチャ。
このサンプルソリューションは、AWS 環境でタグの適用を設定し、次のプロセスを実行するのに役立ちます。
- DynamoDB テーブルに新しく追加されたタグを同期する
- DynamoDB に新しいタグペアを追加すると、TagSync Lambda 関数がトリガーされ、TagOption ライブラリに同じタグペアが作成されます。
- さらに、前のステップで作成された TagOption は、既存のすべてのポートフォリオに関連付けられます。
- DynamoDB テーブルからのタグの削除を同期する
- DynamoDB からタグペアを削除すると、TagSync Lambda 関数がトリガーされ、関連するすべてのポートフォリオから対応する TagOption の関連付けが解除され、TagOption ライブラリから削除されます。
- DynamoDB テーブルの更新されたタグを同期する
- DynamoDB でタグペアを更新すると、TagSync Lambda 関数がトリガーされ、対応する TagOption、TagOption ライブラリ、および関連するすべてのポートフォリオが更新されます。
- すべての TagOptions を新しいポートフォリオに自動的に適用する
- 新しい AWS Service Catalog ポートフォリオを作成すると、Cloudwatch イベントによって TagEnforcement Lambda 関数がトリガーされ、TagOption ライブラリのすべての TagOptions が新しく作成されたポートフォリオに関連付けられます。
このメカニズムにより、DynamoDB に追加されたすべてのタグが確実に AWS Service Catalog TagOption ライブラリに追加され、既存のポートフォリオにアタッチされます。さらに、新しく作成されたポートフォリオには、TagOption ライブラリ内のすべての TagOptions が自動的に含まれます。
セットアップ
AWS Service Catalog ポートフォリオの自動タグ適用を許可する前に実行する必要がある基本的なアクションがいくつかあります。次の手順では、AWS マネジメントコンソールを介して AWS リソースへの管理者アクセスが必要です。
- 自動タグ実施ソリューションをデプロイする AWS リージョンにログインします。
- AWS Service Catalog がその AWS リージョンでサポートされていることを確認します。
- AWS Service Catalog 管理者アクセスがあることを確認します。
- 次のボタンを使用して、選択したリージョンでタグ適用の自動化をセットアップできます。リージョンを選択していない場合は、米国東部 1 (バージニア北部) が選択されます。
.
- CloudFormation の詳細画面に、次のパラメータがリストされます。これらのパラメータにリストされているデフォルト値を使用して、[次へ] をクリックします。
- BucketName: このサンプルで使用される、tagEnforcement.zip および tagSync.zipの 2 つの Lambda 関数の Lambda コードを含む Amazon Simple Storage Service (Amazon S3) バケットの名前。リストされているデフォルト値を使用できます。
- TagSyncLambdaName: Amazon S3 バケット内のタグ同期 Lambda 関数 (AWS Service Catalog TagOptions と DynamoDB を同期する) のファイル名。リストされているデフォルト値を使用できます。
- TagEnforcementLambdaName: Amazon S3 バケット内のタグ適用 Lambda 関数のファイル名。リストされているデフォルト値を使用できます。
- RoleName: タグの実施と同期の Lambda 関数用に作成された実行ロールの名前を入力します。リストされているデフォルト値を使用できます。
- CloudWatchRuleName: 新しい AWS Service Catalog ポートフォリオの作成時に TagSyncLambda をトリガーする Amazon CloudWatch ルールの名前を入力します。リストされているデフォルト値を使用できます。
- [詳細の指定] ページと [オプション] ページで [次へ] をクリックしてから、チェックボックスをオンにして、AWS Identity and Access Management (IAM) リソースの作成を確認します。
- 最後に、[作成] をクリックして、タグ適用インフラストラクチャをセットアップします。
このソリューションのすべてのアーティファクトは、aws-samples github リポジトリで入手できます。
ソリューションをテストする
以下の手順に従って、タグ適用の自動化が正確に実行されていることを確認します。
ステップ 1: DynamoDB にタグ値を追加する
- 初期設定セクションの CloudFormation テンプレートから作成された DynamoDB テーブルに移動します。[アイテム] タブで、次の値を追加します。
- KEY=Name、VALUE=Tag-Enforcement
- KEY=Team、VALUE=Operations
- KEY=Cost Center、VALUE=100
- KEY=Cost Center、VALUE=200
図 2 – タグ値を入力した後の DynamoDB テーブルの外観。
ステップ 2: DynamoDB からの最新のタグについて TagOption ライブラリを確認する
- ステップ 1 は TagSync Lambda 関数をトリガーし、DynamoDB から AWS Service Catalog TagOption ライブラリに値をコピーします。
- この時点で、AWS Service Catalog の TagOption ライブラリには、以下のスクリーンショットに示すように、DynamoDB テーブルの tagOptions が自動的に含まれているはずです。
図 3 – DynamoDB タグを含む AWS Service Catalog の tagOption ライブラリ。
ステップ 3: AWS Service Catalog ポートフォリオを作成する
- タグ適用自動化インフラストラクチャをセットアップするリージョンで、「デモポートフォリオ」と呼ばれる AWS Service Catalog ポートフォリオを作成します。
- このステップにより、CloudWatch イベントがトリガーされ、タグ適用 Lambda 関数がトリガーされます。これにより、TagOption ライブラリ内のすべてのタグが新しいポートフォリオに適用されます。
図 4 – AWS Service Catalog に新しいポートフォリオを作成するプロセス。
ステップ 4: DynamoDB に新しいタグを追加する
- タグの DynamoDB テーブルに移動し、次の値をテーブルに追加します。
- KEY=Operation、VALUE=Addition
図 5 – 新しいタグを追加した後の DynamoDB テーブルの外観。
ステップ 5: DynamoDB に追加する新しく作成されたポートフォリオを確認する
- 「デモポートフォリオ」に戻って、それに関連付けられている tagOptions を確認します。
- 以下の画像に示すように、DynamoDB で新しく作成したタグは AWS Service Catalog ポートフォリオに関連付けられます。
図 6 – DynamoDB に新しく追加されたタグで更新された AWS Service Catalog ポートフォリオ。
ステップ 6: エンドユーザーとして AWS Service Catalog ポートフォリオから製品を起動する
- 「Amazon Elastic Compute Cloud (EC2) Windows」という名前のサンプル製品を追加し、それをエンドユーザーに割り当てました。前のステップのポートフォリオ詳細画面で、IAM ユーザー、グループ、またはロールをポートフォリオに割り当てることができます。
- エンドユーザーが EC2 製品を起動すると、前のステップの tagOptions がアタッチされます。
図 7 – 製品の起動中の AWS Service Catalog の tagOptions 画面。
注意
このサンプルソリューションを使用する場合は、次の考慮事項に留意してください。
- 既存の TagOptions が AWS Service Catalog から DynamoDB にインポートされることはありません。
- TagOptions ライブラリのすべての TagOptions が DynamoDB で作成されることを想定しており、AWS Service Catalog で TagOptions が手動で作成されるケースは考慮していません。
- DynamoDB テーブルで同じ TagOptions が作成されない限り、手動で作成された TagOptions に干渉しません。
このソリューションを拡張してポートフォリオ固有のタグをサポートすることができます。これは、DynamoDB にポートフォリオ ID 列を追加し、TagSync および TagEnforcement Lambda 関数のロジックを更新することで行えます。
このソリューションの拡張方法についてご意見がございましたら、aws-sa-servicecatalog@amazon.com までお寄せください。
まとめ
この記事では、Amazon DynamoDB を使用して AWS Service Catalog タグオプションライブラリを動的に更新する方法の例を示しました。事前定義された CloudFormation テンプレートを使用してソリューションアーキテクチャをデプロイする方法と、テストシナリオを実行して DynamoDB タグが AWS Service Catalog の TagOptions ライブラリおよびポートフォリオと自動的に同期できるようにする方法を示しました。
さらに、拡張することで、独自のコンプライアンスユースケースに対してこのソリューションに適用できる可能性があることを示しました。この演習は、タグコンプライアンス戦略の出発点となり、さらにエンドユーザーが起動するすべての AWS Service Catalog 製品が組織によって定義された標準の値のセットでタグ付けされるようにすることを目的としています。
この記事で説明されているソリューションの実装についてご質問がある場合は、AWS サポートまでお問い合わせください。