Private Service Connect를 사용하여 인스턴스에 연결

이 페이지에서는 Private Service Connect를 사용하여 PostgreSQL용 AlloyDB 인스턴스에 연결하는 방법을 설명합니다.

Private Service Connect를 사용하여 기본 AlloyDB 인스턴스 또는 해당 인스턴스의 읽기 복제본 또는 다른 그룹, 팀, 프로젝트 또는 조직에 속하는 여러 Virtual Private Cloud (VPC) 네트워크의 보조 AlloyDB 인스턴스에 연결할 수 있습니다.

필요한 역할

AlloyDB 인스턴스에 연결하려면 VPC 네트워크의 사용자에게 다음 역할을 모두 부여해야 합니다.

역할 설명
compute.networkAdmin AlloyDB 인스턴스에 대한 연결을 시작하는 VPC 네트워크에 대한 전체 제어 권한을 부여합니다. Private Service Connect를 사용하여 여러 VPC 네트워크에서 AlloyDB 인스턴스에 연결하는 경우 각 네트워크에는 자체 관리자가 있습니다.
dns.admin DNS 영역 및 레코드를 포함한 Cloud DNS 리소스에 대한 전체 제어 권한을 부여합니다.
alloydb.admin AlloyDB 인스턴스의 전체 제어 권한을 제공하고 수명 주기 동안 인스턴스를 제어합니다.
alloydb.databaseUser (선택사항) AlloyDB 인스턴스에 대한 액세스 권한을 제공합니다. AlloyDB 인증 프록시 클라이언트를 통해 연결하는 경우 AlloyDB 클라이언트 역할이 있어야 합니다. 직접 연결하는 경우 Identity and Access Management (IAM) 역할 및 권한이 필요하지 않습니다.

Private Service Connect 사용 설정

Private Service Connect를 사용 설정하려면 Private Service Connect가 구성된 AlloyDB 클러스터를 만든 다음 허용된 프로젝트 목록이 포함된 AlloyDB 인스턴스를 만들어야 합니다.

AlloyDB 기본 클러스터 만들기

다음 예에서는 gcloud alloydb clusters create 명령어를 --enable-private-service-connect 플래그와 함께 사용하여 Private Service Connect가 사용 설정된 AlloyDB 클러스터를 만듭니다.

클러스터 생성 프로세스는 --enable-private-service-connect 플래그를 전달하는 것을 제외하고 동일하게 유지됩니다. 클러스터 만들기에 관한 자세한 내용은 클러스터 및 기본 인스턴스 만들기를 참고하세요.

클러스터를 만들려면 gcloud alloydb clusters create 명령어를 사용합니다.

  gcloud alloydb clusters create CLUSTER_ID \
    --password=PASSWORD \
    --region=REGION_ID \
    --project=PROJECT_ID \
    --enable-private-service-connect

다음을 바꿉니다.

  • CLUSTER_ID: 만들려는 클러스터의 ID입니다. 소문자로 시작해야 하며 소문자, 숫자, 하이픈을 포함할 수 있습니다.

  • PASSWORD: 기본 postgres 사용자에게 사용할 비밀번호입니다.

  • REGION_ID: 클러스터를 배치할 리전입니다.

  • PROJECT_ID: 클러스터를 배치하려는 프로젝트의 ID입니다.

이 명령어는 장기 실행 작업을 시작하고 작업 ID를 반환합니다.

Private Service Connect가 사용 설정된 기본 클러스터용으로 생성된 보조 클러스터는 Private Service Connect 구성을 자동으로 상속합니다. 자세한 내용은 보조 클러스터 만들기를 참고하세요.

AlloyDB 인스턴스 만들기

다음 예는 허용된 프로젝트 목록이 구성된 기본 인스턴스를 만드는 방법을 보여줍니다. 인스턴스를 만드는 프로세스는 Private Service Connect가 사용 설정된 기본 클러스터의 경우 --allowed-psc-projects 플래그를 사용하여 허용된 프로젝트 목록을 전달하는 것을 제외하고 동일하게 유지됩니다.

다른 인스턴스 유형을 만드는 방법에 관한 자세한 내용은 읽기 풀 인스턴스 만들기보조 인스턴스 만들기를 참고하세요.

기본 인스턴스를 만들려면 gcloud alloydb instances create 명령어를 사용합니다.

  gcloud alloydb instances create INSTANCE_ID \
      --instance-type=PRIMARY \
      --cpu-count=CPU_COUNT \
      --availability-type=AVAILABILITY \
      --region=REGION_ID \
      --cluster=CLUSTER_ID \
      --project=PROJECT_ID \
      --allowed-psc-projects=ALLOWED_PROJECT_LIST

