MySQL TCP 대상 생성하기

MySQL TCP 대상 생성하기

TCP 대상은 Boundary가 접근할 수 있는 어떤 서비스에든 연결할 수 있는 범용적인 방법을 제공해요. MySQL 데이터베이스도 그중 하나죠.

출처: HashiCorp Boundary docs

본문

아래 예시들은 단순함을 위해 직접 대상 주소(direct target address)를 사용하지만, HashiCorp는 확장된 프로덕션 배포에서는 호스트 카탈로그와 호스트 셋을 구성할 것을 권장해요.

MySQL 서버에 연결할 TCP 대상을 만들려면 다음 단계를 따르세요.

Admin UI로 생성:

  • Boundary에 로그인해요.
  • 조직을 선택하고, 대상을 만들 프로젝트를 선택해요.
  • Project Actions 아래에서 Targets를 선택해요.
  • New Target을 클릭해요.
  • 다음 필드를 작성해요:
    • Name — (필수) 식별을 위한 이름. 예: mysql-dev-server. 이름은 유일해야 해요.
    • Description — (선택) 식별을 위한 대상 설명
    • Type — (필수) TCP 대상을 만들려면 TCP를 선택해요.
    • Target Address — (선택) 호스트 카탈로그와 호스트 셋을 사용하지 않는다면, 대상 주소를 입력해 대상을 단일 주소에 매핑할 수 있어요. 유효한 IP 주소나 DNS 이름이어야 해요.
    • Default Port — (필수) 연결할 기본 포트. 예: 3306
    • Aliases — (선택) 대상의 유일한 식별자로, CLI나 투명 세션으로 대상에 더 쉽게 연결하게 해줘요. 앨리어스를 만들려면 다음 필드를 작성하고 Add를 클릭해요:
      • Select scope — 앨리어스를 만들 스코프를 선택해요. 대상의 프로젝트 스코프에 앨리어스를 만들려면 먼저 org와 project suffix를 만들어야 해요. 그렇지 않으면 글로벌 스코프에만 앨리어스를 만들 수 있어요. 스코프 suffix 생성 문서를 참고하세요.
      • Alias value — 대상을 나타내는 앨리어스로 사용할 문자열을 입력해요. 앨리어스 값은 호스트 이름이나 DNS 형태의 문자열일 수 있어요.
  • Save를 클릭해요.

CLI로 생성:

  • Boundary에 로그인해요.
  • BOUNDARY_PROJECT_ID 환경 변수를 설정하거나, 다음 단계에서 스코프 ID(예: p_1234567890)를 제공해요.
  • 별칭 mysql, 직접 대상 주소 10.0.0.10, 기본 연결 포트 3306을 가진 mysql-dev-server라는 SSH 대상(사실상 TCP 대상)을 만들려면 다음 명령을 사용해요:
$ boundary targets create tcp \
  -scope-id $BOUNDARY_PROJECT_ID \
  -name "mysql-dev-server" \
  -with-alias-value "mysql" \
  -address "10.0.0.10" \
  -default-port 3306

대상을 만들 때는 scope-id 필드를 반드시 제공해야 해요. TCP 대상을 만들 때 사용할 수 있는 속성은 다음과 같아요:

  • -description=<string> — 식별용 대상 설명(선택)
  • -name=<string> — 식별용 대상 이름(선택)
  • -scope-id=<string> — 대상을 만들 스코프. 기본값은 global이에요. BOUNDARY_SCOPE_ID 환경 변수로도 스코프를 지정할 수 있어요.
  • -address=<string> — 대상이 연결할 유효한 네트워크 주소(선택). 호스트 소스와 함께 사용할 수 없어요.
  • -default-client-port=<string> — 이 대상에 투명 세션을 설정할 때 Client Agent가 로컬 프록시 리스너를 바인딩하는 포트. 클라이언트 애플리케이션이 기본적으로 다이얼하는 포트와 일치하도록 설정해야 해요. 예를 들어 SSH 클라이언트는 22, RDP 클라이언트는 3389, HTTPS 클라이언트는 443을 다이얼해요. 이 값을 설정하지 않으면 Client Agent는 -default-port로 폴백해요. -default-client-port가 클라이언트 애플리케이션과 일치하지 않으면 투명 세션이 실패해요.
  • -default-port=<string> — 설정된 경우 대상의 기본 포트
  • -egress-worker-filter=<string> — 대상의 세션을 처리할 수 있는 egress 워커를 필터링하는 부울 표현식
  • -ingress-worker-filter=<string> — 대상의 세션을 처리할 수 있는 ingress 워커를 필터링하는 부울 표현식
  • -session-connection-limit=<string> — 세션에서 허용되는 최대 연결 수. -1이면 무제한이에요.
  • -session-max-seconds=<string> — 모든 연결을 포함한 세션의 최대 수명. 정수 초 또는 지속 시간 문자열로 지정할 수 있어요. 최대 기간을 지정하지 않으면 Boundary는 기본값인 8시간(28800초)을 사용해요.
  • -with-alias-authorize-session-host-id=<string> — 앨리어스가 대상의 세션을 승인할 때 사용하는 호스트 ID
  • -with-alias-scope-id=<string> — 대상 생성 시 앨리어스를 만들 스코프 ID. 기본값은 global이에요. 앨리어스는 글로벌과 프로젝트 스코프에 만들 수 있어요. 대상의 프로젝트 스코프에 앨리어스를 만들려면 먼저 org와 project suffix를 만들어야 해요. 그렇지 않으면 글로벌 스코프에만 앨리어스를 만들 수 있어요. 스코프 suffix 생성 문서를 참고하세요.
  • -with-alias-value=<string> — 대상을 나타내는 앨리어스 값. 이 파라미터로 앨리어스와 대상을 동시에 만들고 서로 연결할 수 있어요. 프로젝트 스코프에 있는 대상의 앨리어스를 만들 때는 alias.projectsuffix.orgsuffix 형식으로 org와 project suffix를 값에 붙여야 해요. 값은 DNS 네이밍 규칙을 따라야 해요.

Terraform으로 생성:

Boundary Terraform provider로 대상과 대상 앨리어스를 정의할 수 있어요:

resource "boundary_target" "mysql" {
  name         = "mysql-dev-server"
  description  = "MySQL dev server on Ubuntu"
  type         = "tcp"
  address      = "10.0.0.10"
  default_port = "3306"
  scope_id     = boundary_scope.project.id
}

resource "boundary_alias_target" "mysql" {
  name                      = "mysql"
  description               = "Target alias for mysql-dev-server"
  scope_id                  = "global"
  value                     = "mysql"
  destination_id            = boundary_target.mysql.id
}

브로커링된 애플리케이션 크레덴셜 구성하기

최종 사용자가 대상에 연결할 수 있도록 브로커링된 애플리케이션 크레덴셜(brokered application credential)을 구성할 수 있어요. 브로커링된 크레덴셜은 최종 사용자에게 노출되어, 대상에 수동으로 또는 connect helpers를 사용해 인증할 수 있게 해요.

TCP 대상에 크레덴셜을 구성하는 방법:

  • Static 크레덴셜(username_password 또는 ssh_private_key)
  • Vault generic credential library

크레덴셜 브로커링으로 대상 구성하는 방법은 Configure targets with credential brokering 문서를 참고하세요.

더 알아보기 (Learn more)