AWS Lambda オートメーションを使用して 全体の Amazon EC2 エントリを AWS アカウント から削除 AWS Managed Microsoft AD する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Lambda オートメーションを使用して 全体の Amazon EC2 エントリを AWS アカウント から削除 AWS Managed Microsoft AD する

Amazon Web Services、Dr. Rahul Sharad Gaikwad、Tamilselvan P

概要

Active Directory (AD) は、ドメイン情報とネットワークサービスとのユーザーインタラクションを管理する Microsoft スクリプトツールです。これは、従業員の認証情報とアクセス許可を管理するために、マネージドサービスプロバイダー (MSP) の間で広く使用されています。AD 攻撃者は非アクティブなアカウントを使用して組織をハッキングしようとするため、非アクティブなアカウントを見つけて定期的なメンテナンススケジュールで無効にすることが重要です。を使用すると AWS Directory Service for Microsoft Active Directory、Microsoft Active Directory をマネージドサービスとして実行できます。このパターンは、非アクティブなアカウントをすばやく見つけて削除するように AWS Lambda 自動化を設定するのに役立ちます。

次のシナリオが組織に当てはまる場合、このパターンが役立ちます。

  • 一元化された AD 管理 – 組織に複数の があり AWS アカウント、それぞれに独自の AD デプロイがある場合、すべてのアカウントでユーザーアカウントとアクセス許可を一貫して管理するのは難しい場合があります。アカウント間の AD クリーンアップソリューションを使用すると、すべての AD インスタンスから非アクティブなアカウントを一元的に無効化または削除できます。

  • AD の再構築または移行 – 組織が AD デプロイを再構築または移行する場合、アカウント間の AD クリーンアップソリューションが環境の準備に役立ちます。このソリューションを使用すると、不要なアカウントや非アクティブなアカウントを削除し、移行プロセスを簡素化し、潜在的な競合や問題を減らしやすくなります。

このパターンを使用すると、次のような利点があります。

  • データベースとサーバーのパフォーマンスを向上させ、非アクティブなアカウントのセキュリティの脆弱性を修正します。

  • AD サーバーがクラウドでホストされている場合、非アクティブなアカウントを削除すると、パフォーマンスを向上させながらストレージコストを削減することもできます。帯域幅料金とコンピューティングリソースの両方が下がることがあるため、月額請求額が減る可能性があります。

  • クリーンな Active Directory を使用して、潜在的な攻撃者を阻止しましょう。

前提条件と制限

前提条件

  • アクティブな親アカウント AWS アカウント と 1 つ以上の子アカウント。このパターンでは、親アカウントは Active Directory が作成される場所です。子アカウントは Windows サーバーをホストし、親アカウントの Active Directory を介して結合されます。

  • ローカルワークステーションにインストールおよび設定されている Git。

  • ローカルワークステーションにインストールおよび設定されている Terraform。

  • AWS Managed Microsoft AD 親アカウントで設定され、すべての子アカウントと共有される ディレクトリ。詳細については、 AWS Directory Service 管理ガイド「チュートリアル: シームレスな EC2 ドメイン参加のための AWS Managed Microsoft AD ディレクトリの共有」を参照してください。

  • 仮想プライベートクラウド (VPC) ピアリング接続、または AWS Directory Service (親アカウント) の VPC と Amazon Elastic Compute Cloud (Amazon EC2) インスタンス (子アカウント) の VPC の間で利用可能な AWS Transit Gateway 接続。詳細は、AWS Directory Service 管理ガイドで「Configure a VPC peering connection between the directory owner and the directory consumer account」を参照してください。

  • すべての親アカウントと子アカウントで EC2WindowsUserdata スクリプトで設定された Windows マシン。スクリプトファイルは、このパターンのコードリポジトリのルートにあります。

  • 親アカウントからの AWS Lambda 関数の使用を許可する信頼ポリシーで設定された各子アカウントで使用可能なクロスアカウント AWS Identity and Access Management (IAM) ロール。詳細については、「Amazon EventBridge ユーザーガイド」の「Amazon EventBridge AWS アカウント での 間のイベントの送受信」を参照してください。 EventBridge

  • 親アカウントの Parameter Store AWS Systems Manager で使用できる次のシークレット値。

    • domainJoinUser – ディレクトリサービスのユーザー名

    • domainJoinPassword – ディレクトリサービスのパスワード

    シークレットの詳細については、「 AWS Secrets Manager ユーザーガイド」の「 AWS Secrets Manager シークレットの作成」を参照してください。

