InfoGrab Docs

AWS RDS 등록 마법사

요약

AWS RDS 등록 마법사는 AWS OIDC 통합의 일부로 Teleport 클러스터 Web UI에서 사용할 수 있습니다. 등록 마법사는 AWS IAM 리소스를 구성하고 Amazon RDS 데이터베이스에 대한 연결을 프록시하기 위해 ECS Fargate에 Teleport Database Service 인스턴스를 배포합니다.

AWS RDS 등록 마법사는 AWS OIDC 통합의 일부로 Teleport 클러스터 Web UI에서 사용할 수 있습니다.

등록 마법사는 AWS IAM 리소스를 구성하고 Amazon RDS 데이터베이스에 대한 연결을 프록시하기 위해 ECS Fargate에 Teleport Database Service 인스턴스를 배포합니다.

등록 마법사를 사용하여 Teleport 클러스터에 RDS 데이터베이스를 등록할 수 있습니다. ECS에서의 서버리스 Teleport Database Service 배포 예시로도 유용합니다.

작동 방식#

AWS OIDC 통합#

RDS 등록 마법사는 AWS OIDC 통합에 의존합니다. AWS OIDC 통합은 AWS IAM OpenID Connect Identity Provider(OIDC IdP)와 Teleport 클러스터가 수임할 수 있는 AWS IAM 역할을 생성하고 구성합니다.

RDS 등록 마법사는 AWS OIDC 통합 IAM 역할에 RDS 데이터베이스와 서브넷 및 보안 그룹 같은 VPC 리소스를 나열하고 Amazon ECS 서비스를 배포하는 권한을 추가합니다.

통합 역할 권한이 구성되면, 마법사는 데이터베이스를 등록하고 AWS Fargate for Amazon ECS에서 고가용성(HA) 설정으로 Teleport Database Service를 배포하는 과정을 안내합니다.

동적 데이터베이스 등록#

단일 데이터베이스를 등록하든 자동 검색을 사용하여 모든 데이터베이스를 등록하든, 마법사는 Teleport 클러스터에 db 객체를 생성하여 데이터베이스를 등록합니다. tctl을 사용하여 자세한 정보를 확인할 수 있습니다:

$ tctl get db/<database name>

Teleport Database Service 배포#

ECS 배포 아키텍처

"Deploy Database Service" 단계에서 마법사는 ECS Fargate 배포를 생성하고 구성하는 과정을 안내합니다.

마법사는 Teleport Database Service 인스턴스가 사용할 IAM 역할을 생성하기 위해 실행할 스크립트를 생성합니다. IAM 역할은 ECS에서 로그를 출력하고, RDS 데이터베이스를 설명하고, RDS 데이터베이스에 연결하는 권한을 가집니다.

그런 다음 ECS Fargate 배포를 위한 서브넷과 보안 그룹을 선택합니다.

"Deploy Teleport Service"를 클릭하면 마법사는 Teleport Database Service 인스턴스를 구성하고 시작하기 위한 다양한 설정을 포함하는 ECS 태스크 정의를 생성합니다. 태스크 정의는 첫 번째 단계에서 생성된 IAM 역할을 ECS 태스크 실행 역할ECS 태스크 역할 모두로 사용합니다.

마법사는 그런 다음 RDS 데이터베이스와 동일한 AWS VPC에 ECS 배포를 생성하고, 선택한 서브넷과 보안 그룹을 사용하도록 구성합니다. ECS 배포는 HA 설정을 위해 Teleport Database Service 태스크 정의의 두 복제본을 실행하도록 구성됩니다. RDS 데이터베이스와 동일한 VPC에 Teleport Database Service 인스턴스를 배포함으로써, 인스턴스는 프라이빗 서브넷의 데이터베이스에 연결할 수 있습니다. 데이터베이스 보안 그룹 규칙도 ECS 태스크로부터의 인바운드 트래픽을 허용해야 합니다.

