AWS - Elastic Beanstalk Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon Elastic Beanstalk는 웹 애플리케이션 및 서비스의 배포, 관리 및 확장을 위한 간소화된 플랫폼을 제공합니다. Java, .NET, PHP, Node.js, Python, Ruby 및 Go와 같은 다양한 프로그래밍 언어와 프레임워크를 지원하며, Docker 컨테이너도 지원합니다. 이 서비스는 Apache, Nginx, Passenger 및 IIS와 같은 널리 사용되는 서버와 호환됩니다.
Elastic Beanstalk는 기본 인프라에 대한 걱정 없이 AWS 클라우드에 애플리케이션을 배포하는 간단하고 유연한 방법을 제공합니다. 자동으로 용량 프로비저닝, 로드 밸런싱, 스케일링, 및 애플리케이션 건강 모니터링의 세부 사항을 처리하여 코드 작성 및 배포에 집중할 수 있도록 합니다.
Elastic Beanstalk에 의해 생성된 인프라는 EC2의 Autoscaling 그룹에 의해 관리됩니다(로드 밸런서 포함). 이는 결국 호스트를 손상시키면 EC2에 대해 알아야 한다는 것을 의미합니다:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum또한 Docker가 사용되는 경우 ECS를 사용할 수 있습니다.
AWS - EKS EnumAWS Elastic Beanstalk에서 "애플리케이션"과 "환경"의 개념은 서로 다른 목적을 가지고 있으며 배포 프로세스에서 뚜렷한 역할을 합니다.
Elastic Beanstalk의 애플리케이션은 애플리케이션의 소스 코드, 환경 및 구성의 논리적 컨테이너입니다. 이는 애플리케이션 코드의 다양한 버전을 그룹화하고 이를 단일 엔티티로 관리할 수 있게 합니다.
애플리케이션을 생성할 때 이름과 설명을 제공하지만 이 단계에서는 리소스가 프로비저닝되지 않습니다. 이는 단순히 코드 및 관련 리소스를 조직하고 관리하는 방법입니다.
애플리케이션 내에서 여러 애플리케이션 버전을 가질 수 있습니다. 각 버전은 코드의 특정 릴리스에 해당하며, 하나 이상의 환경에 배포될 수 있습니다.
환경은 AWS 인프라에서 실행되는 애플리케이션의 프로비저닝된 인스턴스입니다. 이는 애플리케이션 코드가 배포되고 실행되는 곳입니다. Elastic Beanstalk는 환경 구성에 따라 필요한 리소스(예: EC2 인스턴스, 로드 밸런서, 자동 스케일링 그룹, 데이터베이스)를 프로비저닝합니다.
각 환경은 애플리케이션의 단일 버전을 실행하며, 개발, 테스트, 스테이징 및 프로덕션과 같은 다양한 목적을 위해 여러 환경을 가질 수 있습니다.
환경을 생성할 때 플랫폼(예: Java, .NET, Node.js 등)과 환경 유형(예: 웹 서버 또는 작업자)을 선택합니다. 또한 인프라 및 애플리케이션 설정의 다양한 측면을 제어하기 위해 환경 구성을 사용자 정의할 수 있습니다.
Web Server Environment: 이는 웹 애플리케이션 및 API를 호스팅하고 제공하기 위해 설계되었습니다. 이러한 애플리케이션은 일반적으로 들어오는 HTTP/HTTPS 요청을 처리합니다. 웹 서버 환경은 들어오는 트래픽을 처리하고 용량을 관리하며 애플리케이션의 높은 가용성을 보장하기 위해 EC2 인스턴스, 로드 밸런서 및 자동 스케일링 그룹과 같은 리소스를 프로비저닝합니다.
Worker Environment: 이는 백그라운드 작업을 처리하기 위해 설계되었습니다. 이러한 작업은 종종 시간이 많이 소요되거나 리소스를 많이 사용하는 작업으로, 클라이언트에 즉각적인 응답을 요구하지 않습니다. 작업자 환경은 EC2 인스턴스 및 자동 스케일링 그룹과 같은 리소스를 프로비저닝하지만, HTTP/HTTPS 요청을 직접 처리하지 않기 때문에 로드 밸런서가 없습니다. 대신, Amazon Simple Queue Service (SQS) 큐에서 작업을 소비하여 작업자 환경과 처리하는 작업 간의 버퍼 역할을 합니다.
Beanstalk에서 앱을 생성할 때 선택해야 할 3가지 매우 중요한 보안 옵션이 있습니다:
EC2 키 쌍: 이는 애플리케이션을 실행하는 EC2 인스턴스에 접근할 수 있는 SSH 키입니다.
IAM 인스턴스 프로필: 이는 인스턴스가 가질 인스턴스 프로필입니다(IAM 권한).
자동 생성된 역할은 **aws-elasticbeanstalk-ec2-role
**이라고 하며, AWS 관리 정책을 사용하여 모든 ECS, 모든 SQS, DynamoDB elasticbeanstalk 및 elasticbeanstalk S3에 대한 흥미로운 접근 권한을 가지고 있습니다: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.
서비스 역할: 이는 AWS 서비스가 필요한 모든 작업을 수행하는 데 사용할 역할입니다. 내가 아는 한, 일반 AWS 사용자는 해당 역할에 접근할 수 없습니다.
AWS에 의해 생성된 이 역할은 **aws-elasticbeanstalk-service-role
**이라고 하며, AWS 관리 정책 AWSElasticBeanstalkEnhancedHealth 및 AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy를 사용합니다.
기본적으로 메타데이터 버전 1은 비활성화되어 있습니다:
Beanstalk 데이터는 S3 버킷에 저장되며, 이름은 **elasticbeanstalk-<region>-<acc-id>
**입니다(만약 AWS 콘솔에서 생성되었다면). 이 버킷 안에는 업로드된 애플리케이션의 소스 코드가 있습니다.
생성된 웹페이지의 URL은 **http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/
**입니다.
버킷에 대해 읽기 권한을 얻으면 소스 코드를 읽고 심지어 민감한 자격 증명을 찾을 수 있습니다.
버킷에 대해 쓰기 권한을 얻으면 소스 코드를 수정하여 애플리케이션이 다음에 실행될 때 사용하는 IAM 역할을 손상시킬 수 있습니다.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)