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 디렉터리 서비스, Amazon EC2, Amazon EventBridge, AWS Lambda, AWS Systems Manager, AWS Auto Scaling

요약

Active Directory(AD)는 도메인 정보와 네트워크 서비스와의 사용자 상호 작용을 관리하는 Microsoft 스크립팅 도구입니다. 관리형 서비스 공급자(MSPs) 간에 널리 사용되어 직원 자격 증명 및 액세스 권한을 관리합니다. AD 공격자는 비활성 계정을 사용하여 조직을 해킹할 수 있으므로 비활성 계정을 찾아 일상적인 유지 관리 일정에 따라 비활성화하는 것이 중요합니다. 를 사용하면 Microsoft Active Directory를 관리형 서비스로 실행할 AWS Directory Service for Microsoft Active Directory수 있습니다. 이 패턴은 비활성 계정을 빠르게 찾고 제거하도록 AWS Lambda 자동화를 구성하는 데 도움이 될 수 있습니다.

조직에 다음 시나리오가 적용되는 경우 이 패턴이 도움이 될 수 있습니다.

  • 중앙 집중식 AD 관리 - 조직에 AWS 계정각각 자체 AD 배포가 있는 여러 가 있는 경우 모든 계정에서 사용자 계정과 액세스 권한을 일관되게 관리하는 것이 어려울 수 있습니다. 계정 간 AD 정리 솔루션을 사용하면 중앙 집중식 방식으로 모든 AD 인스턴스에서 비활성 계정을 비활성화하거나 제거할 수 있습니다.

  • AD 재구성 또는 마이그레이션 - 조직이 AD 배포를 재구성하거나 마이그레이션하려는 경우 계정 간 AD 정리 솔루션을 사용하면 환경을 준비하는 데 도움이 될 수 있습니다. 이 솔루션은 불필요하거나 비활성인 계정을 제거하고, 마이그레이션 프로세스를 간소화하고, 잠재적 충돌 또는 문제를 줄이는 데 도움이 될 수 있습니다.

이 패턴을 사용하면 다음과 같은 이점을 얻을 수 있습니다.

  • 데이터베이스 및 서버 성능을 개선하고 비활성 계정에서 보안의 취약성을 수정합니다.

  • AD 서버가 클라우드에서 호스팅되는 경우 비활성 계정을 제거하면 성능을 개선하는 동시에 스토리지 비용도 절감할 수 있습니다. 대역폭 요금과 컴퓨팅 리소스가 모두 떨어질 수 있으므로 월별 요금이 감소할 수 있습니다.

  • 깨끗한 Active Directory를 사용하여 잠재적 공격자를 차단합니다.

사전 조건 및 제한 사항

사전 조건 

제한 사항

  • 하위 계정에서 리소스 생성은 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 문서를 사용하면 4단계에서 앞서 얻은 인스턴스 ID를 사용하여 Amazon EC2 Windows 서버에서 PowerShell 스크립트가 실행됩니다.

  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은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 오픈 소스 인프라(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. 다음을 선택하여 새 규칙의 세부 정보를 검토한 다음 생성을 선택합니다.

자세한 내용은 Amazon 사용 설명서의 Amazon에서 이벤트에 대응하는 규칙 생성을 EventBridge 참조하세요. EventBridge

DevOps 엔지니어

EC2 인스턴스를 생성하고 AD에 가입합니다.

Windows용 EC2 인스턴스를 생성하려면 다음을 수행합니다.

  1. 이 패턴의 코드 EC2WindowsUserdata 리포지토리 에서 사용할 수 있는 스크립트를 사용합니다. https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/blob/main/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 변수의 값을 제공합니다.

하위 계정의 경우 다음 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 콘솔을 엽니다. 함수 페이지를 열고 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 엔지니어

문제 해결

문제Solution

AWS Directory Service (상위 계정)과 Amazon EC2 인스턴스(하위 계정) 간의 연결 문제 - VPC 피어링을 사용할 수 있더라도 하위 계정의 컴퓨터를 AD에 조인할 수 없습니다.

에 라우팅을 추가합니다VPCs. 지침은 AWS Directory Service 설명서의 디렉터리 소유자와 디렉터리 소비자 계정 간의 VPC 피어링 연결 구성을 참조하세요.

관련 리소스

AWS 설명서

기타 리소스