ECS 태스크가 시작되면 Teleport 이미지를 가져와 teleport를 시작합니다. 그런 다음 Teleport Database Service 인스턴스는 Teleport 클러스터에 터널 연결을 설정하고 인증된 Teleport 사용자가 프록시하는 데이터베이스에 연결하는 것을 수락하기 시작합니다.

이것은 Teleport Database Service를 배포하는 서버리스 HA 방식입니다. 인터넷으로부터의 허용된 인바운드 트래픽이 필요하지 않으며 자동 에이전트 업그레이드를 지원합니다.

Teleport Database Service 인스턴스는 동적 데이터베이스 등록을 사용하도록 구성되어 있으므로 배포를 재시작하거나 수정하지 않고도 데이터베이스를 등록하거나 등록 해제할 수 있습니다. 인스턴스는 다음 레이블을 가진 Teleport의 모든 동적 db 리소스에 대한 연결을 매칭하고 프록시합니다:

account-id: ""
region: ""
vpc-id: ""

마법사가 생성한 db 객체는 이러한 레이블을 가지므로, Teleport Database Service 인스턴스가 이들을 매칭하고 연결을 프록시합니다.

AWS 리소스 태그#

RDS 등록 마법사가 생성한 AWS 리소스는 AWS Resource Groups / Tag Editor를 사용하여 검색하고 내보낼 수 있도록 AWS에서 태그가 지정됩니다. 다음 태그가 적용됩니다:

teleport.dev/cluster:       name="cluster-name"/>
teleport.dev/origin:       integration_awsoidc
teleport.dev/integration:   name="my-integration"/>

aws CLI를 사용하여 마법사가 생성한 AWS 리소스를 검색할 수도 있습니다. 을 AWS 리전 이름으로 지정합니다:

$ aws resourcegroupstaggingapi get-resources \
--region  \
--tag-filters \
Key=teleport.dev/cluster,Values= \
Key=teleport.dev/integration,Values= \
Key=teleport.dev/origin,Values=integration_awsoidc

사전 요구 사항#

  • 실행 중인 Teleport 클러스터
  • IAM Identity Provider 및 역할을 생성할 수 있는 AWS 계정 및 권한

1/2단계. RBAC 구성#

RDS 등록 마법사는 AWS OIDC 통합의 일부입니다. Teleport 역할 중 하나에 다음 허용 규칙이 필요합니다. 이는 프리셋 editor 역할에서 기본적으로 사용 가능합니다:

kind: role
version: v7
metadata:
  name: example
spec:
  allow:
    rules:
    - resources:
      - integration
      verbs:
      - create
      - update
      - list
      - read

2/2단계. Web UI 방문#

RDS 등록 마법사는 Teleport Web UI의 "Add new resource" 패널에서 사용할 수 있습니다:

RDS 등록 마법사 타일 스크린샷

Teleport Web UI는 AWS OIDC 통합 설정(아직 없는 경우), IAM 권한 구성, AWS 계정에 ECS 배포 생성 및 데이터베이스 연결 테스트 실행 단계를 안내합니다.

문제 해결#

등록 마법사는 ECS 배포 태스크가 시작되어 Teleport 클러스터에 연결될 때까지 기다립니다. 이가 발생하지 않으면 ECS 태스크가 시작에 실패했거나 Teleport 클러스터에 대한 네트워크 연결이 없는 것입니다. ECS 배포를 검사하여 문제를 추가로 해결해야 합니다.

아래의 대부분의 문제 해결 단계는 ECS 배포를 찾는 방법과 ECS에서 발생하는 일에 대한 자세한 정보를 얻는 방법을 이미 알고 있다고 가정합니다. ECS 배포를 찾는 방법을 모르는 경우, 먼저 ECS 배포를 찾는 방법을 읽으십시오.

ECS 배포를 찾는 방법#

AWS에서 ECS 서비스로 이동합니다: https://console.aws.amazon.com/ecs/v2/clusters. RDS 등록 마법사 시작 시 선택한 것과 동일한 AWS 리전을 선택했는지 확인합니다.