制限事項

  • 子アカウントでのリソースの作成は、Terraform では自動化されません。 AWS マネジメントコンソールを使用して、次のリソースを手動で作成する必要があります。

    • Amazon EC2 終了イベントを親アカウントに送信する Amazon EventBridge ルール

    • 信頼ポリシーを持つ子アカウントでの Amazon EC2 クロスアカウントロールの作成

    • VPC ピアリングまたは Transit Gateway 接続

  • 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS のサービス (リージョン別)」を参照してください。特定のエンドポイントについては、「Service endpoints and quotas」で、サービスのリンクを選択してご確認ください。

製品バージョン

アーキテクチャ

次の図は、ソリューションの高レベルアーキテクチャを示しています。

Lambda オートメーションを使用して、AWS アカウント間から EC2 エントリを削除するプロセス。

アーキテクチャ図は次のプロセスを示しています。

  1. 子アカウントで、EventBridge ルールはすべての Amazon EC2 終了イベントを収集します。ルールは、親アカウントに存在する EventBridge にこれらのイベントを送信します。

  2. 親アカウントから、EventBridge はすべてのイベントを収集します。EventBridge には、Lambda 関数 ADcleanup-Lambda をトリガーするルールが含まれます。

  3. 親アカウントは、親アカウントまたは子アカウントから終了イベントを受け取り、Lambda 関数をトリガーします。

  4. Lambda 関数は、Python boto モジュールを使用して Amazon EC2 Auto Scaling グループを呼び出し、ランダムなインスタンス ID を取得します。インスタンス ID は、Systems Manager コマンドを実行するために使用されます。

  5. Lambda 関数は、boto モジュールを使用して Amazon EC2 に別の呼び出しを行います。Lambda 関数は、実行中の Windows サーバーのプライベート IP アドレスを取得し、そのアドレスを一時変数に保存します。ステップ 5.1 および 5.2 では、実行中の Windows EC2 インスタンスが子アカウントから収集されます。

  6. Lambda 関数は、Systems Manager をもう一度呼び出して、 AWS Directory Serviceに接続されているコンピュータ情報を取得します。

  7. AWS Systems Manager ドキュメントは、Amazon EC2 Windows サーバーで PowerShell コマンドを実行して、AD に接続されているコンピュータのプライベート IP アドレスを取得するのに役立ちます。(Systems Manager ドキュメントは、ステップ 4 で取得したインスタンス ID を使用します。)

  8. AD ドメインのユーザー名とパスワードは Parameter Store AWS Systems Manager に保存されます。 AWS Lambda Systems Manager は Parameter Store を呼び出し、AD への接続に使用するユーザー名とパスワードの値を取得します。

  9. Systems Manager ドキュメントを使用し、ステップ 4 で先ほど取得したインスタンス ID を使用して PowerShell スクリプトが Amazon EC2 Windows サーバーで実行されます。

  10. Amazon EC2 は PowerShell コマンド AWS Directory Service を使用して に接続し、使用されていないコンピュータや非アクティブのコンピュータを削除します。

ツール

AWS サービス

  • AWS Directory Service には、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Relational Database Service (Amazon RDS) for SQL Server、Amazon FSx for Windows File Server AWS のサービス など、他の で Microsoft Active Directory (AD) を使用する複数の方法が用意されています。

  • AWS Directory Service for Microsoft Active Directory では、ディレクトリ対応のワークロードと AWS リソースが で Microsoft Active Directory を使用できます AWS クラウド。

  • Amazon Elastic Compute Cloud (Amazon EC2) は、 AWS クラウドでスケーラブルなコンピューティング容量を提供します。仮想サーバーを必要な数だけ起動して、迅速にスケールアップまたはスケールダウンができます。

  • Amazon EventBridge は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。例えば、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなどです AWS アカウント。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。IAM を使用すると、 のサービスとリソースにアクセスできるユーザーまたはユーザーを指定し AWS、きめ細かなアクセス許可を一元管理し、アクセスを分析してアクセス許可を絞り込むことができます AWS。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • AWS Systems Manager は、 AWS クラウドで実行されるアプリケーションとインフラストラクチャの管理に役立ちます。これにより、アプリケーションとリソースの管理が簡素化され、運用上の問題を検出して解決する時間を短縮し、 AWS リソースを大規模に安全に管理できます。

  • AWS Systems Manager ドキュメントは、Systems Manager がマネージドインスタンスで実行するアクションを定義します。Systems Manager には、ランタイムでパラメータを指定して使用できる事前設定済みのドキュメントが 100 件以上含まれています。

  • AWS Systems Manager Parameter Store は の機能であり、設定データ管理 AWS Systems Manager とシークレット管理のための安全な階層型ストレージを提供します。

