

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Managed Workflows for Apache Airflow 튜토리얼
<a name="tutorials"></a>

이 가이드에는 Amazon Managed Workflows for Apache Airflow 환경을 사용하고 구성하는 방법에 대한 단계별 튜토리얼이 포함되어 있습니다.

**Topics**
+ [튜토리얼: AWS Client VPN을(를) 사용한 프라이빗 네트워크 액세스 구성](tutorials-private-network-vpn-client.md)
+ [튜토리얼: Linux Bastion Host를 사용한 프라이빗 네트워크 액세스 구성](tutorials-private-network-bastion.md)
+ [튜토리얼: DAG의 하위 집합에 대한 Amazon MWAA 사용자 액세스 제한](limit-access-to-dags.md)
+ [튜토리얼: Amazon MWAA에서 자체 환경 엔드포인트 관리 자동화](tutorials-customer-managed-endpoints.md)

# 튜토리얼: AWS Client VPN을(를) 사용한 프라이빗 네트워크 액세스 구성
<a name="tutorials-private-network-vpn-client"></a>

이 튜토리얼은 Amazon Managed Workflows for Apache Airflow 환경을 위해 컴퓨터에서 Apache Airflow 웹 서버로 VPN 터널을 생성하는 단계를 안내합니다. VPN 터널을 통해 인터넷에 연결하려면 먼저 AWS Client VPN 엔드포인트를 만들어야 합니다. 일단 설정이 완료되면 Client VPN 엔드포인트는 VPN 서버 역할을 하여 컴퓨터와 VPC의 리소스에 안전하게 연결할 수 있습니다. 그런 다음 [AWS Client VPN 데스크톱용](https://aws.amazon.com/vpn/client-vpn-download/)을 사용하여 컴퓨터에서 Client VPN에 연결합니다.

**Topics**
+ [프라이빗 네트워크](#private-network-vpn-onconsole)
+ [사용 사례](#private-network-vpn-usecases)
+ [시작하기 전 준비 사항](#private-network-vpn-prereqs)
+ [목표](#private-network-vpn-objectives)
+ [(선택 사항) 1단계: VPC, CIDR 규칙 및 VPC 보안을 식별합니다.](#private-network-vpn-optional)
+ [2단계: 서버 및 클라이언트 인증서 생성](#private-network-vpn-certs)
+ [3단계: CloudFormation 템플릿을 로컬에 저장](#private-network-vpn-template)
+ [4단계: Client VPN CloudFormation 스택 생성](#private-network-vpn-create)
+ [5단계: Client VPN에 서브넷을 연결](#private-network-vpn-associate)
+ [6단계: Client VPN에 인증 수신 규칙 추가](#private-network-vpn-autho)
+ [7단계: Client VPN 엔드포인트 구성 파일 다운로드](#private-network-vpn-download)
+ [8단계: AWS Client VPN에 연결](#private-network-vpn-connect)
+ [다음 단계](#create-vpc-vpn-next-up)

## 프라이빗 네트워크
<a name="private-network-vpn-onconsole"></a>

이 튜토리얼에서는 Apache Airflow 웹 서버의 **프라이빗 네트워크** 액세스 모드를 선택했다고 가정합니다.

![\[이 이미지는 프라이빗 웹 서버가 있는 Amazon MWAA 환경의 아키텍처를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/mwaa/latest/userguide/images/mwaa-private-web-server.png)


프라이빗 네트워크 액세스 모드를 사용하면 *Amazon VPC 내에서* [사용자 환경의 IAM 정책](access-policies.md)에 대한 액세스 권한을 부여 받은 사용자만 Apache Airflow UI에 액세스할 수 있도록 제한됩니다.

프라이빗 웹 서버 액세스가 가능한 환경을 만들 때는 모든 종속성을 Python 휠 아카이브(`.whl`)에서 패키징한 다음 `requirements.txt`에서 `.whl`을 참조해야 합니다. 휠을 사용하여 종속성을 패키징하고 설치하는 방법에 대한 지침은 [Python 휠을 이용한 종속성 관리](best-practices-dependencies.md#best-practices-dependencies-python-wheels)를 참조하세요.

다음 이미지는 Amazon MWAA 콘솔에서 **프라이빗 네트워크** 옵션을 찾을 수 있는 위치를 보여줍니다.

![\[이 이미지는 Amazon MWAA 콘솔에서 프라이빗 네트워크 옵션을 찾을 수 있는 위치를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/mwaa/latest/userguide/images/mwaa-console-private-network.png)


## 사용 사례
<a name="private-network-vpn-usecases"></a>

Amazon MWAA 환경을 생성하기 전 또는 생성한 후에 이 튜토리얼을 활용할 수 있습니다. 사용자 환경과 동일한 Amazon VPC, VPC 보안 그룹 및 프라이빗 서브넷을 사용해야 합니다. Amazon MWAA 환경을 만든 후 이 튜토리얼을 사용하는 경우 단계를 완료한 후 Amazon MWAA 콘솔로 돌아가서 Apache Airflow 웹 서버 액세스 모드를 **프라이빗 네트워크**로 변경할 수 있습니다.

## 시작하기 전 준비 사항
<a name="private-network-vpn-prereqs"></a>

1. 사용자 권한을 확인합니다. AWS Identity and Access Management(IAM)의 사용자 계정에 VPC 리소스를 생성하고 관리할 수 있는 충분한 권한이 있는지 확인합니다.

1. Amazon MWAA VPC를 사용합니다. 이 튜토리얼에서는 Client VPN을 기존 VPC에 연결한다고 가정합니다. Amazon VPC는 Amazon MWAA 환경과 동일한 AWS 리전에 있어야 하며 두 개의 프라이빗 서브넷이 있어야 합니다. Amazon VPC를 생성하지 않은 경우 [옵션 3: 인터넷에 액세스할 수 *없는* Amazon VPC 네트워크 생성](vpc-create.md#vpc-create-template-private-only)에서 CloudFormation 템플릿을 사용합니다.

## 목표
<a name="private-network-vpn-objectives"></a>

이 튜토리얼에서는 다음을 수행합니다.

1. 기존 Amazon VPC용 CloudFormation 템플릿을 사용하여 AWS Client VPN 엔드포인트를 생성합니다.

1. 서버와 클라이언트 인증서 및 키를 생성한 다음, 서버 인증서와 키를 Amazon MWAA 환경과 동일한 AWS 리전의 AWS Certificate Manager에 업로드합니다.

1. Client VPN용 Client VPN 엔드포인트 구성 파일을 다운로드 및 수정하고, 이 파일을 사용하여 데스크톱용 Client VPN을 이용해 연결할 VPN 프로필을 생성합니다.

## (선택 사항) 1단계: VPC, CIDR 규칙 및 VPC 보안을 식별합니다.
<a name="private-network-vpn-optional"></a>

다음 섹션에서는 Amazon VPC, VPC 보안 그룹의 ID를 찾는 방법과 이후 단계에서 Client VPN을 생성하는 데 필요한 CIDR 규칙을 식별하는 방법을 설명합니다.

### CIDR 규칙 식별
<a name="private-network-vpn-cidr"></a>

다음 섹션에서는 Client VPN을 만드는 데 필요한 CIDR 규칙을 식별하는 방법을 설명합니다.

**Client VPN의 CIDR을 식별하려면**

1. Amazon VPC 콘솔에서 [내 Amazon VPC 페이지](https://console.aws.amazon.com/vpc/home#/vpcs:)를 엽니다.

1. 내비게이션 바의 리전 선택기를 사용하여 Amazon MWAA 환경과 동일한 AWS 리전을 선택합니다.

1. Amazon VPC를 선택합니다.

1. 프라이빗 서브넷의 CIDR이 다음과 같다고 가정합니다.
   + 프라이빗 서브넷 1: 10.192.10.0`/24`
   + 프라이빗 서브넷 2: 10.192.11.0`/24`

   Amazon VPC의 CIDR이 10.192.0.0`/16`인 경우, Client VPN에 지정한 **Client IPv4 CIDR**은 10.192.0.0`/22`이(가) 됩니다.

1. 다음 단계를 위해 이 CIDR 값과 VPC ID의 값을 저장합니다.

### VPC 및 보안 그룹 식별
<a name="private-network-vpn-sec"></a>

다음 섹션에서는 Client VPN을 생성하는 데 필요한 Amazon VPC 및 보안 그룹의 ID를 찾는 방법을 설명합니다.

**참고**  
보안 그룹을 두 개 이상 사용하고 있을 수 있습니다. 이후 단계에서 사용자 VPC의 보안 그룹을 모두 지정해야 합니다.

**보안 그룹을 식별하려면**

1. Amazon VPC 콘솔에서 [보안 그룹 페이지](https://console.aws.amazon.com/vpc/home#/securityGroups:)를 엽니다.

1. 내비게이션 바에서 리전 선택기를 사용하여 AWS 리전을 선택합니다.

1. **VPC ID**에서 Amazon VPC를 검색하여 VPC와 관련된 보안 그룹을 식별합니다.

1. 후속 단계를 위해 보안 그룹 및 VPC의 ID를 저장합니다.

## 2단계: 서버 및 클라이언트 인증서 생성
<a name="private-network-vpn-certs"></a>

Client VPN 엔드포인트는 1024비트 및 2048비트 RSA 키 크기만 지원합니다. 다음 섹션에서는 OpenVPN easy-rsa를 사용하여 서버 및 클라이언트 인증서와 키를 생성한 다음 AWS Command Line Interface(AWS CLI)을(를) 사용하여 인증서를 ACM에 업로드하는 방법을 설명합니다.

**클라이언트 인증서를 생성하려면**

1. 다음의 빠른 단계에 따라 [클라이언트 인증 및 권한 부여: 상호 인증](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/client-authentication.html#mutual)의 AWS CLI을(를) 통해 인증서를 생성하고 ACM에 업로드합니다.

1. 이 단계에서는 서버 및 클라이언트 인증서를 업로드할 때 AWS CLI 명령에 Amazon MWAA 환경과 동일한 AWS 리전을 **반드시** 지정해야 합니다. 다음은 이러한 명령에서 리전을 지정하는 방법을 몇 가지 예시로 보여줍니다.

   1.   
**Example 서버 인증서 리전**  

      ```
      aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region us-west-2
      ```

   1.   
**Example 클라이언트 인증서 리전**  

      ```
      aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt --region us-west-2
      ```

   1. 이 단계를 거친 후 서버 인증서 및 클라이언트 인증서 ARN에 대한 AWS CLI 응답에 반환된 값을 저장해야 합니다. CloudFormation 템플릿에서 이러한 ARN을 지정하여 Client VPN을 생성합니다.

1. 이 단계에서는 클라이언트 인증서와 프라이빗 키가 컴퓨터에 저장됩니다. 다음은 이러한 보안 인증을 찾을 수 있는 방법을 보여주는 예시입니다.

   1.   
**Example macOS에서**  

      macOS에서는 콘텐츠가 `/Users/your-user/custom_folder`에 저장됩니다. 이 디렉터리의 모든 (`ls -a`) 콘텐츠를 나열하면 다음과 비슷한 내용이 표시됩니다.

      ```
      .
      ..
      ca.crt
      client1.domain.tld.crt
      client1.domain.tld.key
      server.crt
      server.key
      ```

   1. 이 단계를 수행한 후 내용을 저장하거나 `client1.domain.tld.crt`의 클라이언트 인증서와 `client1.domain.tld.key`의 프라이빗 키 위치를 메모해 둡니다. 이 값을 Client VPN의 구성 파일에 추가할 것입니다.

## 3단계: CloudFormation 템플릿을 로컬에 저장
<a name="private-network-vpn-template"></a>

다음 섹션에는 Client VPN을 생성하기 위한 CloudFormation 템플릿이 포함되어 있습니다. Amazon MWAA 환경과 동일한 Amazon VPC, VPC 보안 그룹 및 프라이빗 서브넷을 지정해야 합니다.
+ 다음 템플릿의 내용을 복사하고 로컬에 `mwaa_vpn_client.yaml`로 저장합니다. [템플릿을 다운로드](./samples/mwaa_vpn_client.zip)할 수도 있습니다.

  다음 값을 대체합니다.
  + **YOUR\$1CLIENT\$1ROOT\$1CERTIFICATE\$1ARN** – `ClientRootCertificateChainArn`의 **client1.domain.tld** 인증서에 대한 ARN.
  + **YOUR\$1SERVER\$1CERTIFICATE\$1ARN** – `ServerCertificateArn`의 **server** 인증서에 대한 ARN.
  + `ClientCidrBlock`의 Client IPv4 CIDR 규칙. `10.192.0.0/22`의 CIDR 규칙이 제공되었습니다.
  + `VpcId`의 사용자 Amazon VPC ID. `vpc-010101010101`의 VPC가 제공되었습니다.
  + `SecurityGroupIds`의 사용자 VPC 보안 그룹 ID. `sg-0101010101`의 보안 그룹이 제공되었습니다.

  ```
  AWSTemplateFormatVersion: 2010-09-09
  Description: This template deploys a VPN Client Endpoint.
  Resources:
    ClientVpnEndpoint:
      Type: 'AWS::EC2::ClientVpnEndpoint'
      Properties:
        AuthenticationOptions:
          - Type: "certificate-authentication"
            MutualAuthentication:
              ClientRootCertificateChainArn: "YOUR_CLIENT_ROOT_CERTIFICATE_ARN"
        ClientCidrBlock: 10.192.0.0/22
        ClientConnectOptions:
          Enabled: false
        ConnectionLogOptions:
          Enabled: false
        Description: "MWAA Client VPN"
        DnsServers: []
        SecurityGroupIds:
          - sg-0101010101
        SelfServicePortal: ''
        ServerCertificateArn: "YOUR_SERVER_CERTIFICATE_ARN"
        SplitTunnel: true
        TagSpecifications:
          - ResourceType: "client-vpn-endpoint"
            Tags:
            - Key: Name
              Value: MWAA-Client-VPN
        TransportProtocol: udp
        VpcId: vpc-010101010101
        VpnPort: 443
  ```

**참고**  
환경에 두 가지 이상의 보안 그룹을 사용하는 경우 다음 형식으로 여러 보안 그룹을 지정할 수 있습니다.  

```
SecurityGroupIds:
 - sg-0112233445566778b
 - sg-0223344556677889f
```

## 4단계: Client VPN CloudFormation 스택 생성
<a name="private-network-vpn-create"></a>

**AWS Client VPN를 생성하려면**

1. [AWS CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation/home#)을 엽니다.

1. **템플릿이 준비됨**을 선택하고 **템플릿 파일 업로드**를 선택합니다.

1. **파일 선택**을 선택하고 `mwaa_vpn_client.yaml` 파일을 선택합니다.

1. **다음**, **다음**을 선택합니다.

1. 승인을 선택한 다음 **스택 생성**을 선택합니다.

## 5단계: Client VPN에 서브넷을 연결
<a name="private-network-vpn-associate"></a>

**프라이빗 서브넷을 AWS Client VPN에 연결하려면**

1. [Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/home#)을 엽니다.

1. **Client VPN 엔드포인트** 페이지를 선택합니다.

1. Client VPN을 선택한 다음 **연결** 탭에서 **연결**을 선택합니다.

1. 드롭다운 목록에서 다음을 선택합니다.
   + **VPC**의 사용자 Amazon VPC.
   + **연결할 서브넷 선택**에 있는 프라이빗 서브넷 중 하나.

1. **연결**을 선택합니다.

**참고**  
VPC와 서브넷을 Client VPN에 연결하는 데 몇 분 정도 걸립니다.

## 6단계: Client VPN에 인증 수신 규칙 추가
<a name="private-network-vpn-autho"></a>

VPC의 CIDR 규칙을 사용하는 인증 수신 규칙을 Client VPN에 추가해야 합니다. Active Directory 그룹 또는 SAML 기반 ID 제공업체(idP)의 특정 사용자 또는 그룹에 권한을 부여하려면 *Client VPN 가이드*의 [권한 부여 규칙](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-rules.html)을 참조하세요.

**AWS Client VPN에 CIDR을 추가하려면**

1. [Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/home#)을 엽니다.

1. **Client VPN 엔드포인트** 페이지를 선택합니다.

1. Client VPN을 선택한 다음 **권한 부여** 탭의 **수신 승인**을 선택합니다.

1. 다음을 지정합니다.
   + **대상 네트워크 활성화**의 사용자 Amazon VPC CIDR 규칙. 예:

     ```
     10.192.0.0/16
     ```
   + **액세스 권한 부여**에서 **모든 사용자에게 액세스 허용**을 선택합니다.
   + **설명**에 설명 이름을 입력합니다.

1. **권한 부여 규칙 추가**를 선택합니다.

**참고**  
Amazon VPC의 네트워킹 구성 요소에 따라 네트워크 액세스 제어 목록(NACL)에 이 인증 수신 규칙이 필요할 수도 있습니다.

## 7단계: Client VPN 엔드포인트 구성 파일 다운로드
<a name="private-network-vpn-download"></a>

**구성 파일을 다운로드하려면**

1. [Client VPN 엔드포인트 구성 파일 다운로드](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-getting-started.html#cvpn-getting-started-config)에서 다음 빠른 단계에 따라 Client VPN 구성 파일을 다운로드합니다.

1. 이 단계에서는 Client VPN 엔드포인트 DNS 이름 앞에 문자열을 추가하라는 메시지가 표시됩니다. 다음은 그 예입니다.

   1.   
**Example 엔드포인트 DNS 이름**  

     Client VPN 엔드포인트 DNS 이름이 다음과 같은 경우:

     ```
     remote cvpn-endpoint-0909091212aaee1.prod.clientvpn.us-west-1.amazonaws.com 443
     ```

     다음과 같이 Client VPN 엔드포인트를 식별하는 문자열을 추가할 수 있습니다.

     ```
     remote mwaavpn.cvpn-endpoint-0909091212aaee1.prod.clientvpn.us-west-1.amazonaws.com 443
     ```

1. 이 단계에서 새 `<cert></cert>` 태그 세트 사이에 클라이언트 인증서의 내용을 추가하고 새 `<key></key>` 태그 세트 사이에 프라이빗 키의 내용을 추가하라는 메시지가 표시됩니다. 다음은 그 예입니다.

   1. 명령 프롬프트를 열고 디렉터리를 클라이언트 인증서 및 프라이빗 키가 있는 위치로 변경합니다.

   1.   
**Example macOS client1.domain.tld.crt**  

      macOS에서 `client1.domain.tld.crt` 파일 내용을 표시하려면 `cat client1.domain.tld.crt`을(를) 사용할 수 있습니다.

      터미널에서 값을 복사하고 `downloaded-client-config.ovpn`을(를) 다음과 같이 붙여넣습니다.

      ```
      ZZZ1111dddaBBB
      -----END CERTIFICATE-----
      </ca>
      <cert>
      -----BEGIN CERTIFICATE-----
      YOUR client1.domain.tld.crt
      -----END CERTIFICATE-----                
      </cert>
      ```

   1.   
**Example macOS client1.domain.tld.key**  

      `client1.domain.tld.key`의 내용을 표시하려면 `cat client1.domain.tld.key`을(를) 사용할 수 있습니다.

      터미널에서 값을 복사하고 `downloaded-client-config.ovpn`을(를) 다음과 같이 붙여넣습니다.

      ```
      ZZZ1111dddaBBB
      -----END CERTIFICATE-----
      </ca>
      <cert>
      -----BEGIN CERTIFICATE-----
      YOUR client1.domain.tld.crt
      -----END CERTIFICATE-----                
      </cert>
      <key>
      -----BEGIN CERTIFICATE-----
      YOUR client1.domain.tld.key
      -----END CERTIFICATE-----                
      </key>
      ```

## 8단계: AWS Client VPN에 연결
<a name="private-network-vpn-connect"></a>

AWS Client VPN 클라이언트는 무료로 제공됩니다. 컴퓨터를 AWS Client VPN에 직접 연결하여 종단 간 VPN 환경을 이용할 수 있습니다.

**Client VPN에 연결하려면**

1. [데스크톱용 AWS Client VPN](https://aws.amazon.com/vpn/client-vpn-download/) 다운로드 및 설치

1. AWS Client VPN을 엽니다.

1. VPN 클라이언트 메뉴에서 **파일**, **관리 프로필**을 선택합니다.

1. **프로필 추가**를 선택한 다음 `downloaded-client-config.ovpn`을(를) 선택합니다.

1. **이름 표시**에 설명이 포함된 이름을 입력합니다.

1. **프로필 추가**, **완료**를 선택합니다.

1. **연결**(을 선택합니다.

Client VPN에 연결한 후 Amazon VPC의 리소스에 액세스하려면 다른 VPN과의 연결을 끊어야 합니다.

**참고**  
클라이언트를 종료하고 다시 시작해야 연결할 수 있을 것입니다.

## 다음 단계
<a name="create-vpc-vpn-next-up"></a>
+ [Amazon Managed Workflows for Apache Airflow 시작하기](get-started.md)에서 Amazon MWAA 환경을 만드는 방법을 알아봅니다. Client VPN과 동일한 AWS 리전에 환경을 만들고 Client VPN과 동일한 VPC, 프라이빗 서브넷 및 보안 그룹을 사용해야 합니다.

# 튜토리얼: Linux Bastion Host를 사용한 프라이빗 네트워크 액세스 구성
<a name="tutorials-private-network-bastion"></a>

이 튜토리얼에서는 Amazon Managed Workflows for Apache Airflow 환경을 위해 컴퓨터에서 Apache Airflow 웹 서버까지 연결되는 SSH 터널을 생성하는 단계를 안내합니다. 여기서는 Amazon MWAA 환경을 이미 만들었다고 가정합니다. 일단 설정이 완료되면 Linux Bastion Host가 점프 서버 역할을 하여 컴퓨터와 VPC의 리소스를 안전하게 연결합니다. 그런 다음 SOCKS 프록시 관리 애드온을 사용하여 브라우저의 프록시 설정을 제어하여 Apache Airflow UI에 액세스할 수 있습니다.

**Topics**
+ [프라이빗 네트워크](#private-network-lb-onconsole)
+ [사용 사례](#private-network-lb-usecases)
+ [시작하기 전 준비 사항](#private-network-lb-prereqs)
+ [목표](#private-network-lb-objectives)
+ [1단계: Bastion 인스턴스 생성](#private-network-lb-create-bastion)
+ [2단계: SSH 터널 생성](#private-network-lb-create-test)
+ [3단계: Bastion 보안 그룹을 인바운드 규칙으로 구성](#private-network-lb-create-sgsource)
+ [4단계: Apache Airflow URL 복사](#private-network-lb-view-env)
+ [5단계: 프록시 설정 구성](#private-network-lb-browser-extension)
+ [6단계: Apache Airflow UI 열기](#private-network-lb-open)
+ [다음 단계](#bastion-next-up)

## 프라이빗 네트워크
<a name="private-network-lb-onconsole"></a>

이 튜토리얼에서는 Apache Airflow 웹 서버의 **프라이빗 네트워크** 액세스 모드를 선택했다고 가정합니다.

![\[이 이미지는 프라이빗 웹 서버가 있는 Amazon MWAA 환경의 아키텍처를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/mwaa/latest/userguide/images/mwaa-private-web-server.png)


프라이빗 네트워크 액세스 모드를 사용하면 *Amazon VPC 내에서* [사용자 환경의 IAM 정책](access-policies.md)에 대한 액세스 권한을 부여 받은 사용자만 Apache Airflow UI에 액세스할 수 있도록 제한됩니다.

프라이빗 웹 서버 액세스가 가능한 환경을 만들 때는 모든 종속성을 Python 휠 아카이브(`.whl`)에서 패키징한 다음 `requirements.txt`에서 `.whl`을 참조해야 합니다. 휠을 사용하여 종속성을 패키징하고 설치하는 방법에 대한 지침은 [Python 휠을 이용한 종속성 관리](best-practices-dependencies.md#best-practices-dependencies-python-wheels)를 참조하세요.

다음 이미지는 Amazon MWAA 콘솔에서 **프라이빗 네트워크** 옵션을 찾을 수 있는 위치를 보여줍니다.

![\[이 이미지는 Amazon MWAA 콘솔에서 프라이빗 네트워크 옵션을 찾을 수 있는 위치를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/mwaa/latest/userguide/images/mwaa-console-private-network.png)


## 사용 사례
<a name="private-network-lb-usecases"></a>

Amazon MWAA 환경을 만든 후에 이 튜토리얼을 사용할 수 있습니다. 반드시 사용자 환경과 동일한 Amazon VPC, VPC 보안 그룹 및 퍼블릭 서브넷을 사용해야 합니다.

## 시작하기 전 준비 사항
<a name="private-network-lb-prereqs"></a>

1. 사용자 권한을 확인합니다. AWS Identity and Access Management(IAM)의 사용자 계정에 VPC 리소스를 생성하고 관리할 수 있는 충분한 권한이 있는지 확인합니다.

1. Amazon MWAA VPC를 사용합니다. 이 튜토리얼은 Bastion Host를 기존 VPC에 연결한다고 가정합니다. Amazon VPC는 Amazon MWAA 환경과 동일한 리전에 있어야 하며 [VPC 네트워크 생성](vpc-create.md)에서 정의한 대로 두 개의 프라이빗 서브넷이 있어야 합니다. 

1. SSH 키를 생성합니다, 가상 서버에 연결하려면 Amazon MWAA 환경과 동일한 리전에 Amazon EC2 SSH 키(**.pem**)를 생성해야 합니다. SSH 키가 없는 경우, *Amazon EC2 사용 설명서*의 [키 페어 생성 또는 가져오기](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair)를 참조하세요.

## 목표
<a name="private-network-lb-objectives"></a>

이 튜토리얼에서는 다음을 수행합니다.

1. [기존 VPC용 CloudFormation 템플릿](https://fwd.aws/vWMxm)을 사용하여 Linux Bastion Host 인스턴스를 생성합니다.

1. 포트 `22`에 대한 수신 규칙을 사용하여 Bastion 인스턴스의 보안 그룹에 대한 인바운드 트래픽을 승인합니다. 

1. Amazon MWAA 환경의 보안 그룹에서 Bastion 인스턴스의 보안 그룹에 대한 인바운드 트래픽을 승인합니다.

1. Bastion 인스턴스로 연결되는 SSH 터널을 생성합니다.

1. Apache Airflow UI에 액세스하려면 Firefox 브라우저용 FoxyProxy 애드온을 설치하고 구성합니다.

## 1단계: Bastion 인스턴스 생성
<a name="private-network-lb-create-bastion"></a>

다음 섹션에서는 CloudFormation 콘솔의 [기존 VPC용 CloudFormation 템플릿](https://fwd.aws/vWMxm)을 사용하여 linux bastion 인스턴스를 만드는 단계를 설명합니다.

**Linux Bastion Host를 만들려면**

1. CloudFormation 콘솔에서 [빠른 시작 배포](https://fwd.aws/Jwzqv) 페이지를 엽니다.

1. 내비게이션 바의 리전 선택기를 사용하여 Amazon MWAA 환경과 동일한 AWS 리전을 선택합니다.

1. **다음**을 선택합니다.

1. **스택 이름** 텍스트 필드에 이름(예: `mwaa-linux-bastion`)을 입력합니다.

1. **파라미터**, **네트워크 구성** 창에서 다음 옵션을 선택합니다.

   1. Amazon MWAA 환경의 **VPC ID**를 선택합니다.

   1. Amazon MWAA 환경의 **퍼블릭 서브넷 1 ID**를 선택합니다.

   1. Amazon MWAA 환경의 **퍼블릭 서브넷 2 ID**를 선택합니다.

   1. **허용된 Bastion 외부 액세스 CIDR**에 가능한 가장 좁은 주소 범위(예: 내부 CIDR 범위)를 입력합니다.
**참고**  
범위를 식별하는 가장 간단한 방법은 퍼블릭 서브넷과 동일한 CIDR 범위를 사용하는 것입니다. 예를 들어, [VPC 네트워크 생성](vpc-create.md) 페이지의 CloudFormation 템플릿에 있는 퍼블릭 서브넷은 `10.192.10.0/24` 및 `10.192.11.0/24`입니다.

1. **Amazon EC2 구성** 창에서 다음을 선택합니다.

   1. **키 쌍 이름**의 드롭다운 목록에서 SSH 키를 선택합니다.

   1. **Bastion Host 이름**에 이름을 입력합니다.

   1. **TCP 전달**에서 **true**를 선택합니다.
**주의**  
이 단계에서는 TCP 전달을 **true**로 설정해야 합니다. 그렇지 않으면 다음 단계에서 SSH 터널을 생성할 수 없습니다.

1. **다음**, **다음**을 선택합니다.

1. 승인을 선택한 다음 **스택 생성**을 선택합니다.

Linux Bastion Host의 아키텍처에 대해 자세히 알아보려면 [AWS 클라우드상의 Linux Bastion Host: 아키텍처](https://docs.aws.amazon.com/quickstart/latest/linux-bastion/architecture.html)를 참조하세요.

## 2단계: SSH 터널 생성
<a name="private-network-lb-create-test"></a>

다음 단계에서는 Linux Bastion에 대한 SSH 터널을 생성하는 방법을 설명합니다. SSH 터널은 로컬 IP 주소로부터 Linux Bastion으로의 요청을 수신합니다. 이것이 이전 단계에서 Linux Bastion에 대한 TCP 전달이 `true`(으)로 설정된 이유입니다.

------
#### [ macOS/Linux ]

**명령줄을 사용하여 터널을 생성하려면**

1. Amazon EC2 콘솔에서 [인스턴스](https://console.aws.amazon.com/ec2/v2/home#/Instances:) 페이지를 엽니다.

1. 인스턴스를 선택합니다.

1. **Public IPv4 DNS**에서 주소를 복사합니다. 예를 들어 `ec2-4-82-142-1.compute-1.amazonaws.com`입니다.

1. 명령 프롬프트에서 SSH 키가 저장된 디렉터리로 이동합니다.

1. 다음 명령을 실행하여 SSH를 사용하여 bastion 인스턴스에 연결합니다. 샘플 값을 `mykeypair.pem`의 SSH 키 이름으로 대체합니다.

   ```
   ssh -i mykeypair.pem -N -D 8157 ec2-user@YOUR_PUBLIC_IPV4_DNS
   ```

------
#### [ Windows (PuTTY) ]

**PuTTY를 사용하여 터널을 생성하려면**

1. Amazon EC2 콘솔에서 [인스턴스](https://console.aws.amazon.com/ec2/v2/home#/Instances:) 페이지를 엽니다.

1. 인스턴스를 선택합니다.

1. **Public IPv4 DNS**에서 주소를 복사합니다. 예를 들어 `ec2-4-82-142-1.compute-1.amazonaws.com`입니다.

1. [PuTTY](https://www.putty.org/)를 열고 **세션**을 선택합니다.

1. **호스트 이름**에 호스트 이름을 ec2-user@*YOUR\$1PUBLIC\$1IPV4\$1DNS*로 입력하고 **포트**는 `22`(으)로 입력합니다. 

1. **SSH** 탭을 확장하고 **인증**을 선택합니다. **인증을 위한 프라이빗 키 파일**에서 로컬 ‘ppk’ 파일을 선택합니다.

1. SSH에서 **터널** 탭을 선택한 다음 *동적* 및 *자동* 옵션을 선택합니다.

1. **소스 포트**에서 `8157` 포트(또는 사용하지 않은 다른 포트)를 추가한 다음 **대상** 포트를 비워 둡니다. **추가**를 선택합니다.

1. **세션** 탭을 선택하고 세션 이름을 입력합니다. 예: `SSH Tunnel`.

1. **저장**, **열기** 를 선택합니다.
**참고**  
퍼블릭 키의 암호 문구를 입력해야 할 수도 있습니다.

------

**참고**  
`Permission denied (publickey)` 오류가 발생하는 경우 [AWSSupport-TroubleshootSSH](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-awssupport-troubleshootssh.html) 도구를 사용하고 **이 자동화(콘솔) 실행**을 선택하여 SSH 설정 문제를 해결하시기 바랍니다.

## 3단계: Bastion 보안 그룹을 인바운드 규칙으로 구성
<a name="private-network-lb-create-sgsource"></a>

서버에 대한 액세스 및 서버에서의 정기적인 인터넷 액세스는 해당 서버에 연결된 특수 유지 관리 보안 그룹을 통해 허용됩니다. 다음 단계는 Bastion 보안 그룹을 환경의 VPC 보안 그룹에 대한 트래픽의 인바운드 소스로 구성하는 방법을 설명합니다.

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

1. **네트워킹** 패널에서 **VPC 보안 그룹**을 선택합니다.

1. **인바운드 규칙 편집**을 선택합니다.

1. **다른 규칙 추가**를 선택합니다.

1. **소스** 드롭다운 목록에서 VPC 보안 그룹 ID를 선택합니다.

1. 나머지 옵션은 비워 두거나 기본값으로 설정합니다.

1. **규칙 저장**을 선택합니다.

## 4단계: Apache Airflow URL 복사
<a name="private-network-lb-view-env"></a>

다음 단계는 Amazon MWAA 콘솔을 열고 URL을 Apache Airflow UI에 복사하는 방법을 설명합니다.

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

1. 후속 단계를 위해 **Airflow UI**의 URL을 복사합니다.

## 5단계: 프록시 설정 구성
<a name="private-network-lb-browser-extension"></a>

동적 포트 전달과 함께 SSH 터널을 사용하는 경우 SOCKS 프록시 관리 추가 기능을 사용하여 브라우저의 프록시 설정을 제어해야 합니다. 예를 들어 Chromium의 `--proxy-server` 기능을 사용하여 브라우저 세션을 시작하거나, Mozilla FireFox 브라우저에서 FoxyProxy 확장 프로그램을 사용할 수 있습니다.

### 옵션 1: 로컬 포트 전달을 사용하여 SSH 터널 설정
<a name="private-network-lb-browser-extension-portforwarding"></a>

SOCKS 프록시를 사용하지 않을 경우 로컬 포트 전달을 사용하여 SSH 터널을 설정할 수 있습니다. 다음 예제 명령은 로컬 포트 8157을 통해 트래픽을 전달하여 Amazon EC2 *ResourceManager* 웹 인터페이스에 액세스합니다.

1. 새 명령 프롬프트 창을 엽니다.

1. 다음 명령을 입력하여 SSH 터널을 엽니다.

   ```
   ssh -i mykeypair.pem -N -L 8157:YOUR_VPC_ENDPOINT_ID-vpce.us-east-1.airflow.amazonaws.com:443 ubuntu@YOUR_PUBLIC_IPV4_DNS.us-east-1.compute.amazonaws.com
   ```

   `-L`은 로컬 포트 전송의 사용을 나타내며, 이를 통해 노드의 로컬 웹 서버에서 식별된 원격 포트에 데이터를 전송하는 데 사용되는 로컬 포트를 지정할 수 있습니다.

1. 브라우저에 `http://localhost:8157/`을 입력합니다.
**참고**  
`https://localhost:8157/`을 사용해야 할 수 있습니다.

### 옵션 2: 명령줄을 사용한 프록시
<a name="private-network-lb-browser-extension-foxyp"></a>

대부분의 웹 브라우저에서 명령줄 또는 구성 파라미터를 사용하여 프록시를 구성할 수 있습니다. 예를 들어 Chromium을 사용하면 다음 명령을 사용하여 브라우저를 시작할 수 있습니다.

```
chromium --proxy-server="socks5://localhost:8157"
```

그러면 이전 단계에서 만든 SSH 터널을 사용하여 요청을 프록시하는 브라우저 세션이 시작됩니다. 다음과 같이 프라이빗 Amazon MWAA 환경 URL(*https://* 사용)을 열 수 있습니다.

```
https://YOUR_VPC_ENDPOINT_ID-vpce.us-east-1.airflow.amazonaws.com/home.
```

### 옵션 3: Mozilla Firefox용 FoxyProxy를 사용하는 프록시
<a name="private-network-lb-browser-extension-foxyp"></a>

다음 예제는 Mozilla Firefox의 FoxyProxy Standard(버전 7.5.1) 구성을 보여줍니다. FoxyProxy는 일련의 프록시 관리 도구를 제공합니다. 이를 통해 Apache Airflow UI에서 사용하는 도메인에 해당하는 패턴과 일치하는 URL용 프록시 서버를 사용할 수 있습니다.

1. FireFox에서 [FoxyProxy Standard](https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/) 확장 프로그램 페이지를 엽니다.

1. **Firefox에 추가**를 선택합니다.

1. **추가**를 선택합니다.

1. 브라우저 툴바에서 FoxyProxy 아이콘을 선택하고 **옵션**을 선택합니다.

1. 다음 코드를 복사하고 로컬에 `mwaa-proxy.json`(으)로 저장합니다. *YOUR\$1HOST\$1NAME*의 샘플 값을 **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"
   }
   ```

1. **FoxyProxy 6.0\$1에서 설정 가져오기** 창에서 **가져오기 설정**을 선택하고 `mwaa-proxy.json` 파일을 선택합니다.

1. **확인**을 선택합니다.

## 6단계: Apache Airflow UI 열기
<a name="private-network-lb-open"></a>

다음 단계에서는 Apache Airflow UI를 여는 방법을 설명합니다.

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. **Airflow UI 열기**를 선택합니다.

## 다음 단계
<a name="bastion-next-up"></a>
+ [Apache Airflow CLI 명령 참조](airflow-cli-command-reference.md)의 Bastion Host에 대한 SSH 터널에서 Airflow CLI 명령을 실행하는 방법을 알아봅니다.
+ [DAG 추가 또는 업데이트](configuring-dag-folder.md)에서 Amazon S3 버킷에 DAG 코드를 업로드하는 방법을 알아봅니다.

# 튜토리얼: DAG의 하위 집합에 대한 Amazon MWAA 사용자 액세스 제한
<a name="limit-access-to-dags"></a>

Amazon MWAA는 IAM 보안 주체를 하나 이상의 Apache Airflow [기본 역할](https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html#default-roles)에 매핑하여 환경에 대한 액세스를 관리합니다. 다음 튜토리얼을 사용하여 개별 Amazon MWAA 사용자가 특정 DAG 또는 DAG 세트만 액세스하고 상호 작용하도록 제한하세요.

**참고**  
IAM 역할을 가정할 수 있는 한, 이 튜토리얼의 단계는 페더레이션 액세스를 사용하여 완료할 수 있습니다.

**Topics**
+ [사전 조건](#limit-access-to-dags-prerequisites)
+ [1단계: 기본 `Public` Apache Airflow 역할을 사용하여 Amazon MWAA 웹 서버에 IAM 보안 주체에 대한 액세스 권한을 제공합니다.](#limit-access-to-dags-apply-public-access)
+ [2단계: 새 Apache Airflow 사용자 지정 역할 생성](#limit-access-to-dags-create-new-airflow-role)
+ [3단계: 생성한 역할을 Amazon MWAA 사용자에게 할당합니다](#limit-access-to-dags-assign-role)
+ [다음 단계](#limit-access-to-dags-next-up)
+ [관련 리소스](#limit-access-to-dags-related-resources)

## 사전 조건
<a name="limit-access-to-dags-prerequisites"></a>

이 튜토리얼을 완료하려면 다음이 필요합니다.
+ [여러 DAG가 있는 Amazon MWAA 환경](get-started.md)
+ [AdministratorAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AdministratorAccess$jsonEditor) 권한이 있는 IAM 보안 주체 `Admin`와(과) DAG 액세스를 제한할 수 있는 보안 주체인 IAM 사용자 `MWAAUser`. 관리자 역할에 대한 자세한 내용은 *IAM 사용 설명서*의 [관리자 직무 기능](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator)을 참조하세요.
**참고**  
권한 정책을 IAM 사용자에게 직접 연결하지 마세요. 사용자가 Amazon MWAA 리소스에 임시로 액세스할 수 있도록 위임할 수 있는 IAM 역할을 설정하시기 바랍니다.
+ [AWS Command Line Interface 버전 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install)가 설치되었습니다.

## 1단계: 기본 `Public` Apache Airflow 역할을 사용하여 Amazon MWAA 웹 서버에 IAM 보안 주체에 대한 액세스 권한을 제공합니다.
<a name="limit-access-to-dags-apply-public-access"></a>

**를 사용하여 권한을 부여하려면 AWS Management Console**

1. `Admin` 역할을 AWS 계정 사용하여에 로그인하고 [IAM 콘솔](https://console.aws.amazon.com/iam/)을 엽니다.

1. 왼쪽의 탐색 창에서 **사용자**를 선택한 후 사용자 테이블에서 Amazon MWAA IAM 사용자를 선택합니다.

1. 사용자 세부 정보 페이지의 **요약**에서 **권한** 탭을 선택한 다음 **권한 정책**을 선택하여 카드를 확장하고 **권한 추가**를 선택합니다.

1. **권한 설정** 섹션에서 **기존 정책 직접 연결**을 선택한 후 **정책 생성**을 선택하여 사용자 지정 권한 정책을 생성하고 연결합니다.

1. **정책 생성** 페이지에서 **JSON**을 선택한 후, 정책 편집기에 다음 JSON 권한 정책을 복사하여 붙여넣습니다. 이 정책은 기본 `Public` Apache Airflow 역할을 가진 사용자에게 웹 서버 액세스 권한을 부여합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "airflow:CreateWebLoginToken",
               "Resource": [
               "arn:aws:airflow:us-east-1:111122223333:role/YOUR_ENVIRONMENT_NAME/Public"
               ]
           }
       ]
   }
   ```

------

## 2단계: 새 Apache Airflow 사용자 지정 역할 생성
<a name="limit-access-to-dags-create-new-airflow-role"></a>

**Apache Airflow UI를 사용하여 새 역할을 만들려면**

1. 관리자 IAM 역할을 사용하여 [Amazon MWAA 콘솔](https://console.aws.amazon.com/mwaa/home)을 열고 사용자 환경의 Apache Airflow UI를 시작합니다.

1. 상단의 탐색 창에서 **보안**에 마우스오버하여 드롭다운 목록을 연 다음 **역할 목록**을 선택하여 기본 Apache Airflow 역할에 액세스합니다.

1. 역할 목록에서 **사용자**를 선택한 다음 페이지 시작 부분에서 **작업**을 선택하여 드롭다운을 엽니다. **역할 복사**를 선택하고 **확인**을 클릭합니다
**참고**  
**Ops** 또는 **Viewer** 역할을 복사하여 각각 액세스 권한을 늘리거나 줄일 수 있습니다.

1. 테이블에서 생성한 새 역할을 찾아 **레코드 편집**을 선택합니다.

1. **역할 전환** 페이지에서 다음을 수행합니다.
   + **이름**의 텍스트 필드에 역할의 새 이름을 입력합니다. 예를 들어 **Restricted**입니다.
   + **권한** 목록에서 `can read on DAGs`와 `can edit on DAGs`를 제거한 다음, 액세스를 제공하려는 DAG 세트에 대한 읽기 및 쓰기 권한을 추가합니다. 예를 들어 DAG `example_dag.py`의 경우 **`can read on DAG:example_dag`** 및 **`can edit on DAG:example_dag`**을(를) 추가합니다.

   **저장**을 선택합니다. 이제 Amazon MWAA 환경에서 사용할 수 있는 DAG의 하위 집합에 대한 액세스를 제한하는 새 역할이 생겼습니다. 모든 기존 Apache Airflow 사용자에게 이 역할을 할당할 수 있습니다.

## 3단계: 생성한 역할을 Amazon MWAA 사용자에게 할당합니다
<a name="limit-access-to-dags-assign-role"></a>

**새 역할을 할당하려면**

1. `MWAAUser`에 대한 액세스 보안 인증을 사용하여 다음 CLI 명령을 실행하고 환경의 웹 서버 URL을 검색합니다.

   ```
   aws mwaa get-environment --name YOUR_ENVIRONMENT_NAME | jq '.Environment.WebserverUrl'
   ```

   성공하면 다음과 같은 결과가 출력됩니다.

   ```
   "ab1b2345-678a-90a1-a2aa-34a567a8a901.c13.us-west-2.airflow.amazonaws.com"
   ```

1. 에 `MWAAUser` 로그인한 상태에서 새 브라우저 창을 AWS Management Console열고 다음 URl에 액세스합니다. `Webserver-URL`를 자신의 정보로 대체합니다.

   ```
   https://<Webserver-URL>/home
   ```

   성공하면 `MWAAUser`에게 아직 Apache Airflow UI에 대한 액세스 권한이 부여되지 않았으므로 `Forbidden` 오류 페이지가 표시됩니다.

1. 에 `Admin` 로그인한 상태에서 Amazon MWAA 콘솔을 다시 AWS Management Console열고 환경의 Apache Airflow UI를 시작합니다.

1. UI 대시보드에서 **보안** 드롭다운을 확장하고 이번에는 **사용자 목록**을 선택합니다.

1. 사용자 테이블에서 새 Apache Airflow 사용자를 찾아 **레코드 편집**을 선택합니다. 사용자의 이름은 `user/mwaa-user`의 패턴으로 IAM 사용자 이름과 일치합니다.

1. **사용자 편집** 페이지의 **역할** 섹션에서 생성한 새 사용자 지정 역할을 추가한 다음 **저장**을 선택합니다.
**참고**  
**성** 필드는 필수이지만 스페이스를 입력해도 충분합니다.

   IAM `Public` 보안 주체는 `MWAAUser`이(가) Apache Airflow UI에 액세스할 수 있는 권한을 부여하는 반면, 새 역할은 DAG를 보는 데 필요한 추가 권한을 제공합니다.

**중요**  
Apache Airflow UI를 사용하여 추가한 IAM에서 승인하지 않은 5가지 기본 역할(예:`Admin`)은 다음 사용자 로그인 시 제거됩니다.

## 다음 단계
<a name="limit-access-to-dags-next-up"></a>
+ Amazon MWAA 환경 액세스 관리에 대해 자세히 알아보고 환경 사용자를 위해 사용할 수 있는 샘플 JSON IAM 정책을 보려면 [Amazon MWAA 환경 액세스](access-policies.md) 섹션을 참조하세요.

## 관련 리소스
<a name="limit-access-to-dags-related-resources"></a>
+ [액세스 제어](https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html) (Apache Airflow 설명서) — Apache Airflow 설명서 웹사이트에서 기본 Apache Airflow 역할에 대해 자세히 알아봅니다.

# 튜토리얼: Amazon MWAA에서 자체 환경 엔드포인트 관리 자동화
<a name="tutorials-customer-managed-endpoints"></a>

[AWS Organizations](https://docs.aws.amazon.com/)를 사용하여 리소스를 공유하는 여러 AWS 계정를 관리하는 경우, Amazon MWAA를 사용하면 자체 Amazon VPC 엔드포인트를 생성하고 관리할 수 있습니다. 즉, 환경에 필요한 리소스에만 액세스할 수 있도록 허용하는 더 엄격한 보안 정책을 사용할 수 있습니다.

공유 Amazon VPC에서 환경을 생성하면 주 Amazon VPC를 소유한 계정(*o소유자*)이 Amazon MWAA에 필요한 두 개의 개인 서브넷을 동일한 조직에 속한 다른 계정(*참가자*)과 공유합니다. 해당 서브넷을 공유하는 참여자 계정은 공유된 VPC의 환경을 보고, 생성하고, 수정하며, 삭제할 수 있습니다.

공유 또는 정책으로 제한된 Amazon VPC에 환경을 생성하면 Amazon MWAA는 먼저 서비스 VPC 리소스를 생성한 다음, 최대 72시간 동안 [https://docs.aws.amazon.com/mwaa/latest/API/API_Environment.html#mwaa-Type-Environment-Status](https://docs.aws.amazon.com/mwaa/latest/API/API_Environment.html#mwaa-Type-Environment-Status) 상태를 입력합니다.

환경 상태가 `CREATING`에서 `PENDING`으로 변경되면 Amazon MWAA는 상태 변경에 대한 Amazon EventBridge 알림을 보냅니다. 이를 통해 소유자 계정은 Amazon MWAA 콘솔이나 API의 엔드포인트 서비스 정보를 기반으로 또는 프로그래밍 방식으로 참가자를 대신하여 필요한 엔드포인트를 생성할 수 있습니다. 다음에서 Lambda 함수와 Amazon MWAA 상태 변경 알림을 수신 대기하는 EventBridge 규칙을 사용하여 새로운 Amazon VPC 엔드포인트를 생성합니다.

여기서는 환경과 동일한 Amazon VPC에 새 엔드포인트를 생성합니다. 공유 Amazon VPC를 설정하려면 소유자 계정에서 EventBridge 규칙 및 Lambda 함수를 생성하고 참가자 계정에서 Amazon MWAA 환경을 생성합니다.

**Topics**
+ [사전 조건](#tutorials-customer-managed-endpoints-prerequisites)
+ [Amazon VPC 생성](#tutorials-customer-managed-endpoints-create-vpc)
+ [Lambda 함수 생성](#tutorials-customer-managed-endpoints-create-lambda-function)
+ [EventBridge 규칙 생성](#tutorials-customer-managed-endpoints-create-eb-rule)
+ [Amazon MWAA 환경 생성](#tutorials-customer-managed-endpoints-create-mwaa)

## 사전 조건
<a name="tutorials-customer-managed-endpoints-prerequisites"></a>

이 튜토리얼을 완료하려면 다음이 필요합니다.
+ ...

## Amazon VPC 생성
<a name="tutorials-customer-managed-endpoints-create-vpc"></a>

다음 CloudFormation 템플릿과 AWS CLI 명령을 사용하여 새 Amazon VPC를 생성합니다. 템플릿은 Amazon VPC 리소스를 설정하고 엔드포인트 정책을 수정하여 특정 대기열에 대한 액세스를 제한합니다.

1. CloudFormation [템플릿](samples/cfn-vpc-private-network.zip)을 다운로드한 다음, `.yml` 파일의 압축을 풉니다.

1. 새 명령 프롬프트 창에서 템플릿을 저장한 폴더로 이동한 다음, [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html)을 사용하여 스택을 생성합니다. `--template-body` 플래그는 템플릿의 경로를 지정합니다.

   ```
   aws cloudformation create-stack --stack-name stack-name --template-body file://cfn-vpc-private-network.yml
   ```

다음 섹션에서 Lambda 함수를 생성합니다.

## Lambda 함수 생성
<a name="tutorials-customer-managed-endpoints-create-lambda-function"></a>

다음 Python 코드 및 IAM JSON 정책을 사용하여 새 Lambda 함수 및 실행 역할을 생성합니다. 이 함수는 프라이빗 Apache Airflow 웹 서버 및 Amazon SQS 대기열에 대한 Amazon VPC 엔드포인트를 생성합니다. Amazon MWAA는 Amazon SQS를 사용하여 환경 규모를 조정할 때 여러 작업자 간에 Celery를 사용하여 작업을 대기열에 넣습니다.

1. Python [함수 코드](./samples/mwaa-lambda-shared-vpc.zip)를 다운로드합니다.

1. IAM [권한 정책](./samples/lambda-mwaa-shared-vpce-policy.zip)을 다운로드한 다음, 파일의 압축을 풉니다.

1. 명령 프롬프트를 연 다음, JSON 권한 정책을 저장한 폴더로 이동합니다. IAM [https://docs.aws.amazon.com/](https://docs.aws.amazon.com/) 명령을 사용하여 새 역할을 생성합니다.

   ```
   aws iam create-role --role-name function-role \
   						--assume-role-policy-document file://lambda-mwaa-vpce-policy.json
   ```

   AWS CLI 응답의 역할 ARN을 기록합니다. 다음 단계에서는 ARN을 사용하여 이 새로운 역할을 함수의 실행 역할로 지정합니다.

1. 함수 코드를 저장한 폴더로 이동한 다음, [https://docs.aws.amazon.com/](https://docs.aws.amazon.com/) 명령을 사용하여 새 함수를 생성합니다.

   ```
   aws lambda create-function --function-name mwaa-vpce-lambda \
   --zip-file file://mwaa-lambda-shared-vpc.zip --runtime python3.8 --role arn:aws:iam::123456789012:role/function-role --handler lambda_handler
   ```

   AWS CLI 응답의 함수 ARN을 기록합니다. 다음 단계에서는 함수를 새로운 EventBridge 규칙의 대상으로 구성하도록 ARN을 지정합니다.

다음 섹션에서는 환경이 `PENDING` 상태가 될 때 이 함수를 간접적으로 호출하는 EventBridge 규칙을 생성합니다.

## EventBridge 규칙 생성
<a name="tutorials-customer-managed-endpoints-create-eb-rule"></a>

다음을 수행하여 Amazon MWAA 알림을 수신 대기하고 새로운 Lambda 함수를 대상으로 하는 새 규칙을 생성합니다.

1. EventBridge `put-rule` 명령을 사용하여 새로운 EventBridge 이벤트 규칙을 생성합니다.

   ```
   aws events put-rule --name "mwaa-lambda-rule" \
   --event-pattern "{\"source\":[\"aws.airflow\"],\"detail-type\":[\"MWAA Environment Status Change\"]}"
   ```

   이벤트 패턴은 환경 상태가 변경될 때마다 Amazon MWAA가 보내는 알림을 수신 대기합니다.

   ```
   {
   					"source": ["aws.airflow"],
   					"detail-type": ["MWAA Environment Status Change"]
   					}
   ```

1. `put-targets` 명령을 사용하여 Lambda 함수를 새로운 규칙의 대상으로 추가합니다.

   ```
   aws events put-targets --rule "mwaa-lambda-rule" \
   --targets "Id"="1","Arn"="arn:aws:lambda:us-east-1:123456789012:function:mwaa-vpce-lambda"
   ```

이제 고객 관리형 Amazon VPC 엔드포인트를 사용하여 새로운 Amazon MWAA 환경을 생성할 수 있습니다.

## Amazon MWAA 환경 생성
<a name="tutorials-customer-managed-endpoints-create-mwaa"></a>

Amazon MWAA 콘솔을 사용하여 고객 관리형 Amazon VPC 엔드포인트로 새로운 환경을 생성합니다.

1. [Amazon MWAA](https://console.aws.amazon.com/mwaa/home/) 콘솔을 열고 **환경 생성**을 선택합니다.

1. **이름**에 고유한 이름을 입력합니다.

1. **Airflow 버전**에서 최신 버전을 선택합니다.

1. **Amazon S3 버킷** 및 환경에서 사용할 `dags/`와 같은 **DAG 폴더**를 선택한 후 **다음**을 선택합니다.

1. **고급 설정 구성** 페이지에서 다음을 수행합니다.

   1. **Virtual Private Cloud**의 경우, [이전 단계](#tutorials-customer-managed-endpoints-create-vpc)에서 생성한 Amazon VPC를 선택합니다.

   1. **웹 서버 액세스**의 경우 **퍼블릭 네트워크(인터넷 액세스 가능)**를 선택합니다.

   1. **보안 그룹**의 경우 CloudFormation으로 생성한 보안 그룹을 선택합니다. 이전 단계의 AWS PrivateLink 엔드포인트에 대한 보안 그룹은 자체 참조이므로 환경에 대해 동일한 보안 그룹을 선택해야 합니다.

   1. **엔드포인트 관리**에서 **고객 관리형 엔드포인트**를 선택합니다.

1. 나머지 기본 설정을 유지하고 **다음**을 선택합니다.

1. 선택 사항을 검토한 다음, **환경 생성**을 선택합니다.

**작은 정보**  
새로운 환경 설정에 대한 자세한 내용은 [Amazon MWAA 시작하기](get-started.md)를 참조하세요.

환경이 `PENDING`이면 Amazon MWAA에서 사용자가 규칙에 대해 설정한 이벤트 패턴과 일치하는 알림을 보냅니다. 이 규칙은 Lambda 함수를 간접적으로 호출합니다. 함수는 알림 이벤트를 구문 분석하고 웹 서버 및 Amazon SQS 대기열에 필요한 엔드포인트 정보를 가져옵니다. 그런 다음 Amazon VPC에 엔드포인트를 생성합니다.

엔드포인트를 사용할 수 있게 되면 Amazon MWAA에서 환경 생성을 재개합니다. 준비가 되면 환경 상태가 `AVAILABLE`로 변경되고 Amazon MWAA 콘솔을 사용하여 Apache Airflow 웹 서버에 액세스할 수 있습니다.