마법사가 생성한 ECS 클러스터는 Teleport 클러스터 이름을 따서 명명되지만, 점 .은 밑줄 _로 대체되고 추가 접미사 -teleport가 붙습니다. 예를 들어 Teleport 클러스터 이름이 example.teleport.sh이면, 해당 ECS 클러스터는 example_teleport_sh-teleport로 명명됩니다.

ECS 클러스터를 클릭합니다:

ECS 클러스터 개요 스크린샷

ECS 클러스터는 하나 이상의 ECS 서비스로 구성됩니다. 등록 마법사에서 선택한 VPC 이름을 딴 서비스를 클릭합니다 - VPC ID가 해당 ECS 서비스 이름의 접미사로 사용됩니다. 예: database-service-vpc-123456789abcdefgh:

ECS 서비스 개요 스크린샷

ECS 서비스 개요 페이지에서 "Tasks" 패널을 클릭하여 배포 태스크를 확인합니다. 실행 중이거나 대기 중인 두 개의 태스크가 있어야 합니다:

ECS 서비스 개요 스크린샷

태스크가 보이지 않으면 ECS 태스크가 실행되지 않음으로 이동합니다.

Teleport Database Service 로그를 찾는 방법#

각 ECS 태스크는 Teleport Database Service 태스크 정의의 복제본입니다. ECS 서비스 태스크 페이지로 이동하여 실행 중인 태스크 중 하나를 클릭합니다. 태스크 개요 페이지에서 "Logs" 패널을 클릭하여 Amazon CloudWatch로 출력되는 로그를 확인합니다:

ECS 태스크 로그 스크린샷

이 페이지에서 새 출력을 보려면 로그를 새로 고쳐야 합니다. "View in CloudWatch"를 클릭하고 해당 페이지에서 로그를 테일링하여 새 로그 출력을 자동으로 볼 수 있습니다.

ECS 태스크가 실행되지 않음#

배포의 태스크가 "pending" 상태를 유지하거나 중지된 경우, 개별 태스크를 확인하여 시작을 막는 요인을 파악해야 합니다.

ECS 배포 태스크 패널로 이동하여 "Filter desired status" 드롭다운을 선택하고 "Any desired status"를 선택합니다. 실행 중이지 않은 태스크를 포함하여 모든 태스크가 표시됩니다:

ECS 서비스 개요 스크린샷

중지된 태스크를 클릭하여 중지된 이유를 확인합니다. AWS는 무엇이 잘못되었는지 설명하는 오류 메시지를 표시합니다.

일반적으로 오류 메시지는 태스크가 ECS에 의해 중지된 후에만 나타나며, "Pending" 상태에 진입한 후 몇 분이 걸릴 수 있습니다.

가장 흔한 오류는 태스크가 Teleport 이미지를 가져올 수 없는 경우입니다:

CannotPullContainerError: pull image manifest has been retried 5 time(s): failed to resolve ref public.ecr.aws/gravitational/teleport-ent-distroless:16.4.3: failed to do request: Head "https://public.ecr.aws/v2/gravitational/teleport-ent-distroless/manifests/16.4.3": dial tcp 99.83.145.10:443: i/o timeout

이는 ECS 태스크가 공개 Teleport 이미지 저장소에 도달하지 못하게 하는 네트워크 연결 문제로 인해 발생합니다.

배포에 다른 보안 그룹이나 서브넷을 사용해야 할 수 있지만, AWS 콘솔에서 ECS 서비스 네트워킹 구성을 업데이트할 수 없습니다. 다행히 Teleport의 RDS 등록 마법사에서 ECS 서비스를 재배포할 수 있으며, 업데이트된 네트워크 설정으로 ECS 서비스를 재생성합니다. 이렇게 하면 새 ECS 배포 롤아웃이 트리거되어, 새 태스크가 시작된 후에만 이전 배포의 실행 중인 태스크를 제거합니다.

"Configuration and networking" 아래에 있는 ECS 서비스 네트워크 설정으로 이동합니다:

ECS 네트워크 구성 스크린샷

