

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

# Amazon VPC에서 Elastic Beanstalk 사용
<a name="vpc"></a>

이 주제에서는 Elastic Beanstalk에서 VPC 엔드포인트를 사용할 경우의 이점과 구현할 수 있는 다양한 유형의 구성에 대해 설명합니다.

[Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC)를 사용하여 Elastic Beanstalk 애플리케이션 및 관련 AWS 리소스에 대한 보안 네트워크를 생성할 수 있습니다. 환경을 생성할 때 애플리케이션 인스턴스 및 로드 밸런서에 사용되는 VPC, 서브넷 및 보안 그룹을 선택할 수 있습니다. 다음 요구 사항을 충족하는 한 원하는 VPC 구성을 모두 사용할 수 있습니다.

**VPC 요구 사항**
+ **인터넷 액세스** - 인스턴스는 다음 방법 중 하나를 통해 인터넷에 액세스할 수 있습니다.
  + **퍼블릭 서브넷** - 인스턴스에 퍼블릭 IP 주소가 있으며 인스턴스에서 인터넷 게이트웨이를 사용하여 인터넷에 액세스합니다.
  + **프라이빗 서브넷** - 인스턴스에서 NAT 디바이스를 사용하여 인터넷에 액세스합니다.
**참고**  
`elasticbeanstalk` 및 `elasticbeanstalk-health` 서비스 모두에 연결하도록 VPC의 [[VPC 엔드포인트](vpc-vpce.md)]를 구성하는 경우 인터넷 액세스는 선택 사항이며, 애플리케이션에 특별히 필요한 경우에만 필수입니다. VPC 엔드포인트가 없으면 VPC가 인터넷에 액세스할 수 있어야 합니다.  
Elastic Beanstalk에서 자동으로 설정되는 기본 VPC는 인터넷 액세스를 제공합니다.

  Elastic Beanstalk는 웹 프록시 구성 시 `HTTPS_PROXY` 같은 프록시 설정을 지원하지 않습니다.
+ **NTP** - Elastic Beanstak 환경의 인스턴스는 NTP(Network Time Protocol)를 사용하여 시스템 클록을 동기화합니다. 인스턴스가 UDP 포트 123에서 통신할 수 없는 경우 Elastic Beanstalk 상태 보고 관련 문제로 인해 클록이 동기화되지 않을 수 있습니다. 이러한 문제를 방지하려면 VPC 보안 그룹과 네트워크 ACL에서 포트 123에서의 인바운드 및 아웃바운드 UDP 트래픽을 허용하는지 확인하십시오.

