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

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

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

作成者: Dr. Rahul Sharad Gaikwad (AWS) と Tamilselvan P (AWS)

環境:PoC またはパイロット

テクノロジー: DevOps、インフラストラクチャ、管理とガバナンス

ワークロード:その他すべてのワークロード

AWS サービス: AWS Directory Service、Amazon EC2、Amazon EventBridge、AWSLambda、AWSSystems Manager、AWSAuto Scaling

[概要]

Active Directory (AD) は、ドメイン情報とネットワークサービスとのユーザーインタラクションを管理する Microsoft スクリプトツールです。これは、従業員の認証情報とアクセス許可を管理するために、マネージドサービスプロバイダー (MSPs) の間で広く使用されています。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 ディレクトリの共有」を参照してください。

  • ( AWS Directory Service 親アカウントVPC) VPC の と Amazon Elastic Compute Cloud (Amazon ) インスタンス (子アカウント) VPCの 間で利用可能な仮想プライベートクラウド (EC2) ピアリング AWS Transit Gateway 接続または接続。詳細については、「 AWS Directory Service 管理ガイド」の「ディレクトリ所有者とディレクトリコンシューマーアカウント間のVPCピアリング接続を設定する」を参照してください。

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

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

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

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

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

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

制約事項

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

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

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

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

  • 一部の AWS のサービス は、すべての で利用できるわけではありません AWS リージョン。リージョンの可用性については、AWS のサービス リージョン別の「」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択します。

製品バージョン

アーキテクチャ

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

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

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

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

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

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

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

  5. Lambda 関数は、boto モジュールEC2を使用して Amazon に別の呼び出しを行います。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 ドメインのユーザー名とパスワードは AWS Systems Manager Parameter Store に保存されます。 AWS Lambda Systems Manager は Parameter Store を呼び出し、AD への接続に使用するユーザー名とパスワードの値を取得します。

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

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

ツール

AWS サービス

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

  • 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 リポジトリで使用できます。

ベストプラクティス

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

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

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

エピック

タスク説明必要なスキル

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

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

  1. 子アカウントごとに、 という名前のマネージドポリシーec2crossaccountrole を使用して、 という名前のロールを作成しますAmazonEC2ReadOnlyAccess (詳細については、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 アカウント、 で Amazon EventBridge コンソールを開きますhttps://console.aws.amazon.com/events/

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

  3. ルールの作成を選択します。

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

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

  6. ルールタイプ で、イベントパターン を持つルール を選択します。

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

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

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

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

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

  12. Next を選択して新しいルールの詳細を確認し、Create を選択します。

詳細については、「Amazon ユーザーガイド」の「Amazon でのイベントに対応するルールの作成 EventBridge」を参照してください。 EventBridge

DevOps エンジニア

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

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

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

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

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

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

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

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

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

  2. Code ボタンを選択すると、クローンのドロップダウンにクローンを作成するオプションが表示されます。

  3. HTTPS タブで、ウェブ を使用して Clone で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 変数の値を指定します。

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

  • 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 Management Console、リソースが存在することを確認します。

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

Lambda 関数を実行してテストします。

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

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

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

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

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

DevOps エンジニア

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

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

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

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

  3. Monitor タブを選択し、View CloudWatch logs を選択します。

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

DevOps エンジニア

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

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

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

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

  3. Monitor タブを選択し、View CloudWatch logs を選択します。

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

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

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

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

terraform destroy

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

DevOps エンジニア

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

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

DevOps エンジニア

トラブルシューティング

問題ソリューション

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

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

関連リソース

AWS ドキュメント

その他のリソース