ECS 서비스의 보안 그룹이 아웃바운드 인터넷 접근을 허용하는지 확인합니다. AWS 보안 그룹 규칙은 가산적이므로, 여러 보안 그룹을 선택한 경우 그 중 하나만 Teleport 이미지 저장소에 아웃바운드 연결을 설정하기 위해 다음과 같은 아웃바운드 규칙이 있으면 됩니다:

아웃바운드 인터넷 트래픽을 허용하는 보안 그룹 규칙 스크린샷

다음으로 ECS 태스크 서브넷이 인터넷에 접근할 수 있는지 확인합니다. 인터넷 게이트웨이 또는 NAT 게이트웨이로의 네트워크 경로가 있어야 합니다. 서브넷 목록을 기록하고 VPC 개요 페이지로 이동하여 각각을 확인합니다:

VPC 라우트 개요 스크린샷

NAT 게이트웨이 또는 인터넷 게이트웨이를 생성하거나, 라우팅 테이블을 업데이트하거나, ECS 서비스에 다른 서브넷을 사용해야 할 수 있습니다.

마지막으로 ECS 서비스 서브넷과 연결된 네트워크 액세스 제어 목록(ACL)이 인터넷으로의 아웃바운드 트래픽도 허용하는지 확인합니다. 네트워크 ACL은 기본적으로 모든 인바운드 및 아웃바운드 트래픽을 허용하므로, 네트워크 ACL을 사용자 지정한 경우에만 네트워크 문제의 잠재적 원인이 될 수 있습니다.

ECS 서비스에서 Teleport 이미지 저장소로의 네트워크 연결이 설정되면, ECS 태스크는 일정 시간 후 자체적으로 성공적으로 시작되어야 합니다.

데이터베이스 연결 테스트 타임아웃#

데이터베이스에 대한 연결을 테스트하고 연결이 타임아웃되면, ECS 배포에서 데이터베이스로의 네트워크 연결을 수정해야 합니다.

예를 들어, AWS 보안 그룹이 연결을 차단하여 ECS 배포 태스크가 RDS postgres 데이터베이스에 도달하지 못할 때의 모습입니다:

데이터베이스 연결 테스트 타임아웃 스크린샷

이 오류의 가장 일반적인 원인은 RDS 데이터베이스에 연결된 보안 그룹 규칙이 ECS 태스크로부터의 인바운드 트래픽을 허용하지 않는 것입니다.

이 문제를 해결하는 가장 쉬운 방법은 ECS 서비스와 연결된 보안 그룹 중 하나에서의 트래픽을 허용하는 인바운드 규칙을 RDS 데이터베이스의 보안 그룹 중 하나에 추가하는 것입니다. AWS에서는 다음과 같이 보일 수 있습니다:

데이터베이스 보안 그룹 인바운드 규칙 스크린샷

AWS 도달 가능성 분석기를 실행하여 네트워크 문제를 진단할 수도 있습니다. ECS 서비스로 이동하여 태스크 중 하나를 클릭한 다음, "Networking" 탭을 선택하고 "Run Reachability Analyzer"를 클릭합니다:

태스크 네트워킹 패널 스크린샷

분석기 경로 생성 페이지에서 "Path Source"는 ECS 태스크의 AWS Elastic Network Interface(ENI)로 자동으로 채워져야 합니다.

"Path destination"을 데이터베이스와 연결된 ENI로 설정합니다. 데이터베이스 ENI를 찾으려면 ENI 개요로 이동하여(올바른 AWS 리전이 선택되어 있는지 확인) "RDS"를 검색합니다.

네트워크 분석기 경로를 생성하고 실행합니다. 잠시 후 분석 결과를 사용할 수 있지만, 새로 고침 아이콘을 몇 번 클릭해야 할 수도 있습니다.

예를 들어, 데이터베이스 보안 그룹이 ECS 서비스 태스크로부터의 인바운드 트래픽을 허용하지 않을 때의 모습입니다:

네트워크 분석기 결과 예시 스크린샷

다음 단계#

