1

AWS 클라우드 검색에 대해 2 개의 프록시를 통해 AWS CLI 명령을 실행해야하는 시나리오가 있습니다.2 프록시를 통한 AWS CLI

서버 A (AWS CLI) -----> 서버 B (아파치 프록시 웹 서버) -----> 회사 프록시 IP (XXXX) -----> 인터넷 여기

내 도전 AWS CLI 명령에 서버 A에서 기업 프록시 IP로, 그리고 마지막으로 인터넷 (AWS)으로 요청을 전달하기 위해 다시 쓰기 규칙 (서버 B에 작성)을 적용 할 수있는 컨텍스트 (/ 무언가) . 기업 프록시 IP의 연결은 이미 인터넷에 있습니다.

내 주요 동기는 두 프록시를 통해 서버 A에서 클라우드 워치 메트릭을 가져 오는 것입니다. 나에게 이것은 달성 할 수 없지만 달성 할 수 있다면 입력이 필요하며 예인 경우 회사 프록시에 AWS CLI 명령을 프록시하기 위해 다시 쓰기 규칙 을 서버 B에 기록해야합니다.

AWS CLI 명령 예 : 다음과 같습니다 :

aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name CPUUtilization --dimensions 이름 = InstanceId, 값 = i-xxx - 통계 평균 - 시작 시간 date -u '+%FT%TZ' -d '10 mins ago' --end-time date -u '+%FT%TZ' --period 60

우리는 HTTP_PROXY를 사용하여 프록시를 통해 요청을 전달할 수 있지만 서버 A에서 서버 B (Apache 프록시 웹 서버) 로의 요청 만 전달할 수 있다는 것을 알고 있습니다.

미리 감사드립니다. & 빠른 응답을 감사드립니다.

답변

0

좋아요, 사실 최근에는 회사 방화벽을 돕기 위해 AWS CLI 요청을 전달하기 위해 리버스 프록시 서버 (nginx)를 특별히 구축했습니다. 불행하게도이 작업을 수행하는 데 사용 된 코드는 게시 할 수 없지만 이와 같은 시스템을 설정하면 문제에 대한 통찰력을 얻을 수 있습니다.

  1. 가장 확실한 것입니다. 요청을 통해 전달되는 요청을 이해하고이를 업스트림 AWS 서버가 이해할 수있는 구문으로 다시 작성하는 리디렉션 규칙이 있어야합니다. 기본 AWS 명령에서 해당 컨텍스트는 URL의 일부입니다 (예 : https://ec2.us-west-2.amazonaws.com). 업스트림 리버스 프록시를 통과한다면, 어떻게 든 그 컨텍스트를 전달해야합니다. 아마존과 같은 방법으로 프록시에 대한 모든 요청을 캡처하는 별 DNS 레코드 (예 : \*.\*.{proxy-address} => {proxy-ip}, aws ec2 --endpoint-url https://ec2.us-west-2.proxy describe-instances) 또는 수동으로 경로에 정보를 삽입 할 수 있습니다 (예 : aws ec2 --endpoint-url https://proxy/ec2/us-west-2 describe-instances). 그런 다음 프록시 서버에서 정보를 구문 분석하고이를 기반으로 업스트림을 설정합니다. 내 마지막 해결책은 내 프록시의 경로로 전체 기본 AWS 끝점 URL을 배치하는 것이 었습니다.그런 다음 정규식을 사용하여 아마존이 배치 한 경로에 정보가있는 경우 끝점 URL을 구문 분석 한 다음 업스트림 서버를 끝점 URL로 설정합니다. 정규식에 의해 해결되었습니다.
  2. # 1을 완료하면 생성 된 두 번째 문제가 실행됩니다. CLI에 --endpoint-url 플래그를 사용하는 경우 Host 헤더가 프록시 서버 URL로 설정된 요청에 서명합니다. 이제 이것이 업스트림으로 다시 작성되면 Host 헤더가 더 이상 서명과 일치하지 않게됩니다. 따라서 프록시를 통과하는 모든 요청에 ​​다시 서명해야합니다. 이 주변에 몇 가지 비열한 방법이 있습니다. 필자는 AWS CLI 래퍼를 작성하여 기본 AWS 엔드 포인트로 보내는 것처럼 요청에 서명하는 서명 메커니즘을 오버로드 한 다음 Host 헤더를 역방향 프록시를 가리 키도록 덮어 씁니다.이 방법으로 재 서명하는 것은 요청을 변환 할 필요가 없어 프록시 대기 시간을 없애기 때문에 AWS가 공개 할 수있는 새로운 서명 방법을 동적으로 처리하는 방식으로 구현하기가 매우 어렵 기 때문에 유용합니다.

또한 당신이 botocore 소스 코드에 깊은 충분히 파고 경우, 당신이 구축 일부 역방향 프록시 지원을 찾을 수 있음을 주목할 필요가있다, 그러나 (이에 노출되지 사용하지/소멸 한 것으로 보인다 클라이언트). 바라기를, 그들은 가까운 장래에 그 기능을 내뿜고 이것은 더 이상 논점이 아닐 것이다.