その他のツール

  • HashiCorp Terraform は、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングして管理するのに役立つ infrastructure as code (IaC) ツールです。

  • PowerShell は Windows、Linux、および macOS で動作するMicrosoft の自動化および構成管理プログラムです。

  • Python」は汎用のコンピュータプログラミング言語です。

コードリポジトリ

このパターンのコードは、GitHub 内の「aws-lambda-ad-cleanup-terraform-samples」リポジトリで利用できます。

ベストプラクティス

  • 自動的にドメインを結合します。 Directory Service ドメインの一部となる Windows インスタンスを起動する場合は、後でインスタンスを手動で追加するのではなく、インスタンスの作成プロセス中にドメインに参加します。自動的にドメインを結合するには、新しいインスタンスを起動するときに、ドメイン結合ディレクトリの適切なディレクトリを選択します。詳細については、 Directory Service 管理ガイドのAmazon EC2 Windows インスタンスを AWS Managed Microsoft AD Active Directory にシームレスに結合する」を参照してください。

  • 未使用のアカウントを削除します。AD では、使用されたことがないアカウントがよく見られます。システム内に残っている無効または非アクティブなアカウントと同様に、未使用のアカウントを無視すると、AD システムが遅くなったり、組織がデータ侵害に対して脆弱になる可能性があります。

  • Active Directory のクリーンアップを自動化します。セキュリティリスクを軽減し、古いアカウントが AD のパフォーマンスに影響を与えないようにするには、AD クリーンアップを定期的に実行する必要があります。スクリプトを記述することで、ほとんどの AD 管理タスクとクリーンアップタスクを実行できます。タスクの例としては、無効なアカウントと非アクティブなアカウントの削除、空のグループと非アクティブなグループの削除、期限切れのユーザーアカウントとパスワードの特定などがあります。

エピック

タスク説明必要なスキル

子アカウントにクロスアカウントロールを作成します。

子アカウントにクロスアカウントロールを作成するには、次の手順を実行します。

  1. 子アカウントごとに、AmazonEC2ReadOnlyAccess という名前の管理ポリシーを使用して ec2crossaccountrole という名前のロールを作成します。 (詳細については、IAM ドキュメントの「カスタム信頼ポリシーを使用してロールを作成する」を参照してください。)

  2. カスタム信頼ポリシーセクションで、次のコードを追加します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::${Parentaccountid}:role/ADcleanuprole" }, "Action": "sts:AssumeRole" } ] }
DevOps エンジニア

子アカウントでイベントルールを作成します。