AWS RDS 등록 마법사

원문 보기
요약

AWS RDS 등록 마법사는 AWS OIDC 통합의 일부로 Teleport 클러스터 Web UI에서 사용할 수 있습니다. 등록 마법사는 AWS IAM 리소스를 구성하고 Amazon RDS 데이터베이스에 대한 연결을 프록시하기 위해 ECS Fargate에 Teleport Database Service 인스턴스를 배포합니다.

AWS RDS 등록 마법사는 AWS OIDC 통합의 일부로 Teleport 클러스터 Web UI에서 사용할 수 있습니다.

등록 마법사는 AWS IAM 리소스를 구성하고 Amazon RDS 데이터베이스에 대한 연결을 프록시하기 위해 ECS Fargate에 Teleport Database Service 인스턴스를 배포합니다.

등록 마법사를 사용하여 Teleport 클러스터에 RDS 데이터베이스를 등록할 수 있습니다. ECS에서의 서버리스 Teleport Database Service 배포 예시로도 유용합니다.

작동 방식#

AWS OIDC 통합#

RDS 등록 마법사는 AWS OIDC 통합에 의존합니다. AWS OIDC 통합은 AWS IAM OpenID Connect Identity Provider(OIDC IdP)와 Teleport 클러스터가 수임할 수 있는 AWS IAM 역할을 생성하고 구성합니다.

RDS 등록 마법사는 AWS OIDC 통합 IAM 역할에 RDS 데이터베이스와 서브넷 및 보안 그룹 같은 VPC 리소스를 나열하고 Amazon ECS 서비스를 배포하는 권한을 추가합니다.

통합 역할 권한이 구성되면, 마법사는 데이터베이스를 등록하고 AWS Fargate for Amazon ECS에서 고가용성(HA) 설정으로 Teleport Database Service를 배포하는 과정을 안내합니다.

동적 데이터베이스 등록#

단일 데이터베이스를 등록하든 자동 검색을 사용하여 모든 데이터베이스를 등록하든, 마법사는 Teleport 클러스터에 db 객체를 생성하여 데이터베이스를 등록합니다. tctl을 사용하여 자세한 정보를 확인할 수 있습니다:

$ tctl get db/<database name>

Teleport Database Service 배포#

ECS 배포 아키텍처

"Deploy Database Service" 단계에서 마법사는 ECS Fargate 배포를 생성하고 구성하는 과정을 안내합니다.

마법사는 Teleport Database Service 인스턴스가 사용할 IAM 역할을 생성하기 위해 실행할 스크립트를 생성합니다. IAM 역할은 ECS에서 로그를 출력하고, RDS 데이터베이스를 설명하고, RDS 데이터베이스에 연결하는 권한을 가집니다.

그런 다음 ECS Fargate 배포를 위한 서브넷과 보안 그룹을 선택합니다.

"Deploy Teleport Service"를 클릭하면 마법사는 Teleport Database Service 인스턴스를 구성하고 시작하기 위한 다양한 설정을 포함하는 ECS 태스크 정의를 생성합니다. 태스크 정의는 첫 번째 단계에서 생성된 IAM 역할을 ECS 태스크 실행 역할ECS 태스크 역할 모두로 사용합니다.

마법사는 그런 다음 RDS 데이터베이스와 동일한 AWS VPC에 ECS 배포를 생성하고, 선택한 서브넷과 보안 그룹을 사용하도록 구성합니다. ECS 배포는 HA 설정을 위해 Teleport Database Service 태스크 정의의 두 복제본을 실행하도록 구성됩니다. RDS 데이터베이스와 동일한 VPC에 Teleport Database Service 인스턴스를 배포함으로써, 인스턴스는 프라이빗 서브넷의 데이터베이스에 연결할 수 있습니다. 데이터베이스 보안 그룹 규칙도 ECS 태스크로부터의 인바운드 트래픽을 허용해야 합니다.