다음을 바꿉니다.

  • INSTANCE_ID: 만들려는 인스턴스의 ID입니다. 소문자로 시작해야 하며 소문자, 숫자, 하이픈을 포함할 수 있습니다.
  • CPU_COUNT: 인스턴스에 사용할 vCPU 수입니다. 유효한 값은 다음과 같습니다.
    • 2: vCPU 2개, RAM 16GB
    • 4: vCPU 4개, RAM 32GB
    • 8: vCPU 8개, RAM 64GB
    • 16: vCPU 16개, RAM 128GB
    • 32: vCPU 32개, RAM 256GB
    • 64: vCPU 64개, RAM 512GB
    • 96: vCPU 96개, RAM 768GB
    • 128: vCPU 128개, RAM 864GB
  • AVAILABILITY: 이 인스턴스가 여러 영역에 노드가 있는 고가용성 (HA)인지 여부를 나타냅니다. 유효한 값은 다음과 같습니다.
    • REGIONAL: 활성 노드와 대기 노드가 별도로 있는 HA 인스턴스를 만들고 이들 간에 자동 장애 조치를 실행합니다. 프로덕션 환경에 적합한 기본값입니다.
    • ZONAL: 노드 1개만 포함하고 자동 장애 조치가 없는 기본 인스턴스를 만듭니다.
  • REGION_ID: 인스턴스를 배치할 리전입니다.
  • CLUSTER_ID: 앞에서 만든 클러스터의 ID입니다.
  • ALLOWED_PROJECT_LIST: 인스턴스에 대한 액세스를 허용할 프로젝트 ID 또는 프로젝트 번호를 쉼표로 구분한 목록입니다(예: my-project-1, 12345,my-project-n).

서비스 연결 가져오기

Private Service Connect가 사용 설정된 AlloyDB 인스턴스를 만든 후 서비스 연결 URL을 가져오고 이를 사용하여 Private Service Connect 엔드포인트를 만듭니다.

gcloud alloydb instances describe 명령어를 사용하여 인스턴스에 대한 세부정보를 확인합니다.

gcloud alloydb instances describe INSTANCE_ID \
 --cluster=CLUSTER_ID --region=REGION_ID

다음을 바꿉니다.

  • INSTANCE_ID: 인스턴스의 ID입니다.
  • CLUSTER_ID: 클러스터의 ID입니다.
  • REGION_ID: AlloyDB 클러스터가 배포되는 리전입니다.

이 명령어의 샘플 응답은 다음과 같습니다.

  "pscInstanceConfig": {
    "serviceAttachmentLink:": "https://www.googleapis.com/compute/v1/projects/my-project/regions/my-region/serviceAttachments/my-service-attachment-id"
        "allowedConsumerProjects": {
          "45678",
          "12345",
              "67890",
            },
            "pscDnsName": "11111111-1111-1111-1111-111111111111.22222222-2222-2222-2222-222222222222.alloydb-psc.goog."
          }

serviceAttachmentLink 매개변수는 서비스 연결 URL의 값을 보유합니다.

Private Service Connect 엔드포인트 만들기

Private Service Connect 엔드포인트를 만들려면 서비스 연결 URL을 고유한 엔드포인트 이름과 함께 전달합니다. Private Service Connect 엔드포인트 만들기에 관한 자세한 내용은 엔드포인트 만들기를 참고하세요.

gcloud compute addresses create 명령어를 사용하여 Private Service Connect 엔드포인트의 내부 IP 주소를 예약한 후 엔드포인트를 만들 때 예약된 IP 주소를 사용할 수도 있습니다.

AlloyDB 인스턴스에 연결

다음 옵션 중 하나를 사용하여 Private Service Connect가 사용 설정된 AlloyDB 인스턴스에 연결할 수 있습니다.

  • 내부 IP 주소
  • DNS 레코드
  • AlloyDB 인증 프록시
  • AlloyDB 언어 커넥터

DNS 레코드를 사용하여 연결하려면 해당 VPC 네트워크의 비공개 DNS 영역에 DNS 레코드를 만들어야 합니다. DNS 레코드를 만든 후 이 레코드를 사용하여 DNS 레코드, AlloyDB 인증 프록시 또는 AlloyDB 언어 커넥터를 통해 Private Service Connect가 사용 설정된 인스턴스에 직접 연결할 수 있습니다.

DNS 관리 영역 및 DNS 레코드 구성