子アカウントごとに EventBridge ルールを作成するには、次の手順を実行します。

  1. 子にサインインし AWS アカウント、https://console.aws.amazon.com/events/ で Amazon EventBridge コンソールを開きます。

  2. ナビゲーションペインで [ルール] を選択します。

  3. [‬ルールを作成]‭ を選択します。

  4. ルールの名前を入力し、オプションで説明を入力します。

  5. [イベントバス] で、[AWS デフォルトイベントバス] を選択します。

  6. [ルールタイプ] で、[イベントパターンを持つルール] を選択してください。

  7. [次へ] を選択します。

  8. イベントパターンの場合、次のコードを貼り付けます。

    { "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["terminated"] } }
  9. [次へ] を選択します。

  10. [ターゲットタイプ] で、[別のアカウントまたはリージョンのイベントバス] を選択します。イベントバスをターゲットとして、親アカウントのイベントバス Amazon リソースネーム (ARN) を入力します。

  11. [実行ロール] で、[この特定のリソースのための新しいロールを作成する] を選択します。

  12. [次へ] を選択して新しいルールの詳細を確認し、[作成] を選択します。

詳細については、Amazon EventBridge ユーザーガイドの「Creating rules that react to events in Amazon EventBridge」を参照してください。

DevOps エンジニア

EC2 インスタンスを作成し、AD に結合します。

Windows 用の EC2 インスタンスを作成するには、次の手順を実行します。

  1. このパターンのコードリポジトリで使用可能な EC2WindowsUserdata スクリプトを使用します。

  2. ユーザーデータスクリプトで、親アカウントの Directory service addresses 値を使用するように次のコードを修正します。

    set-DnsClientServerAddress -InterfaceIndex 6 -ServerAddresses $(Directory service addresses)

DevOps エンジニア
タスク説明必要なスキル

プロジェクトフォルダを作成し、ファイルを追加します。

リポジトリを複製し、プロジェクトフォルダを作成するには、次の手順を実行します。

  1. このパターンの GitHub リポジトリを開きます。

  2. [コード] ボタンを選択して、[クローン] ドロップダウンでクローンを作成するオプションを表示します。

  3. [HTTPS] タブで、「ウェブ URL を使用してクローンを作成する」で提供された URL をコピーします。

  4. マシンにフォルダを作成し、プロジェクト名を使用して名前を付けます。

  5. ローカルマシンでターミナルを開き、このフォルダに移動します。

  6. Git リポジトリのクローンを作成するには、次のコマンドを実行します。

    git clone <repository-URL>.git

  7. リポジトリのクローンを作成したら、次のコマンドを使用してクローンのディレクトリに移動します。

    cd <directory name>/terraform-aws-lambda-ad-cleanup/multiple-account-cleanup

  8. クローンのリポジトリでは、選択した統合開発環境 (IDE) でこのプロジェクトを開きます。

DevOps エンジニア

adcleanup.zip ファイルを構築します。

lambda_function.py ファイルを圧縮するには、次のコマンドを実行します。

zip -r adcleanup.zip lambda_function.py

DevOps エンジニア
タスク説明必要なスキル

Terraform 変数の値を指定します。

子アカウントの場合、terraform.tfvars ファイルに文字列型として次の arn 変数の値を指定します。

  • lambda_env_cross_role_arn

  • child_account_cross_role_arn

DevOps エンジニア

Terraform の設定を初期化します。

Terraform ファイルを含む作業ディレクトリを初期化するには、次のコマンドを実行します。

terraform init

DevOps エンジニア

変更のプレビュー

インフラストラクチャがデプロイされる前に、Terraform がインフラストラクチャに加える変更をプレビューできます。Terraform が必要に応じて変更を行うことを確認するには、次のコマンドを実行します。

terraform plan —-var-file=examples/terraform.tfvars

DevOps エンジニア

提案されたアクションを実行します。

terraform plan コマンドの結果が期待どおりであることを確認するには、以下を実行します。

  1. 次のコマンドを実行します。terraform apply

  2. にサインインし AWS マネジメントコンソール、リソースが存在することを確認します。

DevOps エンジニア
タスク説明必要なスキル

Lambda 関数を実行およびテストします。

デプロイが正常に行われたことを確認するには、以下を実行します。

  1. にサインインし AWS マネジメントコンソール、Lambda コンソールを開きます。関数ページを開き、ADcleanup-Lambda-* で始まる関数名を選択します。

  2. 関数の概要ページで、コードソースセクションの [コード] タブで[テスト] を選択します。

  3. テストイベントを保存するには、イベントの名前を指定し、[保存] を選択します。イベントをテストするには、再び [テスト] を選択します。

実行結果には、関数の出力が表示されます。

DevOps エンジニア

親アカウントの EventBridge ルール実行の結果を表示します。

親アカウントの Amazon EC2 終了イベントに基づく EventBridge ルールの結果を表示するには、次の手順を実行します。

  1. 親アカウントの EC2 インスタンスを終了します。

  2. 親アカウントの Lambda コンソールを開きます。関数ページを開き、ADcleanup-Lambda-* で始まる関数名を選択します。

  3. [モニタリング] タブから、[CloudWatch のログを表示] を選択します。

CloudWatch コンソールのロググループページには、Lambda 関数の結果が表示されます。

DevOps エンジニア

子アカウントの EventBridge ルール実行の結果を表示します。

子アカウントの Amazon EC2 終了イベントに基づく EventBridge ルールの結果を表示するには、次の手順を実行します。

  1. 子アカウントの EC2 インスタンスを終了します。

  2. 親アカウントの Lambda コンソールを開きます。関数ページを開き、ADcleanup-Lambda-* で始まる関数名を選択します。

  3. [モニタリング] タブから、[CloudWatch のログを表示] を選択します。

CloudWatch コンソールのロググループページには、Lambda 関数の結果が表示されます。

DevOps エンジニア
タスク説明必要なスキル

インフラストラクチャをクリーンアップします。

作成したインフラストラクチャをクリーンアップするには、次のコマンドを使用します。

terraform destroy

destroy コマンドを確認するには、「yes」と入力します。

DevOps エンジニア

クリーンアップ後に確認します。

リソースが正常に削除されたことを確認します。

DevOps エンジニア

トラブルシューティング

問題ソリューション

AWS Directory Service (親アカウント) と Amazon EC2 インスタンス (子アカウント) 間の接続の問題 – VPC ピア接続が使用可能であっても、子アカウントのコンピュータを AD に参加させることはできません。

VPC にルーティングを追加します。手順については、 AWS Directory Service ドキュメントの「ディレクトリ所有者とディレクトリコンシューマーアカウント間の VPC ピアリング接続を設定する」を参照してください。

関連リソース

AWS ドキュメント

その他のリソース