ECS 태스크가 시작되면 Teleport 이미지를 가져와 teleport를 시작합니다. 그런 다음 Teleport Database Service 인스턴스는 Teleport 클러스터에 터널 연결을 설정하고 인증된 Teleport 사용자가 프록시하는 데이터베이스에 연결하는 것을 수락하기 시작합니다.

이것은 Teleport Database Service를 배포하는 서버리스 HA 방식입니다. 인터넷으로부터의 허용된 인바운드 트래픽이 필요하지 않으며 자동 에이전트 업그레이드를 지원합니다.

Teleport Database Service 인스턴스는 동적 데이터베이스 등록을 사용하도록 구성되어 있으므로 배포를 재시작하거나 수정하지 않고도 데이터베이스를 등록하거나 등록 해제할 수 있습니다. 인스턴스는 다음 레이블을 가진 Teleport의 모든 동적 db 리소스에 대한 연결을 매칭하고 프록시합니다:

account-id: ""
region: ""
vpc-id: ""

마법사가 생성한 db 객체는 이러한 레이블을 가지므로, Teleport Database Service 인스턴스가 이들을 매칭하고 연결을 프록시합니다.

AWS 리소스 태그#

RDS 등록 마법사가 생성한 AWS 리소스는 AWS Resource Groups / Tag Editor를 사용하여 검색하고 내보낼 수 있도록 AWS에서 태그가 지정됩니다. 다음 태그가 적용됩니다:

teleport.dev/cluster:       name="cluster-name"/>
teleport.dev/origin:       integration_awsoidc
teleport.dev/integration:   name="my-integration"/>

aws CLI를 사용하여 마법사가 생성한 AWS 리소스를 검색할 수도 있습니다. 을 AWS 리전 이름으로 지정합니다:

$ aws resourcegroupstaggingapi get-resources \
--region  \
--tag-filters \
Key=teleport.dev/cluster,Values= \
Key=teleport.dev/integration,Values= \
Key=teleport.dev/origin,Values=integration_awsoidc

사전 요구 사항#

  • 실행 중인 Teleport 클러스터
  • IAM Identity Provider 및 역할을 생성할 수 있는 AWS 계정 및 권한

1/2단계. RBAC 구성#

RDS 등록 마법사는 AWS OIDC 통합의 일부입니다. Teleport 역할 중 하나에 다음 허용 규칙이 필요합니다. 이는 프리셋 editor 역할에서 기본적으로 사용 가능합니다:

kind: role
version: v7
metadata:
  name: example
spec:
  allow:
    rules:
    - resources:
      - integration
      verbs:
      - create
      - update
      - list
      - read

2/2단계. Web UI 방문#

RDS 등록 마법사는 Teleport Web UI의 "Add new resource" 패널에서 사용할 수 있습니다:

RDS 등록 마법사 타일 스크린샷

Teleport Web UI는 AWS OIDC 통합 설정(아직 없는 경우), IAM 권한 구성, AWS 계정에 ECS 배포 생성 및 데이터베이스 연결 테스트 실행 단계를 안내합니다.

문제 해결#

등록 마법사는 ECS 배포 태스크가 시작되어 Teleport 클러스터에 연결될 때까지 기다립니다. 이가 발생하지 않으면 ECS 태스크가 시작에 실패했거나 Teleport 클러스터에 대한 네트워크 연결이 없는 것입니다. ECS 배포를 검사하여 문제를 추가로 해결해야 합니다.

아래의 대부분의 문제 해결 단계는 ECS 배포를 찾는 방법과 ECS에서 발생하는 일에 대한 자세한 정보를 얻는 방법을 이미 알고 있다고 가정합니다. ECS 배포를 찾는 방법을 모르는 경우, 먼저 ECS 배포를 찾는 방법을 읽으십시오.

ECS 배포를 찾는 방법#

AWS에서 ECS 서비스로 이동합니다: https://console.aws.amazon.com/ecs/v2/clusters. RDS 등록 마법사 시작 시 선택한 것과 동일한 AWS 리전을 선택했는지 확인합니다.

