튜토리얼: Linux Bastion Host를 사용한 프라이빗 네트워크 액세스 구성
이 튜토리얼에서는 Amazon Managed Workflows for Apache Airflow 환경을 위해 컴퓨터에서 Apache Airflow 웹 서버까지 연결되는 SSH 터널을 생성하는 단계를 안내합니다. 여기서는 Amazon MWAA 환경을 이미 만들었다고 가정합니다. 일단 설정이 완료되면 Linux Bastion Host가 점프 서버 역할을 하여 컴퓨터와 VPC의 리소스를 안전하게 연결합니다. 그런 다음 SOCKS 프록시 관리 애드온을 사용하여 브라우저의 프록시 설정을 제어하여 Apache Airflow UI에 액세스할 수 있습니다.
Sections
프라이빗 네트워크
이 튜토리얼에서는 Apache Airflow 웹 서버의 프라이빗 네트워크 액세스 모드를 선택했다고 가정합니다.
프라이빗 네트워크 액세스 모드를 사용하면 Amazon VPC 내에서 사용자 환경의 IAM 정책에 대한 액세스 권한을 부여 받은 사용자만 Apache Airflow UI에 액세스할 수 있도록 제한됩니다.
프라이빗 웹 서버 액세스가 가능한 환경을 만들 때는 모든 종속성을 Python 휠 아카이브(.whl
)에서 패키징한 다음 requirements.txt
에서 .whl
을 참조해야 합니다. 휠을 사용하여 종속성을 패키징하고 설치하는 방법에 대한 지침은 Python 휠을 이용한 종속성 관리를 참조하십시오.
다음 이미지는 Amazon MWAA 콘솔에서 프라이빗 네트워크 옵션을 찾을 수 있는 위치를 보여줍니다.
사용 사례
Amazon MWAA 환경을 만든 후에 이 튜토리얼을 사용할 수 있습니다. 반드시 사용자 환경과 동일한 Amazon VPC, VPC 보안 그룹 및 퍼블릭 서브넷을 사용해야 합니다.
시작하기 전 준비 사항
-
사용자 권한을 확인합니다. AWS Identity and Access Management(IAM)의 사용자 계정에 VPC 리소스를 생성하고 관리할 수 있는 충분한 권한이 있는지 확인합니다.
-
Amazon MWAA VPC를 사용합니다. 이 튜토리얼은 Bastion Host를 기존 VPC에 연결한다고 가정합니다. Amazon VPC는 Amazon MWAA 환경과 동일한 리전에 있어야 하며 VPC 네트워크 생성에서 정의한 대로 두 개의 프라이빗 서브넷이 있어야 합니다.
-
SSH 키를 생성합니다, 가상 서버에 연결하려면 Amazon MWAA 환경과 동일한 리전에 Amazon EC2 SSH 키(.pem)를 생성해야 합니다. SSH 키가 없는 경우, Amazon EC2 사용 설명서의 키 페어 생성 또는 가져오기를 참조하세요.
목표
이 튜토리얼에서는 다음을 수행합니다.
-
기존 VPC용 AWS CloudFormation 템플릿
을 사용하여 Linux Bastion Host 인스턴스를 생성합니다. -
포트
22
에 대한 수신 규칙을 사용하여 Bastion 인스턴스의 보안 그룹에 대한 인바운드 트래픽을 승인합니다. -
Amazon MWAA 환경의 보안 그룹에서 Bastion 인스턴스의 보안 그룹에 대한 인바운드 트래픽을 승인합니다.
-
Bastion 인스턴스로 연결되는 SSH 터널을 생성합니다.
-
Apache Airflow UI를 보려면 Firefox 브라우저용 FoxyProxy 애드온을 설치하고 구성합니다.
1단계: Bastion 인스턴스 생성
다음 섹션에서는 AWS CloudFormation 콘솔의 기존 VPC용 AWS CloudFormation 템플릿
Linux Bastion Host를 만들려면
-
AWS CloudFormation 콘솔에서 빠른 시작 배포
페이지를 엽니다. -
내비게이션 바의 리전 선택기를 사용하여 Amazon MWAA 환경과 동일한 AWS 리전을 선택합니다.
-
Next(다음)를 선택합니다.
-
스택 이름 텍스트 필드에
mwaa-linux-bastion
와(과) 같이 이름을 입력합니다. -
파라미터, 네트워크 구성 창에서 다음 옵션을 선택합니다.
-
Amazon MWAA 환경의 VPC ID를 선택합니다.
-
Amazon MWAA 환경의 퍼블릭 서브넷 1 ID를 선택합니다.
-
Amazon MWAA 환경의 퍼블릭 서브넷 2 ID를 선택합니다.
-
허용된 Bastion 외부 액세스 CIDR에 가능한 가장 좁은 주소 범위(예: 내부 CIDR 범위)를 입력합니다.
참고
범위를 식별하는 가장 간단한 방법은 퍼블릭 서브넷과 동일한 CIDR 범위를 사용하는 것입니다. 예를 들어, VPC 네트워크 생성 페이지의 AWS CloudFormation 템플릿에 있는 퍼블릭 서브넷은
10.192.10.0/24
및10.192.11.0/24
입니다.
-
-
Amazon EC2 구성 창에서 다음을 선택합니다.
-
키 쌍 이름의 드롭다운 목록에서 SSH 키를 선택합니다.
-
Bastion Host 이름에 이름을 입력합니다.
-
TCP 전달에서 true를 선택합니다.
주의
이 단계에서는 TCP 전달을 true로 설정해야 합니다. 그렇지 않으면 다음 단계에서 SSH 터널을 생성할 수 없습니다.
-
-
다음, 다음을 선택합니다.
-
승인을 선택한 다음 스택 생성을 선택합니다.
Linux Bastion Host의 아키텍처에 대해 자세히 알아보려면 AWS 클라우드상의 Linux Bastion Host: 아키텍처를 참조하십시오.
2단계: SSH 터널 생성
다음 단계에서는 Linux Bastion에 대한 SSH 터널을 생성하는 방법을 설명합니다. SSH 터널은 로컬 IP 주소로부터 Linux Bastion으로의 요청을 수신합니다. 이것이 이전 단계에서 Linux Bastion에 대한 TCP 전달이 true
(으)로 설정된 이유입니다.
참고
Permission denied (publickey)
오류가 발생하는 경우 AWSSupport-TroubleshootSSH 도구를 사용하고 이 자동화(콘솔) 실행을 선택하여 SSH 설정 문제를 해결하시기 바랍니다.
3단계: Bastion 보안 그룹을 인바운드 규칙으로 구성
서버에 대한 액세스 및 서버에서의 정기적인 인터넷 액세스는 해당 서버에 연결된 특수 유지 관리 보안 그룹을 통해 허용됩니다. 다음 단계는 Bastion 보안 그룹을 환경의 VPC 보안 그룹에 대한 트래픽의 인바운드 소스로 구성하는 방법을 설명합니다.
-
Amazon MWAA 콘솔에서 환경 페이지
를 엽니다. -
환경을 선택합니다.
-
네트워킹 패널에서 VPC 보안 그룹을 선택합니다.
-
인바운드 규칙 편집을 선택합니다.
-
다른 규칙 추가를 선택합니다.
-
소스 드롭다운 목록에서 VPC 보안 그룹 ID를 선택합니다.
-
나머지 옵션은 비워 두거나 기본값으로 설정합니다.
-
규칙 저장을 선택합니다.
4단계: Apache Airflow URL 복사
다음 단계는 Amazon MWAA 콘솔을 열고 URL을 Apache Airflow UI에 복사하는 방법을 설명합니다.
-
Amazon MWAA 콘솔에서 환경 페이지
를 엽니다. -
환경을 선택합니다.
-
후속 단계를 위해 Airflow UI의 URL을 복사합니다.
5단계: 프록시 설정 구성
동적 포트 전달과 함께 SSH 터널을 사용하는 경우 SOCKS 프록시 관리 추가 기능을 사용하여 브라우저의 프록시 설정을 제어해야 합니다. 예를 들어 Chromium의 --proxy-server
기능을 사용하여 브라우저 세션을 시작하거나, Mozilla FireFox 브라우저에서 FoxyProxy 확장 프로그램을 사용할 수 있습니다.
옵션 1: 로컬 포트 전달을 사용하여 SSH 터널 설정
SOCKS 프록시를 사용하지 않을 경우 로컬 포트 전달을 사용하여 SSH 터널을 설정할 수 있습니다. 다음 예제 명령은 로컬 포트 8157을 통해 트래픽을 전달하여 Amazon EC2 ResourceManager 웹 인터페이스에 액세스합니다.
-
새 명령 프롬프트 창을 엽니다.
-
다음 명령을 입력하여 SSH 터널을 엽니다.
ssh -i
mykeypair.pem
-N -L 8157:YOUR_VPC_ENDPOINT_ID
-vpce.YOUR_REGION
.airflow.amazonaws.com:443 ubuntu@YOUR_PUBLIC_IPV4_DNS
.YOUR_REGION
.compute.amazonaws.com.rproxy.goskope.com-L
은 로컬 포트 전송의 사용을 나타내며, 이를 통해 노드의 로컬 웹 서버에서 식별된 원격 포트에 데이터를 전송하는 데 사용되는 로컬 포트를 지정할 수 있습니다. -
브라우저에
http://localhost:8157/
을 입력합니다.참고
https://localhost:8157/
을 사용해야 할 수도 있습니다.
옵션 2: 명령줄을 통한 프록시
대부분의 웹 브라우저에서 명령줄 또는 구성 파라미터를 통해 프록시를 구성할 수 있습니다. 예를 들어 Chromium을 사용하면 다음 명령을 사용하여 브라우저를 시작할 수 있습니다.
chromium --proxy-server="socks5://localhost:8157"
그러면 이전 단계에서 만든 SSH 터널을 사용하여 요청을 프록시하는 브라우저 세션이 시작됩니다. 다음과 같이 프라이빗 Amazon MWAA 환경 URL(https:// 사용)을 열 수 있습니다.
https://
YOUR_VPC_ENDPOINT_ID
-vpce.YOUR_REGION
.airflow.amazonaws.com/home.
옵션 3: Mozilla Firefox용 FoxyProxy를 사용하는 프록시
다음 예제는 Mozilla Firefox의 FoxyProxy Standard(버전 7.5.1) 구성을 보여줍니다. FoxyProxy는 일련의 프록시 관리 도구를 제공합니다. 이를 통해 Apache Airflow UI에서 사용하는 도메인에 해당하는 패턴과 일치하는 URL용 프록시 서버를 사용할 수 있습니다.
-
FireFox에서 FoxyProxy Standard
확장 프로그램 페이지를 엽니다. -
Firefox에 추가를 선택합니다.
-
추가를 선택합니다.
-
브라우저 툴바에서 FoxyProxy 아이콘을 선택하고 옵션을 선택합니다.
-
다음 코드를 복사하고 로컬에
mwaa-proxy.json
(으)로 저장합니다.YOUR_HOST_NAME
의 샘플 값을 Apache Airflow URL로 대체합니다.{ "e0b7kh1606694837384": { "type": 3, "color": "#66cc66", "title": "airflow", "active": true, "address": "localhost", "port": 8157, "proxyDNS": false, "username": "", "password": "", "whitePatterns": [ { "title": "airflow-ui", "pattern": "
YOUR_HOST_NAME
", "type": 1, "protocols": 1, "active": true } ], "blackPatterns": [], "pacURL": "", "index": -1 }, "k20d21508277536715": { "active": true, "title": "Default", "notes": "These are the settings that are used when no patterns match a URL.", "color": "#0055E5", "type": 5, "whitePatterns": [ { "title": "all URLs", "active": true, "pattern": "*", "type": 1, "protocols": 1 } ], "blackPatterns": [], "index": 9007199254740991 }, "logging": { "active": true, "maxSize": 500 }, "mode": "patterns", "browserVersion": "82.0.3", "foxyProxyVersion": "7.5.1", "foxyProxyEdition": "standard" } -
FoxyProxy 6.0+에서 설정 가져오기 창에서 가져오기 설정을 선택하고
mwaa-proxy.json
파일을 선택합니다. -
확인을 선택합니다.
6단계: Apache Airflow UI 열기
다음 단계에서는 Apache Airflow UI를 여는 방법을 설명합니다.
-
Amazon MWAA 콘솔에서 환경 페이지
를 엽니다. -
Airflow UI 열기를 선택합니다.
다음 단계
-
Apache Airflow CLI 명령 참조의 Bastion Host에 대한 SSH 터널에서 Airflow CLI 명령을 실행하는 방법을 알아봅니다.
-
DAG 추가 또는 업데이트에서 Amazon S3 버킷에 DAG 코드를 업로드하는 방법을 알아봅니다.