[elastic-beanstalk-samples](https://github.com/awsdocs/elastic-beanstalk-samples/) 리포지토리는 Elastic Beanstalk 환경에서 사용할 VPC를 생성하는 데 사용할 수 있는 CloudFormation 템플릿을 제공합니다.

**CloudFormation 템플릿을 사용하여 리소스를 생성하려면**

1. [README](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/README.md)의 링크를 사용하여 템플릿을 다운로드하거나 샘플 리포지토리를 복제합니다.

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

1. **스택 생성**을 선택합니다.

1. **Amazon S3에 템플릿 업로드**를 선택합니다.

1. **파일 업로드**를 선택하고 로컬 시스템에서 템플릿 파일을 업로드합니다.

1. **다음**을 선택하고 지침에 따라 템플릿의 리소스를 사용하여 스택을 생성합니다.

스택 생성이 완료되면 **출력** 탭을 확인하여 VPC ID 및 서브넷 ID를 찾습니다. 이러한 정보를 사용하여 새 환경 마법사 [네트워크 구성 범주](environments-create-wizard.md#environments-create-wizard-network)에서 VPC를 구성합니다.

**Topics**
+ [퍼블릭 VPC](#services-vpc-public)
+ [퍼블릭/프라이빗 VPC](#services-vpc-privatepublic)
+ [프라이빗 VPC](#services-vpc-private)
+ [예제: 접속 호스트로 VPC에서 Elastic Beanstalk 애플리케이션 시작](vpc-bastion-host.md)
+ [예제: Amazon RDS를 사용하여 VPC에서 Elastic Beanstalk 시작](vpc-rds.md)
+ [VPC 종단점에서 Elastic Beanstalk 사용](vpc-vpce.md)
+ [엔드포인트 정책을 사용하여 VPC 엔드포인트로 액세스 제어](vpc-vpce.policy.md)

## 퍼블릭 VPC
<a name="services-vpc-public"></a>

**CloudFormation 템플릿** - [vpc-public.yaml](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/vpc-public.yaml)

**설정(로드 밸런싱 수행)**
+ **로드 밸런서 표시 여부(Load balancer visibility)** - 퍼블릭
+ **로드 밸런서 서브넷(Load balancer subnets)** - 두 퍼블릭 서브넷
+ **인스턴스 퍼블릭 IP(Instance public IP)** - 활성화됨
+ **인스턴스 서브넷(Instance subnets)** - 두 퍼블릭 서브넷
+ **인스턴스 보안 그룹(Instance security groups)** - 기본 보안 그룹 추가

**설정(단일 인스턴스)**
+ **인스턴스 서브넷(Instance subnets)** - 퍼블릭 서브넷 중 하나
+ **인스턴스 보안 그룹(Instance security groups)** - 기본 보안 그룹 추가

기본 *퍼블릭 전용* VPC 레이아웃에는 하나 이상의 퍼블릭 서브넷, 인터넷 게이트웨이 및 기본 보안 그룹(VPC 내 리소스 간 트래픽 허용)이 포함되어 있습니다. VPC에서 환경 생성 시 Elastic Beanstalk는 환경 유형에 따라 달라지는 추가 리소스를 생성합니다.

**VPC 리소스**
+ **단일 인스턴스** - Elastic Beanstalk는 인터넷에서 포트 80을 통해 수신되는 트래픽을 허용하는 애플리케이션 인스턴스에 대한 보안 그룹을 생성하고 이 인스턴스에 Elastic IP를 할당하여 퍼블릭 IP 주소를 지정합니다. 이 환경의 도메인 이름은 인스턴스의 퍼블릭 IP 주소로 확인됩니다.
+ **로드 밸런스 수행** - Elastic Beanstalk는 인터넷에서 포트 80을 통해 수신되는 트래픽을 허용하는 로드 밸런서용 보안 그룹과, 로드 밸런서 보안 그룹에서 전송되는 트래픽을 허용하는 애플리케이션 인스턴스용 보안 그룹을 생성합니다. 이 환경의 도메인 이름은 로드 밸런서의 퍼블릭 도메인 이름으로 확인됩니다.

이 구성은 기본 VPC 사용 시 Elastic Beanstalk에서 네트워킹을 관리하는 방식과 비슷합니다. 퍼블릭 서브넷의 보안은 Elastic Beanstalk에서 생성되는 로드 밸런서 및 인스턴스 보안 그룹에 따라 달라집니다. 이 구성은 NAT 게이트웨이가 필요하지 않으므로 가장 경제적인 구성입니다.

## 퍼블릭/프라이빗 VPC
<a name="services-vpc-privatepublic"></a>

**CloudFormation 템플릿** - [vpc-privatepublic.yaml](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/vpc-privatepublic.yaml)

**설정(로드 밸런싱 수행)**
+ **로드 밸런서 표시 여부(Load balancer visibility)** - 퍼블릭
+ **로드 밸런서 서브넷(Load balancer subnets)** - 두 퍼블릭 서브넷
+ **인스턴스 퍼블릭 IP(Instance public IP)** - 비활성화됨
+ **인스턴스 서브넷(Instance subnets)** - 두 프라이빗 서브넷
+ **인스턴스 보안 그룹(Instance security groups)** - 기본 보안 그룹 추가

추가 보안을 위해 프라이빗 서브넷을 VPC에 추가하여 *퍼블릭-프라이빗* 레이아웃을 생성합니다. 이 레이아웃에서는 로드 밸런서와 NAT 게이트웨이가 퍼블릭 서브넷에 있어야 하며 애플리케이션 인스턴스, 데이터베이스 및 그 밖의 리소스를 프라이빗 서브넷에서 실행할 수 있습니다. 프라이빗 서브넷의 인스턴스는 로드 밸런서와 NAT 게이트웨이를 통해서만 인터넷과 통신할 수 있습니다.

## 프라이빗 VPC
<a name="services-vpc-private"></a>

**CloudFormation 템플릿** - [vpc-private.yaml](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/cfn-templates/vpc-private.yaml)

**설정(로드 밸런싱 수행)**
+ **로드 밸런서 표시 여부(Load balancer visibility)** - 프라이빗
+ **로드 밸런서 서브넷(Load balancer subnets)** - 두 프라이빗 서브넷
+ **인스턴스 퍼블릭 IP(Instance public IP)** - 비활성화됨
+ **인스턴스 서브넷(Instance subnets)** - 두 프라이빗 서브넷
+ **인스턴스 보안 그룹(Instance security groups)** - 기본 보안 그룹 추가

인터넷에서 액세스해서는 안 되는 내부 애플리케이션의 경우, 모든 것을 프라이빗 서브넷에서 실행하고 로드 밸런서가 내부로 연결되도록 구성할 수 있습니다(**로드 밸런서 표시 여부**를 **내부**로 변경). 이 템플릿은 퍼블릭 서브넷과 인터넷 게이트웨이가 없는 VPC를 생성합니다. 동일한 VPC 또는 연결된 VPN에서만 액세스해야 하는 애플리케이션에는 이 레이아웃을 사용합니다.

### 프라이빗 VPC에서 Elastic Beanstalk 환경 실행
<a name="services-vpc-private-beanstalk"></a>

프라이빗 VPC에서 Elastic Beanstalk 환경을 생성하면 해당 환경은 인터넷에 액세스할 수 없습니다. 애플리케이션에서 Elastic Beanstalk 서비스 또는 다른 서비스에 액세스해야 할 수 있습니다. 사용자 환경에서 향상된 상태 보고를 사용할 수 있으며, 이 경우 환경 인스턴스는 상태 정보를 향상된 상태 서비스로 전송합니다. 환경 인스턴스의 Elastic Beanstalk 코드는 트래픽을 다른 AWS 서비스로 보내고 다른 트래픽은 비AWS 엔드포인트로 전송합니다(예: 애플리케이션의 종속성 패키지 다운로드). 이 경우 환경이 제대로 작동하는지 확인하기 위해 다음과 같은 몇 가지 단계를 수행해야 할 수 있습니다.
+ *Elastic Beanstalk에 대한 VPC 종단점 구성* - Elastic Beanstalk 및 확장 상태 서비스에서는 VPC 종단점을 지원하므로, 이러한 서비스에 대한 트래픽이 Amazon 네트워크 내부에 유지되고 인터넷 액세스가 필요하지 않습니다. 자세한 내용은 [VPC 종단점에서 Elastic Beanstalk 사용](vpc-vpce.md) 단원을 참조하십시오.
+ *추가 서비스를 위한 VPC 엔드포인트 구성* - Elastic Beanstalk 인스턴스는 사용자를 대신하여 Amazon Simple Storage Service(Amazon S3), Amazon Simple Queue Service(Amazon SQS) AWS CloudFormation및 Amazon CloudWatch Logs와 같은 여러 다른 AWS 서비스로 트래픽을 전송합니다. 이러한 서비스에 대해서도 VPC 엔드포인트를 구성해야 합니다. 서비스별 링크를 비롯하여 VPC 엔드포인트에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)를 참조하세요.
**참고**  
Elastic Beanstalk를 포함한 일부 AWS 서비스는 제한된 수의 AWS 리전에서 VPC 엔드포인트를 지원합니다. 프라이빗 VPC 솔루션을 설계할 때 여기에 언급된 Elastic Beanstalk 및 기타 종속 서비스가 선택한 AWS 리전의 VPC 엔드포인트를 지원하는지 확인합니다.
+ *프라이빗 도커 이미지 제공* - [Docker](create_deploy_docker.md) 환경에서 환경 인스턴스의 코드가 환경 생성 중에 인터넷에서 구성된 도커 이미지를 가져오려고 하지만 실패할 수 있습니다. 이 문제를 방지하려면 사용자 환경에서 [사용자 지정 도커 이미지를 빌드](single-container-docker-configuration.md#single-container-docker-configuration.dockerfile)하거나, [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/)(Amazon ECR)에 저장된 도커 이미지를 사용하고 [Amazon ECR 서비스에 대한 VPC 종단점을 구성](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html)합니다.
+ *DNS 이름 활성화* - 환경 인스턴스의 Elastic Beanstalk 코드는 퍼블릭 엔드포인트를 사용하여 모든 AWS 서비스로 트래픽을 전송합니다. 이 트래픽이 이동하도록 하려면 모든 인터페이스 VPC 엔드포인트를 구성할 때 [**Enable DNS name**] 옵션을 선택합니다. 그러면 퍼블릭 서비스 엔드포인트를 인터페이스 VPC 엔드포인트에 매핑하는 DNS 항목이 VPC에 추가됩니다.
**중요**  
VPC가 프라이빗이 아니고 퍼블릭 인터넷에 액세스되는 경우와 VPC 엔드포인트에 대해 [**Enable DNS name**]을 비활성화한 경우 해당 서비스에 대한 트래픽은 퍼블릭 인터넷을 통해 이동합니다. 이는 원하는 것이 아닐 것입니다. 프라이빗 VPC는 이 트래픽이 이동하는 것을 차단하고 오류를 표시하므로 프라이빗 VPC를 사용하면 이 문제를 쉽게 감지할 수 있습니다. 하지만 퍼블릭 VPC를 사용하면 아무것도 표시되지 않습니다.
+ *애플리케이션 종속성 포함* - 애플리케이션에 언어 런타임 패키지와 같은 종속성이 있는 경우 환경 생성 중에 인터넷에서 종속성을 다운로드하여 설치하려고 시도하지만 실패할 수 있습니다. 이 문제를 방지하려면 애플리케이션의 소스 번들에 모든 종속성 패키지를 포함합니다.
+ *현재 플랫폼 버전 사용* - 사용자 환경에서 2020년 2월 24일 이후에 릴리스된 플랫폼 버전을 사용해야 합니다. 특히, [Linux 업데이트 2020-02-28](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2020-02-28-linux.html), [Windows 업데이트 2020-02-24](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2020-02-24-windows.html)의 두 업데이트 중 하나 또는 그 이후에 릴리스된 플랫폼 버전을 사용합니다.
**참고**  
업데이트된 플랫폼 버전이 필요한 이유는 이전 버전에서는 **DNS 이름 활성화(Enable DNS name)** 옵션으로 생성된 DNS 항목이 Amazon SQS에 대해 제대로 작동하지 않는 문제가 있기 때문입니다.

# 예제: 접속 호스트로 VPC에서 Elastic Beanstalk 애플리케이션 시작
<a name="vpc-bastion-host"></a>

이 섹션에서는 배스천 호스트를 사용하여 VPC 내에 Elastic Beanstalk 애플리케이션을 배포하는 방법과 이 토폴로지를 구현하는 이유를 설명합니다.

Amazon EC2 인스턴스가 프라이빗 서브넷에 있는 경우, 원격으로 연결할 수 없습니다. 퍼블릭 서브넷에서 접속 서버가 프록시 역할을 하도록 설정하면 인스턴스에 연결할 수 있습니다. 예를 들어, 퍼블릭 서브넷에 SSH 포트 전달자 또는RDP 게이트웨이를 설정하여 네트워크에서 데이터베이스 서버로 전송되는 트래픽이 프록시를 경유하게 할 수 있습니다. 이 단원에는 퍼블릭 및 프라이빗 서브넷이 있는 VPC를 생성하는 방법에 대한 예제가 나와 있습니다. 인스턴스는 프라이빗 서브넷에 있으며 접속 호스트, NAT 게이트웨이, 로드 밸런서는 퍼블릭 서브넷에 있습니다. 인프라는 다음 다이어그램과 비슷합니다.

![\[배스천 호스트를 사용하는 Elastic Beanstalk 및 VPC 토폴로지의 다이어그램\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/aeb-vpc-bastion-topo-ngw.png)


접속 호스트를 사용하여 VPC 내부에 Elastic Beanstalk 애플리케이션을 배포하려면 다음 하위 단원에 설명된 단계를 완료합니다.

**Topics**
+ [퍼블릭 및 프라이빗 서브넷이 있는 VPC 생성](#vpc-bastion-host-create)
+ [접속 호스트 보안 그룹의 생성 및 구성](#vpc-bastion-create-host-sg)
+ [인스턴스 보안 그룹의 업데이트](#vpc-bastion-update-instance-sg)
+ [접속 호스트 생성](#vpc-bastion-host-launch)

## 퍼블릭 및 프라이빗 서브넷이 있는 VPC 생성
<a name="vpc-bastion-host-create"></a>

[퍼블릭/프라이빗 VPC](vpc.md#services-vpc-privatepublic)의 모든 절차를 완료합니다. 애플리케이션을 배포할 때 원격으로 연결할 수 있도록 인스턴스에 대해 Amazon EC2 키 페어를 지정해야 합니다. 인스턴스 키 페어를 지정하는 방법에 대한 자세한 내용은 [Elastic Beanstalk 환경에 대한 Amazon EC2 인스턴스](using-features.managing.ec2.md) 단원을 참조하십시오.

## 접속 호스트 보안 그룹의 생성 및 구성
<a name="vpc-bastion-create-host-sg"></a>

접속 호스트에 대한 보안 그룹을 생성하고, 인터넷에서의 인바운드 SSH 트래픽 및 Amazon EC2 인스턴스를 포함하는 프라이빗 서브넷으로의 아웃바운드 SSH 트래픽을 허용하는 규칙을 추가합니다.

**접속 호스트 보안 그룹을 생성하려면**

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

1. 탐색 창에서 [**Security Groups**]를 선택합니다.

1. **보안 그룹 생성**을 선택합니다.

1. **보안 그룹 생성** 대화 상자에 다음을 입력한 후 **예, 생성**을 선택합니다.  
**Name 태그**(선택 사항)  
보안 그룹에 이름 태그를 입력합니다.  
**그룹 이름**  
보안 그룹의 이름을 입력합니다.  
**설명**  
보안 그룹에 대한 설명을 입력합니다.  
**VPC**  
해당 VPC를 선택합니다.

   보안 그룹이 생성되고 **보안 그룹** 페이지에 나타납니다. 그룹에 ID(예: `sg-xxxxxxxx`)가 있습니다. 페이지 오른쪽 상단에서 **표시/숨기기**를 클릭하여 **그룹 ID** 열을 활성화해야 할 수 있습니다.

**접속 호스트 보안 그룹을 구성하려면**

1. 보안 그룹 목록에서 방금 생성한 접속 호스트에 대한 보안 그룹에 해당되는 확인란을 선택합니다.

1. **Inbound Rules** 탭에서 [**Edit**]를 선택합니다.

1. 필요에 따라 **다른 규칙 추가**를 선택합니다.

1. 접속 호스트가 Linux 인스턴스인 경우 **유형**에서 **SSH**를 선택합니다.

   접속 호스트가 Windows 인스턴스인 경우 **유형**에서 **RDP**를 선택합니다.

1. **소스** 필드에 원하는 소스 CIDR 범위를 입력한 후 **저장**을 선택합니다.  
![\[접속 호스트 보안 그룹\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/vpc-bh-sg-inbound.png)

1. **아웃바운드 규칙** 탭에서 **편집**을 선택합니다.

1. 필요에 따라 **다른 규칙 추가**를 선택합니다.

1. **유형**에서 인바운드 규칙에 대해 지정한 유형을 선택합니다.

1. **소스** 필드에서 VPC 프라이빗 서브넷에 호스트 서브넷의 CIDR 범위를 입력합니다.

   이를 찾는 방법:

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

   1. 탐색 창에서 **Subnets**를 선택합니다.

   1. 배스천 호스트를 연결할 호스트가 있는 각 **가용 영역**의 **IPv4 CIDR** 아래 값을 기록합니다.
**참고**  
여러 가용 영역에 호스트가 있다면 각 가용 영역에 대해 아웃바운드 규칙을 생성합니다.  
![\[VPC 서브넷\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/vpc-subnets.png)

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

## 인스턴스 보안 그룹의 업데이트
<a name="vpc-bastion-update-instance-sg"></a>

기본적으로 생성한 인스턴스의 보안 그룹은 수신 트래픽을 허용하지 않습니다. Elastic Beanstalk가 SSH 트래픽을 허용하도록 인스턴스에 대한 기본 그룹을 수정하는 반면, 인스턴스가 Windows 인스턴스인 경우 RDP 트래픽을 허용하도록 사용자 지정 인스턴스 보안 그룹을 수정해야 합니다.

**RDP에 대한 인스턴스 보안 그룹을 업데이트하려면**

1. 보안 그룹 목록에서 인스턴스 보안 그룹에 해당되는 확인란을 선택합니다.

1. **인바운드** 탭에서 **편집**을 선택합니다.

1. 필요에 따라 **다른 규칙 추가**를 선택합니다.

1. 다음 값을 입력하고 **저장**을 선택합니다.  
**유형**  
`RDP`  
**프로토콜**  
`TCP`  
**포트 범위**  
`3389`  
**소스**  
접속 호스트 보안 그룹의 ID(예: `sg-8a6f71e8`)를 입력하고 **저장**을 선택합니다.

## 접속 호스트 생성
<a name="vpc-bastion-host-launch"></a>

접속 호스트를 만들려면 접속 호스트 역할을 하는 퍼블릭 서브넷에서 Amazon EC2 인스턴스를 시작합니다.

프라이빗 서브넷에서 Windows 인스턴스에 대한 접속 호스트를 설정하는 것에 대한 자세한 내용은 [Bastion 서버를 사용하여 EC2 인스턴스에 대한 네트워크 액세스 제어](https://aws.amazon.com/blogs/security/controlling-network-access-to-ec2-instances-using-a-bastion-server/) 단원을 참조하세요.

프라이빗 서브넷에서 Linux 인스턴스에 대한 접속 호스트를 설정하는 것에 대한 자세한 내용은 [프라이빗 Amazon VPC에서 실행 중인 Linux 인스턴스에 안전하게 연결](https://aws.amazon.com/blogs/security/securely-connect-to-linux-instances-running-in-a-private-amazon-vpc/) 단원을 참조하세요.

# 예제: Amazon RDS를 사용하여 VPC에서 Elastic Beanstalk 시작
<a name="vpc-rds"></a>

이 단원에서는 NAT 게이트웨이를 사용하여 VPC에서 Amazon RDS로 Elastic Beanstalk 애플리케이션을 배포하는 작업을 안내합니다.

인프라는 다음 다이어그램과 비슷합니다.

![\[Amazon RDS 기반의 Elastic Beanstalk 및 VPC 토폴로지에 대한 다이어그램\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/aeb-vpc-rds-topo-ngw.png)


**참고**  
이전에 애플리케이션으로 DB 인스턴스를 사용해 본 적이 없는 경우, [인스턴스 한 개를 테스트 환경에 추가](using-features.managing.db.md)하고 [외부 DB 인스턴스에 연결](AWSHowTo.RDS.md)한 후 VPC 구성을 목록에 추가합니다.

## 퍼블릭 및 프라이빗 서브넷이 있는 VPC 생성
<a name="vpc-rds-create"></a>

[Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/)을 사용하여 VPC를 생성할 수 있습니다.

**VPC를 생성하려면**

1. [Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/)에 로그인합니다.

1. 탐색 창에서 **VPC 대시보드**를 선택합니다. 그 다음에 [**Create VPC**]를 선택합니다.

1. **퍼블릭 및 프라이빗 서브넷이 있는 VPC**를 선택한 후 **선택**을 누릅니다.  
![\[퍼블릭 및 프라이빗 서브넷이 있는 VPC를 선택한 후 "선택"을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/Case2_Wizard_Page2.png)

1. Elastic Load Balancing 로드 밸런서와 Amazon EC2 인스턴스는 서로 통신할 수 있도록 동일한 가용 영역에 있어야 합니다. 각 **가용 영역** 목록에서 동일한 가용 영역을 선택합니다.  
![\[프라이빗 서브넷과 퍼블릭 서브넷에 대해 동일한 가용 영역을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/Case2_Wizard_Confirmation2.png)

1. NAT 게이트웨이에 대해 탄력적 IP 주소를 선택합니다.

1. **VPC 생성**을 선택합니다.

   마법사가 VPC, 서브넷, 인터넷 게이트웨이를 생성하기 시작합니다. 또한 기본 라우팅 테이블을 업데이트하고 사용자 지정 라우팅 테이블을 생성합니다. 마지막으로 마법사는 퍼블릭 서브넷에 NAT 게이트웨이를 생성합니다.
**참고**  
NAT 게이트웨이 대신 퍼블릭 서브넷에서 NAT 인스턴스를 시작하기로 선택할 수 있습니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [시나리오 2: 퍼블릭 서브넷과 프라이빗 서브넷이 있는 VPC(NAT)](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html)를 참조하세요.

1. VPC가 성공적으로 만들어진 후 VPC ID를 가져옵니다. 다음 단계에서 이 값을 사용합니다. VPC ID를 보려면 [Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/) 왼쪽 창에서 **VPC**를 선택합니다.  
![\[Amazon VPC 콘솔에 VPC ID가 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/aeb-vpc-id.png)

## DB 서브넷 그룹 만들기
<a name="vpc-rds-subnet"></a>

VPC에 대한 DB 서브넷 그룹은 백엔드 RDS DB 인스턴스에 대해 지정할 수 있는 서브넷(일반적으로 프라이빗 서브넷)의 모음입니다. 각 DB 서브넷 그룹에는 지정된 AWS 리전의 모든 가용 영역에 대해 하나 이상의 서브넷이 있어야 합니다. 자세히 알아보려면 [VPC에서 서브넷 만들기](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet) 단원을 참조하세요.

**DB 서브넷 그룹 만들기**

1. [Amazon RDS 콘솔](https://console.aws.amazon.com/rds/)을 엽니다.

1. 탐색 창에서 [**Subnet groups**]를 선택합니다.

1. [**Create DB Subnet Group**]을 선택합니다.

1. **이름**을 선택한 후 DB 서브넷 그룹의 이름을 입력합니다.

1. **설명**을 선택한 후 DB 서브넷 그룹에 대한 설명을 입력합니다.

1. **VPC**에서 해당 VPC의 ID를 선택합니다.

1. **서브넷 추가**에서 **이 VPC와 관련된 모든 서브넷 추가**를 선택합니다.  
![\[VPC와 관련된 모든 서브넷을 추가합니다.\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/aeb-vpc-rds-addsubnets.png)

1. 모두 마쳤으면 [**Create **]를 선택합니다.

   새 DB 서브넷 그룹이 Amazon RDS 콘솔의 서브넷 그룹 목록에 나타납니다. 해당 그룹을 선택하면 창 하단에 있는 세부 정보 페이지에서 이 그룹과 연결된 모든 서브넷을 포함한 세부 정보를 확인할 수 있습니다.

## Elastic Beanstalk에 배포
<a name="vpc-rds-create-env"></a>

VPC를 설정한 후 VPC 내에 환경을 생성하고 Elastic Beanstalk에 애플리케이션을 배포할 수 있습니다. Elastic Beanstalk 콘솔을 사용하거나 도구 키트, AWS CLI EB CLI 또는 Elastic Beanstalk API를 AWS 사용할 수 있습니다. Elastic Beanstalk 콘솔을 사용하는 경우 `.war` 또는 `.zip` 파일을 업로드하고 마법사 내에서 VPC 설정을 선택하기만 하면 됩니다. 그러면 Elastic Beanstalk가 VPC 내에 환경을 생성하고 애플리케이션을 배포합니다. 또는 AWS 도구 키트, AWS CLI EB CLI 또는 Elastic Beanstalk API를 사용하여 애플리케이션을 배포할 수 있습니다. 이를 위해 구성 파일에 VPC 옵션 설정을 정의하고 소스 번들로 이 파일을 배포해야 합니다. 이 주제는 두 방법 모두에 대한 지침을 제공합니다.

### Elastic Beanstalk 콘솔을 사용하여 배포
<a name="vpc-rds-new-console"></a>

Elastic Beanstalk 콘솔이 VPC 내에 새 환경을 생성하는 과정을 안내합니다. `.war` 파일(Java 애플리케이션용) 또는 `.zip` 파일(다른 모든 애플리케이션용)을 제공해야 합니다. Elastic Beanstalk 환경 마법사의 **VPC 구성(VPC Configuration)** 페이지에서 다음을 선택해야 합니다.

**VPC**  
해당 VPC를 선택합니다.

**VPC 보안 그룹**  
위에서 만든 인스턴스 보안 그룹을 선택합니다.

**ELB 표시 여부**  
로드 밸런서를 일반에 공개해야 하는 경우 `External`을 선택하고 로드 밸런서를 VPC 내에서만 제공해야 하는 경우 `Internal`을 선택합니다.

로드 밸런서와 EC2 인스턴스에 대해 서브넷을 선택합니다. 로드 밸런서에 퍼블릭 서브넷을, Amazon EC2 인스턴스에 프라이빗 서브넷을 선택해야 합니다. 기본적으로 VPC 생성 마법사는 `10.0.0.0/24`에서 퍼블릭 서브넷을, `10.0.1.0/24`에서 프라이빗 서브넷을 생성합니다.

[Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/)에서 **서브넷**을 선택하여 서브넷 ID를 볼 수 있습니다.

![\[VPC의 서브넷 ID\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/aeb-vpc-subnets.png)


### AWS 도구 키트, EB CLI AWS CLI또는 API를 사용하여 배포
<a name="vpc-rds-new-options"></a>

 AWS 도구 키트, EB CLI AWS CLI또는 API를 사용하여 애플리케이션을 Elastic Beanstalk에 배포할 때 파일에서 VPC 옵션 설정을 지정하고 소스 번들과 함께 배포할 수 있습니다. 자세한 정보는 [구성 파일(`.ebextensions`)을 사용하여 고급 환경 사용자 지정](ebextensions.md)을 참조하세요.

옵션 설정을 업데이트할 때 최소한 다음을 지정해야 합니다.
+ **VPCId** - VPC의 ID를 포함합니다.
+ **Subnets** - Auto Scaling 그룹 서브넷의 ID를 포함합니다. 이 예에서 이는 프라이빗 서브넷의 ID입니다.
+ **ELBSubnets** - 로드 밸런서에 대한 서브넷의 ID를 포함합니다. 이 예에서 이는 퍼블릭 서브넷의 ID입니다.
+ **SecurityGroups** - 보안 그룹의 ID를 포함합니다.
+ **DBSubnets** - DB 서브넷의 ID를 포함합니다.
**참고**  
DB 서브넷을 사용하는 경우 VPC에 추가 서브넷을 생성하여 AWS 리전의 모든 가용 영역을 포함해야 합니다.

선택 사항으로 다음 정보도 지정할 수 있습니다.
+ **ELBScheme** - VPC 내부에 로드 밸런서를 만들어 Elastic Beanstalk 애플리케이션이 VPC 외부에서 액세스할 수 없도록 하려면 `internal`을 지정합니다.

다음은 VPC에 Elastic Beanstalk 애플리케이션을 배포할 때 사용할 수 있는 옵션 설정의 예입니다. VPC 옵션 설정에 대한 자세한 내용(지정 방법, 기본값 및 유효한 값의 예 포함)은 [구성 옵션](command-options.md)의 **aws:ec2:vpc** 네임스페이스 표를 참조하세요.

```
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: EC2KeyName
    value: ec2keypair
    
  - namespace: aws:ec2:vpc
    option_name: VPCId
    value: vpc-170647c
    
  - namespace: aws:ec2:vpc
    option_name: Subnets
    value: subnet-4f195024
    
  - namespace: aws:ec2:vpc
    option_name: ELBSubnets
    value: subnet-fe064f95
    
  - namespace: aws:ec2:vpc
    option_name: DBSubnets
    value: subnet-fg148g78
    
  - namespace: aws:autoscaling:launchconfiguration
    option_name: InstanceType
    value: m1.small
    
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: sg-7f1ef110
```

**참고**  
DB 서브넷을 사용할 때는 AWS VPC에 리전의 모든 가용 영역을 포괄하는 서브넷이 있어야 합니다.

# VPC 종단점에서 Elastic Beanstalk 사용
<a name="vpc-vpce"></a>

이 주제에서는 VPC 엔드포인트에서 Elastic Beanstalk 애플리케이션을 제공할 수 있는 이점을 설명합니다. 또한 Elastic Beanstalk 서비스에 대한 인터페이스 VPC 엔드포인트를 생성하는 지침을 제공합니다.

VPC 엔드포인트를 사용하면 인터넷 게이트웨이 AWS PrivateLink, NAT 디바이스, VPN 연결 또는 연결 없이 VPC를 지원되는 AWS 서비스 및에서 제공하는 VPC 엔드포인트 서비스에 비공개로 Direct Connect 연결할 수 있습니다.

VPC의 인스턴스는 서비스의 리소스와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않습니다. VPC와 기타 서비스 간의 트래픽은 Amazon 네트워크를 벗어나지 않습니다. VPC 엔드포인트에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)를 참조하세요.

AWS Elastic Beanstalk 는 Elastic Beanstalk 서비스에 대한 프라이빗 연결을 제공하고 트래픽 AWS PrivateLink이 퍼블릭 인터넷에 노출되지 않도록 합니다. 애플리케이션이를 사용하여 Elastic Beanstalk에 요청을 보내도록 하려면 인터페이스 VPC 엔드포인트(인터페이스 엔드포인트)라고 하는 *VPC 엔드포인트* 유형을 AWS PrivateLink구성합니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 VPC 엔드포인트(AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)를 참조하십시오.

**참고**  
Elastic Beanstalk는 제한된 수의에서 AWS PrivateLink 및 인터페이스 VPC 엔드포인트를 지원합니다 AWS 리전. 가까운 시일 AWS 리전 내에 더 많은에 대한 지원을 확대하기 위해 노력하고 있습니다.

## 듀얼 스택 구성을 통한 IPv6 지원
<a name="vpc-vpce.ipv6"></a>

Elastic Beanstalk는 IPv4 및 IPv6를 통해 들어오는 트래픽을 지원합니다. 이 섹션에서는 IPv4와 IPv6를 모두 지원하는 퍼블릭 엔드포인트와 듀얼 스택 트래픽을 지원하도록 Elastic Beanstalk VPC 엔드포인트를 구성하는 방법을 설명합니다.

**퍼블릭 엔드포인트**  
Elastic Beanstalk 서비스에는 이전 IPv4 엔드포인트와 듀얼 스택 기능이 있는 최신 엔드포인트로 구성된 두 세트의 엔드포인트가 있습니다. 두 엔드포인트 세트 모두 AWS 이름 지정 표준을 따릅니다.
+ **IPv4** 엔드포인트는 `amazonaws.com` 도메인을 사용합니다. 일반 서비스 엔드포인트의 형식은 `elasticbeanstalk.region.amazonaws.com`입니다.
+ **듀얼 스택** 엔드포인트는 `api.aws` 도메인을 사용합니다. 일반 서비스 엔드포인트의 형식은 `elasticbeanstalk.region.api.aws`입니다.

*서비스 상태* 및 *FIPS*의 엔드포인트는 호스트 이름이 다르지만 동일한 도메인 이름 패턴을 따릅니다. 엔드포인트 목록은 *Amazon Web Services 일반 참조*의 [Elastic Beanstalk 서비스 엔드포인트](https://docs.aws.amazon.com//general/latest/gr/elasticbeanstalk.html#elasticbeanstalk_region)를 참조하세요.

**Elastic Beanstalk에 대한 요청**  
[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk) 또는 [AWS SDK](https://aws.amazon.com//developer/tools/)를 사용하여 Elastic Beanstalk 서비스에 요청을 보낼 때 IPv4 엔드포인트 또는 듀얼 스택 엔드포인트를 지정할 수 있습니다. 엔드포인트 URL이 지정되지 않은 경우 AWS CLI 및 AWS SDK는 기본적으로 IPv4-only 엔드포인트를 사용합니다.

다음 예제에서는 듀얼 스택 엔드포인트로 요청을 AWS CLI 보내는 방법을 보여줍니다.

**Example**  

```
aws elasticbeanstalk list-available-solution-stacks \
    --endpoint-url "https://elasticbeanstalk.us-east-1.api.aws"
```

다음 예제에서는 듀얼 스택 엔드포인트에 요청을 보내는 AWS Python SDK를 보여줍니다.

**Example**  

```
import boto3

dual_stack_eb_client = boto3.client(
    service_name='elasticbeanstalk',
    region_name='us-east-1',
    endpoint_url='https://elasticbeanstalk.us-east-1.api.aws';
)

print(dual_stack_eb_client.list_available_solution_stacks())
```

**듀얼 스택 IP용 VPC 엔드포인트**  
듀얼 스택 트래픽을 지원하도록 Elastic Beanstalk VPC 엔드포인트를 구성하려면 VPC 엔드포인트의 **IP 주소 유형** 파라미터에 **dualstack**을 지정합니다. [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk), [AWS SDK](https://aws.amazon.com//developer/tools/) 또는 AWS PrivateLink 콘솔을 통해이 필드를 지정할 수 있습니다. AWS PrivateLink 콘솔에서 이를 수행하는 방법에 대한 지침은 *AWS PrivateLink 가이드*의 [VPC 엔드포인트 생성을](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) 참조하세요.

**참고**  
VPC 엔드포인트의 **IP 주소 유형**을 **IPv4** 또는 **dualstack**으로 지정해야 합니다. 현재 Elastic Beanstalk VPC 엔드포인트는 **IPv6** 전용 지원을 나타내는 IPv6 전용의 **IP 주소 유형**을 지원하지 않습니다. **dualstack** 옵션을 사용하면 IPv4 및 IPv6 인터넷 프로토콜을 모두 사용할 수 있습니다.

다음 예제에서는 AWS CLI를 사용하여 듀얼 스택 VPC 엔드포인트를 생성하는 방법을 보여줍니다.

**Example**  

```
aws ec2 create-vpc-endpoint \
    --vpc-id "vpc-example"
    --service-name "com.amazonaws.us-east-1.elasticbeanstalk"
    --ip-address-type "dualstack"
```

## Elastic Beanstalk에 대한 VPC 종단점 설정
<a name="vpc-vpce.eb"></a>

VPC에서 Elastic Beanstalk 서비스에 대한 인터페이스 VPC 종단점을 생성하려면 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint) 절차를 따릅니다.
+ [**서비스 이름**]에서 **com.amazonaws.*region*.elasticbeanstalk**를 선택합니다.
+ **IP 주소 유형**에서 **IPv4** 또는 **듀얼 스택**을 선택합니다. 현재 Elastic Beanstalk VPC 엔드포인트는 **IPv6** 전용 지원을 나타내는 IPv6 전용의 **IP 주소 유형**을 지원하지 않습니다. **듀얼 스택** 옵션을 사용하면 IPv4 및 IPv6 인터넷 프로토콜을 모두 사용할 수 있습니다.

퍼블릭 인터넷 액세스로 VPC를 구성한 경우 애플리케이션에서 `elasticbeanstalk.region.amazonaws.com` 또는 `elasticbeanstalk.region.api.aws` 퍼블릭 엔드포인트를 사용하여 인터넷을 통해 Elastic Beanstalk에 계속 액세스할 수 있습니다. 이를 방지하려면 엔드포인트 생성 중에 [**Enable DNS name**]을 활성화해야 합니다(기본적으로 true). 그러면 퍼블릭 서비스 엔드포인트를 인터페이스 VPC 엔드포인트에 매핑하는 DNS 항목이 VPC에 추가됩니다.

## 상태 향상을 위한 VPC 엔드포인트 설정
<a name="vpc-vpce.healthd"></a>

환경에 대해 [확장 상태 보고를](health-enhanced.md) 활성화한 경우 확장 상태 정보를 전송하도록 구성할 수도 있습니다 AWS PrivateLink . 확장 상태 정보는 환경 인스턴스의 Elastic Beanstalk 구성 요소인 `healthd` 데몬에서 별도의 Elastic Beanstalk 확장 상태 서비스로 전송됩니다. VPC에서 이 서비스에 대한 인터페이스 VPC 종단점을 생성하려면 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint) 절차를 따릅니다.
+ [**서비스 이름**]에서 **com.amazonaws.*region*.elasticbeanstalk-health**를 선택합니다.
+ **IP 주소 유형**에서 **IPv4** 또는 **듀얼 스택**을 선택합니다. 현재 Elastic Beanstalk VPC 엔드포인트는 **IPv6** 전용 지원을 나타내는 IPv6 전용의 **IP 주소 유형**을 지원하지 않습니다. **듀얼 스택** 옵션을 사용하면 IPv4 및 IPv6 인터넷 프로토콜을 모두 사용할 수 있습니다.

**중요**  
`healthd` 대몬은 향상된 상태 정보를 `elasticbeanstalk-health.region.amazonaws.com` 또는 `elasticbeanstalk-health.region.api.aws` 퍼블릭 엔드포인트로 전송합니다. 퍼블릭 인터넷 액세스로 VPC를 구성하고 VPC 엔드포인트에 대해 [**Enable DNS name**]을 비활성화한 경우 향상된 상태 정보는 퍼블릭 인터넷을 통해 이동합니다. 이는 향상된 상태 VPC 엔드포인트를 설정할 때 의도하지 않은 것일 수 있습니다. [**Enable DNS name**]이 활성화되어 있는지 확인합니다(기본적으로 true).

## 프라이빗 VPC에서 VPC 엔드포인트 사용
<a name="vpc-vpce.private"></a>

프라이빗 VPC 또는 VPC의 프라이빗 서브넷은 퍼블릭 인터넷에 액세스할 수 없습니다. [프라이빗 VPC](vpc.md#services-vpc-private)에서 Elastic Beanstalk 환경을 실행하고 보안 강화를 위해 인터페이스 VPC 종단점을 구성할 수 있습니다. 이 경우 사용자 환경에서 Elastic Beanstalk 서비스 문의 이외 다른 이유로 인터넷 연결을 시도할 수 있습니다. 프라이빗 VPC에서 환경을 실행하는 방법에 대한 자세한 내용은 [프라이빗 VPC에서 Elastic Beanstalk 환경 실행](vpc.md#services-vpc-private-beanstalk) 단원을 참조하십시오.

# 엔드포인트 정책을 사용하여 VPC 엔드포인트로 액세스 제어
<a name="vpc-vpce.policy"></a>

이 주제에서는 VPC 엔드포인트에 정책을 연결하여 애플리케이션(서비스) 및 Elastic Beanstalk 환경에 대한 액세스를 제어하는 방법을 설명합니다.

엔드포인트 정책은 엔드포인트에서 지정된 서비스로의 액세스를 제어하는 AWS Identity and Access Management (IAM) 리소스 정책입니다. 엔드포인트 정책은 엔드포인트에만 해당됩니다. 사용자 환경에 적용될 수 있는 사용자 또는 인스턴스 IAM 정책과는 별개이며 이를 재정의하거나 대체하지 않습니다.

기본적으로 VPC 엔드포인트는 연결된 서비스에 대한 모든 액세스를 허용합니다. 엔드포인트를 생성하거나 수정할 때 *엔드포인트 정책*을 연결하여 서비스와 연결된 특정 리소스에 대한 액세스를 제어할 수 있습니다. VPC 엔드포인트 정책을 작성하고 사용하는 방법에 대한 자세한 내용은 *AWS PrivateLink 가이드*의 [엔드포인트 정책을 사용하여 VPC 엔드포인트에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)를 참조하세요.

**참고**  
제한적인 엔드포인트 정책을 생성할 때 엔드포인트 정책에 의해 이러한 리소스에 대한 액세스가 차단되지 않도록 필요한 리소스에 특정 권한을 추가해야 할 수 있습니다. 이렇게 하면 환경이 계속 올바르게 배포되고 작동할 수 있습니다.

다음 예제에서는 VPC 엔드포인트를 통해 환경을 종료할 수 있는 권한을 모든 사용자에게 거부하고 모든 다른 작업에 대한 모든 액세스를 허용합니다.

```
{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "elasticbeanstalk:TerminateEnvironment",
            "Effect": "Deny",
            "Resource": "*",
            "Principal": "*"
        }
    ]
}
```

## 제한적인 VPC 엔드포인트 정책에 필요한 Amazon S3 버킷 권한
<a name="AWSHowTo.S3.VPCendpoints"></a>

VPC 엔드포인트 정책에 제한을 추가하는 경우 특정 Amazon S3 버킷 권한을 포함하여 환경이 계속 올바르게 배포되고 작동하는지 확인해야 합니다. 이 섹션에서는 필수 S3 버킷을 설명하고 예제 정책을 포함합니다.

**Topics**
+ [환경 플랫폼을 관리하기 위해 자산을 저장하는 S3 버킷](#AWSHowTo.S3.VPCendpoints.required-permissions.assets)
+ [에서 소유한 S3 버킷 CloudFormation](#AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation)
+ [소스 코드 및 기타 항목을 저장하기 위해 고객 계정에서 소유한 S3 버킷](#AWSHowTo.S3.VPCendpoints.required-permissions.items)
+ [Docker 레지스트리 인증을 지원하기 위해 고객 계정이 소유한 S3 버킷](#AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth)
+ [VPC 엔드포인트 정책 업데이트](#AWSHowTo.S3.VPCendpoints.required-permissions.assets.permissions)

### 환경 플랫폼을 관리하기 위해 자산을 저장하는 S3 버킷
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets"></a>

Elastic Beanstalk 서비스는 솔루션 스택(플랫폼 버전)과 연결된 자산을 저장하는 S3 버킷을 소유합니다. 이러한 자산에는 구성 파일, 샘플 애플리케이션 및 사용 가능한 인스턴스 유형이 포함됩니다. Elastic Beanstalk는 환경을 생성하고 관리할 때 각 해당 자산 버킷에서 특정 플랫폼 버전에 필요한 정보를 검색합니다 AWS 리전.

#### S3 버킷 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.arn"></a>

 `arn:aws:s3:::elasticbeanstalk-samples-region` 

Amazon Linux 2 이상
+  `arn:aws:s3:::elasticbeanstalk-platform-assets-region` 
**참고**  
버킷 이름은 *BJS* 리전에 대한 다른 규칙을 따릅니다. *region* 대신 *public-beta-cn-north-1* 문자열이 사용됩니다. 예를 들어 `arn:aws:s3:::elasticbeanstalk-platform-assets-public-beta-cn-north-1`입니다.

Windows Server, Amazon Linux(AMI), Amazon Linux 2 이상
+  `arn:aws:s3:::elasticbeanstalk-env-resources-region` 
+  `arn:aws:s3:::elasticbeanstalk-region` 

**참고**  
platform-assets 버킷과 env-resources 버킷의 이름은 일부 리전에서 서로 다른 명명 규칙을 따릅니다. 자세한 내용은 아래의 리전별 버킷 이름 지정 패턴 섹션을 참조하세요.

##### 리전별 버킷 ARN 패턴
<a name="AWSHowTo.S3.VPCendpoints.region-specific-buckets.collapsed"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/vpc-vpce.policy.html)

#### 운영
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.operations"></a>

GetObject

#### VPC 엔드포인트 정책 예제
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.example"></a>

다음 예제에서는 미국 동부(오하이오) 리전(us-east-2)에서 Elastic Beanstalk 작업에 필요한 S3 버킷에 대한 액세스를 제공하는 방법을 보여줍니다. 이 예제에서는 Amazon Linux 및 Windows Server 플랫폼 모두에 대한 모든 버킷을 나열합니다. 환경의 운영 체제에 적용되는 버킷만 포함하도록 정책을 업데이트합니다.

##### 예제 정책
<a name="aAWSHowTo.S3.VPCendpoints.required-permissions.assets.example.collapsed"></a>

**중요**  
이 정책에서는 특정 리전 대신에 와일드카드 문자(\$1)를 사용하지 않는 것이 좋습니다. 예를 들어 `arn:aws:s3:::cloudformation-waitcondition-*/*`를 사용하지 말고 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*`를 사용합니다. 와일드카드를 사용하면 액세스 권한을 부여하도록 의도하지 않은 S3 버킷에 액세스할 수 있습니다. 둘 이상의 리전에 대해 정책을 사용하려는 경우, 각 리전에 대해 첫 번째 `Statement` 블록을 반복하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToAWSResources",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": ["s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-platform-assets-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-samples-us-east-2/*"
            ]
         }
    ]
}
```

------

### 에서 소유한 S3 버킷 CloudFormation
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation"></a>

Elastic Beanstalk는 CloudFormation 를 사용하여 환경에 대한 리소스를 생성합니다. CloudFormation은 대기 조건에 대한 응답을 모니터링하기 AWS 리전 위해 각에 S3 버킷을 소유합니다.

Elastic Beanstalk와 같은 서비스는 CloudFormation에서 소유한 S3 버킷의 미리 설계된 Amazon S3 URL로 요청을 보내 CloudFormation과 통신합니다. CloudFormation은 `cloudformation.amazonaws.com` 서비스 위탁자를 사용하여 미리 서명된 Amazon S3 URL을 생성합니다.

자세한 내용은 *AWS CloudFormation 사용 설명서*의 [ CloudFormation VPC 엔드포인트 고려 사항](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-vpce-bucketnames.html#cfn-setting-up-vpc-considerations)을 참조하세요. 미리 서명된 URL에 대한 자세한 내용은 *Amazon S3 사용 설명서*의 [미리 서명된 URL 작업](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html)을 참조하세요.

#### S3 버킷 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.arn"></a>
+  `arn:aws:s3:::cloudformation-waitcondition-region` 

  대기 조건을 사용하는 경우 리전 이름에 대시가 포함됩니다. 예: *us-west-2*.
+  `arn:aws:s3:::cloudformation-custom-resource-response-region` 

  사용자 지정 리소스를 사용하는 경우 리전 이름에 대시가 포함되지 않습니다. 예를 들어 *uswest2*입니다.

#### 운영
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.operations"></a>

GetObject

#### VPC 엔드포인트 정책 예제
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.example"></a>

다음 예제에서는 미국 동부(오하이오) 리전(us-east-2)에서 Elastic Beanstalk 작업에 필요한 S3 버킷에 대한 액세스를 제공하는 방법을 보여줍니다.

##### 예제 정책
<a name="aAWSHowTo.S3.VPCendpoints.required-permissions.cloudformation.example.collapsed"></a>

**중요**  
이 정책에서는 특정 리전 대신에 와일드카드 문자(\$1)를 사용하지 않는 것이 좋습니다. 예를 들어 `arn:aws:s3:::cloudformation-waitcondition-*/*`를 사용하지 말고 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*`를 사용합니다. 와일드카드를 사용하면 액세스 권한을 부여하도록 의도하지 않은 S3 버킷에 액세스할 수 있습니다. 둘 이상의 리전에 대해 정책을 사용하려는 경우, 각 리전에 대해 첫 번째 `Statement` 블록을 반복하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToCloudFormation",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": ["s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::cloudformation-waitcondition-us-east-2/*",
                "arn:aws:s3:::cloudformation-custom-resource-response-us-east-2/*"
            ]
         }
    ]
}
```

------

### 소스 코드 및 기타 항목을 저장하기 위해 고객 계정에서 소유한 S3 버킷
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items"></a>

이 버킷은 환경을 소유한 AWS 고객 계정이 소유합니다. 또한 이 버킷은 소스 코드 및 요청된 로그와 같이 사용자 환경에 고유한 리소스를 저장합니다.

#### S3 버킷 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items.arn"></a>

 `arn:aws:s3:::elasticbeanstalk-region-account-id` 

#### 운영
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items.operations"></a>
+ GetObject
+ GetObjectAcl
+ PutObject
+ PutObjectAcl
+ ListBucket

#### VPC 엔드포인트 정책 예제
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.items.example"></a>

다음 예제에서는 미국 동부(오하이오) 리전(us-east-2)의 Elastic Beanstalk 작업에 필요한 S3 버킷과 예제 AWS 계정 ID 123456789012에 대한 액세스를 제공하는 방법을 보여줍니다.

##### 예제 정책
<a name="aAWSHowTo.S3.VPCendpoints.required-permissions.items.example.collapsed"></a>

**중요**  
이 정책에서는 특정 리전 대신에 와일드카드 문자(\$1)를 사용하지 않는 것이 좋습니다. 예를 들어 `arn:aws:s3:::cloudformation-waitcondition-*/*`를 사용하지 말고 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*`를 사용합니다. 와일드카드를 사용하면 액세스 권한을 부여하도록 의도하지 않은 S3 버킷에 액세스할 수 있습니다. 둘 이상의 리전에 대해 정책을 사용하려는 경우, 각 리전에 대해 첫 번째 `Statement` 블록을 반복하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToCustomerItems",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
               "s3:GetObject",
               "s3:GetObjectAcl",
               "s3:PutObject",
               "s3:PutObjectAcl",
               "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/*"
            ]
         }
    ]
}
```

------

### Docker 레지스트리 인증을 지원하기 위해 고객 계정이 소유한 S3 버킷
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth"></a>

이 버킷은 Docker 플랫폼을 기반으로 하는 환경에만 적용됩니다. 또한 이 버킷은 고객이 프로비저닝한 S3 버킷에 있는 프라이빗 Docker 레지스트리에 인증하는 데 사용되는 파일을 저장합니다. 자세한 내용은 이 가이드에 있는 Docker 플랫폼 장의 [`Dockerrun.aws.json` v3 파일 사용](docker-configuration.remote-repo.md#docker-configuration.remote-repo.dockerrun-aws)을 참조하세요.

#### S3 버킷 ARN
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.arn"></a>

ARN은 고객 계정에 따라 다릅니다.

이 S3 버킷 ARN의 형식은 `arn:aws:s3:::bucket-name`입니다.

#### 운영
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.operations"></a>

GetObject

#### VPC 엔드포인트 정책 예제
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.example"></a>

다음 예제에서는 amzn-s3-demo-bucket1이라는 이름으로 S3 버킷에 대한 액세스를 제공하는 방법을 보여줍니다.

##### 예제 정책
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.docker-auth.example.collapsed"></a>

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

****  

```
  {
  "Version":"2012-10-17",		 	 	 
  "Statement": [
     {
        "Sid": "AllowRequestsToDockerRegistryAuth",
         "Effect": "Allow",
         "Action": [
            "s3:GetObject"
          ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1"
      ]
    }
  ]
}
```

------

### VPC 엔드포인트 정책 업데이트
<a name="AWSHowTo.S3.VPCendpoints.required-permissions.assets.permissions"></a>

VPC 엔드포인트에는 정책이 하나만 연결되어 있으므로 모든 권한을 하나의 정책으로 결합해야 합니다. 다음 예제에서는 이전 예제를 모두 하나로 결합했습니다.

VPC 엔드포인트 정책을 작성하고 사용하는 방법에 대한 자세한 내용은 *AWS PrivateLink 가이드*의 [엔드포인트 정책을 사용하여 VPC 엔드포인트에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)를 참조하세요.

이전 예제와 마찬가지로 다음 예에서는 미국 동부(오하이오) 리전(us-east-2)에서 Systems Manager 작업에 필요한 S3 버킷에 대한 액세스를 제공하는 방법을 보여줍니다. 또한 예제 AWS 계정 ID가 123456789012이고 예제 버킷 이름 amzn-s3-demo-bucket1인 버킷도 포함되어 있습니다.

**중요**  
이 정책에서는 특정 리전 대신에 와일드카드 문자(\$1)를 사용하지 않는 것이 좋습니다. 예를 들어 `arn:aws:s3:::cloudformation-waitcondition-*/*`를 사용하지 말고 `arn:aws:s3:::cloudformation-waitcondition-us-east-2/*`를 사용합니다. 와일드카드를 사용하면 액세스 권한을 부여하도록 의도하지 않은 S3 버킷에 액세스할 수 있습니다. 둘 이상의 리전에 대해 정책을 사용하려는 경우, 각 리전에 대해 첫 번째 `Statement` 블록을 반복하는 것이 좋습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsToAWSResources",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-platform-assets-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-env-resources-us-east-2/*",
                "arn:aws:s3:::elasticbeanstalk-samples-us-east-2/*"
            ]
        },
        {
            "Sid": "AllowRequestsToCloudFormation",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::cloudformation-waitcondition-us-east-2/*",
                "arn:aws:s3:::cloudformation-custom-resource-response-us-east-2/*"
            ]
        },
        {
            "Sid": "AllowRequestsToCustomerItems",
            "Effect": "Allow",
            "Action": [
               "s3:GetObject",
               "s3:GetObjectAcl",
              "s3:PutObject",
               "s3:PutObjectAcl",
               "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-us-east-2-123456789012/*"
            ]
        },
        {
            "Sid": "AllowRequestsToDockerRegistryAuth",
            "Effect": "Allow",
            "Action": [
            "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1"
            ]
        }
    ]
}
```

------