마법사가 생성한 ECS 클러스터는 Teleport 클러스터 이름을 따서 명명되지만, 점 .은 밑줄 _로 대체되고 추가 접미사 -teleport가 붙습니다. 예를 들어 Teleport 클러스터 이름이 example.teleport.sh이면, 해당 ECS 클러스터는 example_teleport_sh-teleport로 명명됩니다.

ECS 클러스터를 클릭합니다:

ECS 클러스터 개요 스크린샷

ECS 클러스터는 하나 이상의 ECS 서비스로 구성됩니다. 등록 마법사에서 선택한 VPC 이름을 딴 서비스를 클릭합니다 - VPC ID가 해당 ECS 서비스 이름의 접미사로 사용됩니다. 예: database-service-vpc-123456789abcdefgh:

ECS 서비스 개요 스크린샷

ECS 서비스 개요 페이지에서 "Tasks" 패널을 클릭하여 배포 태스크를 확인합니다. 실행 중이거나 대기 중인 두 개의 태스크가 있어야 합니다:

ECS 서비스 개요 스크린샷

태스크가 보이지 않으면 ECS 태스크가 실행되지 않음으로 이동합니다.

Teleport Database Service 로그를 찾는 방법#

각 ECS 태스크는 Teleport Database Service 태스크 정의의 복제본입니다. ECS 서비스 태스크 페이지로 이동하여 실행 중인 태스크 중 하나를 클릭합니다. 태스크 개요 페이지에서 "Logs" 패널을 클릭하여 Amazon CloudWatch로 출력되는 로그를 확인합니다:

ECS 태스크 로그 스크린샷

이 페이지에서 새 출력을 보려면 로그를 새로 고쳐야 합니다. "View in CloudWatch"를 클릭하고 해당 페이지에서 로그를 테일링하여 새 로그 출력을 자동으로 볼 수 있습니다.

ECS 태스크가 실행되지 않음#

배포의 태스크가 "pending" 상태를 유지하거나 중지된 경우, 개별 태스크를 확인하여 시작을 막는 요인을 파악해야 합니다.

ECS 배포 태스크 패널로 이동하여 "Filter desired status" 드롭다운을 선택하고 "Any desired status"를 선택합니다. 실행 중이지 않은 태스크를 포함하여 모든 태스크가 표시됩니다:

ECS 서비스 개요 스크린샷

중지된 태스크를 클릭하여 중지된 이유를 확인합니다. AWS는 무엇이 잘못되었는지 설명하는 오류 메시지를 표시합니다.

일반적으로 오류 메시지는 태스크가 ECS에 의해 중지된 후에만 나타나며, "Pending" 상태에 진입한 후 몇 분이 걸릴 수 있습니다.

가장 흔한 오류는 태스크가 Teleport 이미지를 가져올 수 없는 경우입니다:

CannotPullContainerError: pull image manifest has been retried 5 time(s): failed to resolve ref public.ecr.aws/gravitational/teleport-ent-distroless:16.4.3: failed to do request: Head "https://public.ecr.aws/v2/gravitational/teleport-ent-distroless/manifests/16.4.3": dial tcp 99.83.145.10:443: i/o timeout

이는 ECS 태스크가 공개 Teleport 이미지 저장소에 도달하지 못하게 하는 네트워크 연결 문제로 인해 발생합니다.

배포에 다른 보안 그룹이나 서브넷을 사용해야 할 수 있지만, AWS 콘솔에서 ECS 서비스 네트워킹 구성을 업데이트할 수 없습니다. 다행히 Teleport의 RDS 등록 마법사에서 ECS 서비스를 재배포할 수 있으며, 업데이트된 네트워크 설정으로 ECS 서비스를 재생성합니다. 이렇게 하면 새 ECS 배포 롤아웃이 트리거되어, 새 태스크가 시작된 후에만 이전 배포의 실행 중인 태스크를 제거합니다.

"Configuration and networking" 아래에 있는 ECS 서비스 네트워크 설정으로 이동합니다:

ECS 네트워크 구성 스크린샷