네트워크에서 DNS 관리 영역 및 DNS 레코드를 구성하려면 다음 단계를 따르세요.

  1. 인스턴스의 DNS 이름을 포함하여 AlloyDB 인스턴스에 대한 요약 정보를 보려면 gcloud alloydb instances describe 명령어를 사용합니다.

    gcloud alloydb instances describe INSTANCE_ID \
    --cluster=CLUSTER_ID --region=REGION_ID

    다음을 바꿉니다.

    • INSTANCE_ID: 인스턴스의 ID
    • CLUSTER_ID: 클러스터의 ID입니다.

    응답에 DNS 이름이 표시되는지 확인합니다. DNS 이름에는 INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog. 패턴이 있습니다.

  2. 비공개 DNS 영역을 만들려면 gcloud dns managed-zones create 명령어를 사용합니다. 이 영역은 Private Service Connect 엔드포인트를 통해 AlloyDB 인스턴스에 연결하는 데 사용되는 VPC 네트워크와 연결됩니다.

    gcloud dns managed-zones create ZONE_NAME \
    --project=PROJECT_ID \
    --description=DESCRIPTION \
    --dns-name=DNS_NAME \
    --networks=NETWORK_NAME \
    --visibility=private

    다음을 바꿉니다.

    • ZONE_NAME: DNS 영역의 이름입니다.
    • PROJECT_ID: 영역이 포함된 프로젝트의 ID 또는 프로젝트 번호입니다. Google Cloud
    • DESCRIPTION: 영역에 대한 설명 (예: AlloyDB 인스턴스의 DNS 영역)
    • DNS_NAME: 영역의 DNS 이름(예: INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog.)
    • NETWORK_NAME: VPC 네트워크의 이름입니다.
  3. Private Service Connect 엔드포인트를 만든 후 영역에 DNS 레코드를 만들려면 gcloud dns record-sets create 명령어를 사용합니다.

    gcloud dns record-sets create DNS_NAME \
    --project=PROJECT_ID \
    --type=RRSET_TYPE \
    --rrdatas=RR_DATA \
    --zone=ZONE_NAME

    다음을 바꿉니다.

    • DNS_NAME: 이 절차의 앞부분에서 검색한 DNS 이름
    • RRSET_TYPE: DNS 레코드 세트의 리소스 레코드 유형 (예: A)입니다.
    • RR_DATA: Private Service Connect 엔드포인트에 할당된 IP 주소 (예: 198.51.100.5)입니다. rrdata1 rrdata2 rrdata3과 같은 여러 값을 입력할 수도 있습니다 (예: 10.1.2.3 10.2.3.4 10.3.4.5).

DNS 레코드를 사용하여 직접 연결

Private Service Connect 엔드포인트를 만들고 DNS 레코드를 만든 후 DNS 레코드를 사용하여 직접 연결할 수 있습니다.

  1. Private Service Connect 엔드포인트의 DNS 레코드를 검색하려면 gcloud compute addresses describe 명령어를 사용합니다.

    gcloud compute addresses describe DNS_RECORD \
    --project=PROJECT_ID \
    --region=REGION_NAME

    다음을 바꿉니다.

    • DNS_RECORD: 엔드포인트의 DNS 레코드입니다.
    • PROJECT_ID: 엔드포인트가 포함된 프로젝트의 ID 또는 프로젝트 번호입니다. Google Cloud
    • REGION_NAME: 엔드포인트의 리전 이름
  2. AlloyDB 인스턴스에 연결하려면 DNS 레코드를 사용합니다.

    psql -U USERNAME -h DNS_RECORD

    다음을 바꿉니다.

    • USERNAME: 인스턴스에 연결하는 사용자의 이름입니다.
    • DNS_RECORD: 엔드포인트의 DNS 레코드입니다.

AlloyDB 인증 프록시를 사용하여 연결

AlloyDB 인증 프록시는 AlloyDB 데이터베이스에 승인된 암호화된 연결을 설정할 수 있는 커넥터입니다. AlloyDB 인증 프록시는 로컬 환경에서 로컬 클라이언트를 실행하여 작동합니다. 애플리케이션은 데이터베이스에서 사용하는 표준 데이터베이스 프로토콜을 사용하여 AlloyDB 인증 프록시와 통신합니다.

인증 프록시 클라이언트를 시작하는 동안 --psc 플래그를 설정하면 AlloyDB 인증 프록시에서 생성된 DNS 레코드를 사용하여 Private Service Connect가 사용 설정된 인스턴스에 연결합니다.

gcloud alloydb instances list 명령어를 사용하여 검색한 인스턴스 URI를 전달하여 인증 프록시 클라이언트를 시작하고 --psc 플래그를 설정해야 합니다.

인증 프록시를 사용하여 인스턴스에 연결하는 방법에 관한 자세한 내용은 인증 프록시를 사용하여 연결을 참고하세요.

AlloyDB 언어 커넥터를 사용하여 연결