ECS 서비스의 보안 그룹이 아웃바운드 인터넷 접근을 허용하는지 확인합니다. AWS 보안 그룹 규칙은 가산적이므로, 여러 보안 그룹을 선택한 경우 그 중 하나만 Teleport 이미지 저장소에 아웃바운드 연결을 설정하기 위해 다음과 같은 아웃바운드 규칙이 있으면 됩니다:

아웃바운드 인터넷 트래픽을 허용하는 보안 그룹 규칙 스크린샷

다음으로 ECS 태스크 서브넷이 인터넷에 접근할 수 있는지 확인합니다. 인터넷 게이트웨이 또는 NAT 게이트웨이로의 네트워크 경로가 있어야 합니다. 서브넷 목록을 기록하고 VPC 개요 페이지로 이동하여 각각을 확인합니다:

VPC 라우트 개요 스크린샷

NAT 게이트웨이 또는 인터넷 게이트웨이를 생성하거나, 라우팅 테이블을 업데이트하거나, ECS 서비스에 다른 서브넷을 사용해야 할 수 있습니다.

마지막으로 ECS 서비스 서브넷과 연결된 네트워크 액세스 제어 목록(ACL)이 인터넷으로의 아웃바운드 트래픽도 허용하는지 확인합니다. 네트워크 ACL은 기본적으로 모든 인바운드 및 아웃바운드 트래픽을 허용하므로, 네트워크 ACL을 사용자 지정한 경우에만 네트워크 문제의 잠재적 원인이 될 수 있습니다.

ECS 서비스에서 Teleport 이미지 저장소로의 네트워크 연결이 설정되면, ECS 태스크는 일정 시간 후 자체적으로 성공적으로 시작되어야 합니다.

데이터베이스 연결 테스트 타임아웃#

데이터베이스에 대한 연결을 테스트하고 연결이 타임아웃되면, ECS 배포에서 데이터베이스로의 네트워크 연결을 수정해야 합니다.

예를 들어, AWS 보안 그룹이 연결을 차단하여 ECS 배포 태스크가 RDS postgres 데이터베이스에 도달하지 못할 때의 모습입니다:

데이터베이스 연결 테스트 타임아웃 스크린샷

이 오류의 가장 일반적인 원인은 RDS 데이터베이스에 연결된 보안 그룹 규칙이 ECS 태스크로부터의 인바운드 트래픽을 허용하지 않는 것입니다.

이 문제를 해결하는 가장 쉬운 방법은 ECS 서비스와 연결된 보안 그룹 중 하나에서의 트래픽을 허용하는 인바운드 규칙을 RDS 데이터베이스의 보안 그룹 중 하나에 추가하는 것입니다. AWS에서는 다음과 같이 보일 수 있습니다:

데이터베이스 보안 그룹 인바운드 규칙 스크린샷

AWS 도달 가능성 분석기를 실행하여 네트워크 문제를 진단할 수도 있습니다. ECS 서비스로 이동하여 태스크 중 하나를 클릭한 다음, "Networking" 탭을 선택하고 "Run Reachability Analyzer"를 클릭합니다:

태스크 네트워킹 패널 스크린샷

분석기 경로 생성 페이지에서 "Path Source"는 ECS 태스크의 AWS Elastic Network Interface(ENI)로 자동으로 채워져야 합니다.

"Path destination"을 데이터베이스와 연결된 ENI로 설정합니다. 데이터베이스 ENI를 찾으려면 ENI 개요로 이동하여(올바른 AWS 리전이 선택되어 있는지 확인) "RDS"를 검색합니다.

네트워크 분석기 경로를 생성하고 실행합니다. 잠시 후 분석 결과를 사용할 수 있지만, 새로 고침 아이콘을 몇 번 클릭해야 할 수도 있습니다.

예를 들어, 데이터베이스 보안 그룹이 ECS 서비스 태스크로부터의 인바운드 트래픽을 허용하지 않을 때의 모습입니다:

네트워크 분석기 결과 예시 스크린샷

다음 단계#