AlloyDB 언어 커넥터는 AlloyDB 인스턴스에 연결할 때 TLS 1.3 및 Identity and Access Management (IAM) 승인과 함께 자동화된 mTLS를 제공하는 라이브러리입니다.

언어 커넥터가 인스턴스가 Private Service Connect를 지원한다고 판단하면 생성된 DNS 레코드를 사용하여 인스턴스에 연결합니다.

자바

Private Service Connect를 사용하여 AlloyDB 인스턴스에 연결하는 경우 다음을 포함합니다.

config.addDataSourceProperty("alloydbIpType", "PSC");

Java 언어 커넥터에서 Private Service Connect 엔드포인트를 사용하는 방법에 관한 자세한 내용은 GitHub 저장소를 참고하세요.

Python (pg8000)

Private Service Connect를 사용하여 AlloyDB 인스턴스에 연결하는 경우 다음을 포함합니다.

  def getconn() -> pg8000.dbapi.Connection:
      conn: pg8000.dbapi.Connection = connector.connect(
          inst_uri,
          "pg8000",
          user=user,
          password=password,
          db=db,
          # use ip_type to specify PSC
          ip_type=IPTypes.PSC,
      )
      return conn

Python 언어 커넥터에서 Private Service Connect 엔드포인트를 사용하는 방법에 관한 자세한 내용은 GitHub 저장소를 참고하세요.

Python (asyncpg)

Private Service Connect를 사용하여 AlloyDB 인스턴스에 연결하는 경우 다음을 포함합니다.

  async def getconn() -> asyncpg.Connection:
    conn: asyncpg.Connection = await connector.connect(
        inst_uri,
        "asyncpg",
        user=user,
        password=password,
        db=db,
        # use ip_type to specify PSC
        ip_type=IPTypes.PSC,
    )
    return conn

Python 언어 커넥터에서 Private Service Connect 엔드포인트를 사용하는 방법에 관한 자세한 내용은 GitHub 저장소를 참고하세요.

Go (pgx)

Private Service Connect를 사용하여 AlloyDB 인스턴스에 연결하는 경우 다음을 포함합니다.

d.Dial(ctx, instURI, alloydbconn.WithPSC())

Go 언어 커넥터에서 Private Service Connect 엔드포인트를 사용하는 방법에 관한 자세한 내용은 GitHub 저장소를 참고하세요.

Go (database/sql)

Private Service Connect를 사용하여 AlloyDB 인스턴스에 연결하는 경우 다음을 포함합니다.

  cleanup, err := pgxv5.RegisterDriver(
    "alloydb",
    alloydbconn.WithDefaultDialOptions(alloydbconn.WithPSC())
)

Go 언어 커넥터에서 Private Service Connect 엔드포인트를 사용하는 방법에 관한 자세한 내용은 GitHub 저장소를 참고하세요.

내부 IP 주소를 통해 직접 연결

Private Service Connect 엔드포인트를 만든 후 구성한 IP 주소를 사용하여 AlloyDB 인스턴스에 직접 연결할 수 있습니다.

  1. Private Service Connect 엔드포인트의 IP 주소를 검색하려면 gcloud compute addresses describe 명령어를 사용합니다.

    gcloud compute addresses describe ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME

    다음을 바꿉니다.

    • ADDRESS_NAME: 엔드포인트의 IP 주소 이름입니다.
    • PROJECT_ID: 엔드포인트가 포함된 프로젝트의 ID 또는 프로젝트 번호입니다. Google Cloud
    • REGION_NAME: 엔드포인트의 리전 이름
  2. AlloyDB 인스턴스에 연결하려면 내부 IP 주소를 사용합니다.

    psql -U USERNAME -h IP_ADDRESS"

    다음을 바꿉니다.

    • USERNAME: 인스턴스에 연결하는 사용자의 이름입니다.
    • IP_ADDRESS: 엔드포인트의 IP 주소입니다.

제한사항

  • Private Service Connect가 사용 설정된 AlloyDB 인스턴스의 서비스 연결에 연결하는 Private Service Connect 엔드포인트를 최대 20개까지 설정할 수 있습니다.
  • Private Service Connect 지원 클러스터를 만들 때는 --network 플래그를 사용할 수 없습니다. 이 플래그는 비공개 서비스 액세스와 연결되어 있기 때문입니다.
  • 기존 인스턴스에서 Private Service Connect를 활성화하거나 비활성화할 수 없습니다.
  • 비공개 서비스 액세스를 사용하도록 Private Service Connect가 사용 설정된 인스턴스를 구성할 수 없습니다.
  • 아웃바운드 연결이 필요한 pglogical, dblink, postgres_fdw 확장 프로그램은 지원되지 않습니다.