비공개 네트워크 연결
이 페이지에서는 백엔드 애플리케이션에 비공개로 연결되도록 Integration Connectors를 구성하는 방법을 설명하며 다음 개념에 익숙하다고 가정합니다.Integration Connectors는 비공개 네트워크에 호스팅된 백엔드에 대한 연결을 지원합니다. 비공개 연결을 사용 설정하려면 Private Service Connect(PSC)를 사용해야 합니다. PSC를 사용하면 여러 네트워크에서 서비스에 비공개로 연결할 수 있습니다.
Integration Connectors의 경우 네트워킹 관점에서 보면 개발자는 서비스 프로듀서이고 Integration Connectors는 서비스 소비자입니다. 서비스 프로듀서는 Integration Connectors가 서비스를 소비하는 데 사용할 수 있는 PSC 서비스 연결을 구성해야 합니다. 서비스 연결이 준비되면 엔드포인트 연결을 사용하여 서비스 연결을 사용하도록 연결을 구성할 수 있습니다.
엔드포인트 연결
엔드포인트 연결은 PSC 서비스 연결을 통해 백엔드 애플리케이션과의 연결을 설정할 수 있는 Integration Connectors 리소스입니다.
다음 이미지는 PSC 서비스 연결을 통해 백엔드 애플리케이션과의 연결을 설정할 수 있는 엔드포인트 연결을 보여줍니다.
IP 주소 또는 호스트 이름으로 엔드포인트 연결을 만들 수 있습니다.
IP 주소로 엔드포인트 연결 만들기
IP 주소로 엔드포인트 연결을 만들려면 Cloud 콘솔 또는 명령줄(gcloud)을 사용하면 됩니다.콘솔
Cloud 콘솔에서 엔드포인트 연결을 만들려면 다음 안내를 따르세요.
- Integration Connectors의 엔드포인트 연결 페이지를 엽니다.
- + 만들기를 클릭합니다. 엔드포인트 연결 만들기 페이지가 열립니다.
- 다음 필드에 값을 입력합니다.
- 이름: 엔드포인트 연결 이름입니다. 이름은 고유해야 합니다. 이름이 같은 다른 엔드포인트 연결은 있을 수 없으며 이름은 나중에 변경할 수 없습니다. 이름은 소문자로 시작해야 합니다. 이어서 최대 63자(영문 기준)의 소문자, 숫자 또는 하이픈이 와야 하며 하이픈으로 끝나서는 안 됩니다. 최소 길이는 2자입니다.
- 서비스 연결 ID: 이미 만든 PSC 서비스 연결의 이름입니다.
- (선택사항) 설명: 엔드포인트 연결에 대한 설명을 입력합니다.
- (선택사항) 라벨: 리소스 라벨을 키-값 쌍으로 입력합니다. 라벨에 대한 자세한 내용은 라벨이란 무엇인가요?를 참조하세요.
- (선택사항) 엔드포인트 전역 액세스 사용 설정:
모든 리전에 있는 연결에서 백엔드로 트래픽을 전송하려면 이 옵션을 선택합니다.
기본적으로 엔드포인트 연결을 위해서는 연결과 백엔드가 모두 동일한 지역에 있어야 합니다. 따라서 엔드포인트에 전역 액세스를 사용하면 모든 리전에 있는 연결은 백엔드로 트래픽을 보낼 수 있습니다.
- 만들기를 클릭합니다.
IP 주소 열은 엔드포인트 연결의 IP 주소를 지정합니다. 비공개 연결에 사용할 커넥터를 구성할 때 이 IP 주소를 사용해야 합니다.
gcloud
명령줄에서 엔드포인트 연결을 만들려면 다음 안내를 따르세요.
- PSC 서비스 연결 리소스를 가져옵니다.
gcloud compute service-attachments list
이 명령어는 서비스 연결 목록을 반환합니다. 예를 들면 다음과 같습니다.
NAME REGION TARGET_SERVICE CONNECTION_PREFERENCE demo-sa us-west1 k8s2-tcp-tgysilgj-apps-ingressgateway-fzdhwstg ACCEPT_AUTOMATIC
이 서비스 연결 정보는 이후 단계에서 필요합니다.
- CreateEndpointAttachment API를 실행하기 전에 인증 토큰을 가져옵니다.
TOKEN="$(gcloud auth print-access-token)"
- CreateEndpointAttachment API를 사용하여 엔드포인트 연결을 만듭니다. 예를 들면 다음과 같습니다.
curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "projects/PROJECT_ID/locations/LOCATION/endpointAttachments/ENDPOINT_ATTACHMENT_NAME", "serviceAttachment": "projects/demo/serviceAttachments/?SERVICE_ATTACHMENT_NAME" }' \ https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpointAttachments?endpointAttachmentId=ENDPOINT_ATTACHMENT_NAME
각 항목의 의미는 다음과 같습니다.
- LOCATION은 서비스 연결의 리전입니다. 예를 들면
us-west1
입니다. - PROJECT_ID는 PSC 서비스 연결을 만든 Google Cloud 프로젝트입니다.
- ENDPOINT_ATTACHMENT_NAME은 엔드포인트 연결의 이름입니다. 이름은 고유해야 합니다. 이름이 같은 다른 엔드포인트 연결은 있을 수 없으며 이름은 나중에 변경할 수 없습니다. 이름은 소문자로 시작해야 합니다. 이어서 최대 31자(영문 기준)의 소문자, 숫자 또는 하이픈이 와야 하며 하이픈으로 끝나서는 안 됩니다. 최소 길이는 2자입니다.
- SERVICE_ATTACHMENT_NAME은 서비스 연결의 이름입니다. 이전에 실행한
gcloud compute service-attachments list
명령어에서 반환된 PSC 서비스 계정 이름을 사용합니다.
API를 호출하면 Integration Connectors가 장기 실행 작업을 시작하고 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다. 작업이 성공적으로 완료되면 엔드포인트 연결이 생성됩니다.
- LOCATION은 서비스 연결의 리전입니다. 예를 들면
- Google Cloud 프로젝트와 연결된 서비스 디렉터리의 프로젝트 ID를 가져온 후 서비스 연결에서 해당 프로젝트 ID를 허용 목록에 추가합니다.
- GetEndpointAttachment API를 사용하여 엔드포인트 연결이 생성되었는지 확인합니다.
예를 들면 다음과 같습니다.
curl -X GET -H "Authorization: Bearer $TOKEN" \ https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/endpointAttachments/ENDPOINT_ATTACHMENT_NAME
API는 다음과 비슷한 응답을 반환합니다.
{ "name": "projects/demo-project/locations/us-central1/endpointAttachments/demo-ea", "createTime": "2023-04-17T04:34:59.569527046Z", "updateTime": "2023-04-17T04:37:25.189074195Z", "description": "demo endpoint attachment", "serviceAttachment": "projects/demo-project/regions/us-central1/serviceAttachments/demo-sa", "endpointIp": "10.0.0.0", "labels": {"team":"sre"}, }
엔드포인트 연결의 IP 주소는
endpointIp
필드에서 확인할 수 있습니다. 이 샘플 응답에서 IP 주소는10.0.0.0
입니다. 비공개 연결에 사용할 커넥터를 구성할 때 이 IP 주소를 사용합니다.
엔드포인트 연결 생성에 성공하면 새로 생성된 연결이 다음 이미지와 같이 엔드포인트 연결 페이지에 표시됩니다.
지금까지 설명한 단계에서는 엔드포인트 연결을 IP 주소로 만드는 방법을 보여줍니다. 하지만 호스트 이름으로 엔드포인트 연결을 만들고 호스트 이름을 사용하여 비공개 연결용 커넥터를 구성할 수도 있습니다. 호스트 이름으로 엔드포인트 연결을 만드는 방법을 알아보려면 호스트 이름으로 엔드포인트 연결 만들기를 참조하세요.
호스트 이름으로 엔드포인트 연결 만들기
호스트 이름으로 엔드포인트 연결을 만들려면 다음 태스크를 수행합니다.
- IP 주소로 엔드포인트 연결을 만듭니다. 자세한 내용은 IP 주소로 엔드포인트 연결 만들기를 참조하세요.
- Google Cloud 프로젝트에 Cloud DNS 비공개 관리형 영역을 만듭니다.
이 DNS 영역에서 커넥터 구성에 사용할 호스트 이름을 추가하고 1단계에서 가져온 엔드포인트 연결 IP 주소에 호스트 이름을 매핑해야 합니다. Cloud DNS 비공개 관리형 영역을 만드는 방법에 대한 자세한 내용은 비공개 영역 만들기 및 레코드 추가를 참조하세요.
- Google Cloud 프로젝트에서 Integration Connectors에 사용할 Integration Connectors 관리형 영역을 만듭니다. Integration Connectors 관리형 영역(피어링 영역)은 이름 확인을 위해 Cloud DNS 비공개 관리형 영역(2단계에서 생성됨)과 통신합니다.
관리형 영역을 만들기 전에 다음 역할 및 권한을 부여해야 합니다.
- Integration Connectors 관리형 영역을 만드는 사용자에게
connectors.managedZones.create
권한을 부여합니다.connectors.managedZones.create
권한은roles/connectors.admin
IAM 역할 또는roles/connectors.managedZonesAdmin
IAM 역할에 제공됩니다. Integration Connectors에 사용할 수 있는 다양한 IAM 역할 및 해당 권한에 대한 자세한 내용은 Integration Connectors의 IAM 역할 및 권한을 참조하세요. - Integration Connectors
service-PROJECT_NUMBER@gcp-sa-connectors.iam.gserviceaccount.com
서비스 계정에role/dns.peer
역할을 부여합니다.Cloud DNS Google Cloud 프로젝트가 Integration Connectors Google Cloud 프로젝트와 다른 경우 Cloud DNS Google Cloud 프로젝트의 Integration Connectors 서비스 계정에
roles/dns.peer
역할을 부여합니다. 예를 들어 Google Cloud 프로젝트 12345에서 Integration Connectors 관리형 영역을 만들려고 하는데 Cloud DNS가 Google Cloud 프로젝트 67890에 있다고 가정해 보겠습니다. 이 경우 Google Cloud 프로젝트 67890에서service-12345@gcp-sa-connectors.iam.gserviceaccount.com
서비스 계정에roles/dns.peer
역할을 부여해야 합니다.
Integration Connectors 관리형 영역을 만들려면 Cloud 콘솔 또는 명령줄(gcloud)을 사용하면 됩니다.
콘솔
Cloud 콘솔에서 Integration Connectors 관리형 영역을 만들려면 다음 안내를 따르세요.
- Integration Connectors의 관리형 영역 페이지로 이동합니다.
- 다음 필드에 값을 입력합니다.
- 이름: 관리형 영역의 이름입니다.
- 대상 DNS 이름: 관리형(피어링) 영역을 만들 전체 Cloud DNS 이름입니다. 예를 들면
server8.stage.user.private
입니다. - 대상 프로젝트: 비공개 Cloud DNS 영역이 있는 Google Cloud 프로젝트의 이름입니다.
- 대상 네트워크: 비공개 Cloud DNS 영역이 유지관리되는 VPC 네트워크의 이름입니다.
- (선택사항) 설명: 엔드포인트 연결에 대한 설명을 입력합니다.
- (선택사항) 라벨: 리소스 라벨을 키-값 쌍으로 입력합니다. 라벨에 대한 자세한 내용은 라벨이란 무엇인가요?를 참조하세요.
- 만들기를 클릭합니다.
gcloud
명령줄에서 Integration Connectors 관리형 영역을 만들려면 다음 안내를 따르세요.
- CreateManagedZone API를 실행하기 전에 인증 토큰을 가져옵니다.
TOKEN="$(gcloud auth print-access-token)"
- CreateManagedZone API를 사용하여 관리형 영역을 만듭니다. 예를 들면 다음과 같습니다.
curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "description": "DESCRIPTION", "dns": "DNS_NAME", "target_project": "TARGET_PROJECT", "target_vpc": "TARGET_VPC" }' \ https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/global/managedZones?managedZoneId=MANAGED_ZONE_NAME
각 항목의 의미는 다음과 같습니다.
- DESCRIPTION은 관리형 영역에 대한 설명입니다(선택사항).
- DNS_NAME: 관리형(피어링) 영역을 만들 전체 Cloud DNS 이름입니다. 예를 들면
server8.stage.user.private
입니다. - TARGET_PROJECT는 비공개 Cloud DNS 영역이 있는 Google Cloud 프로젝트의 이름입니다.
- TARGET_NETWORK는 비공개 Cloud DNS 영역이 유지관리되는 VPC 네트워크의 이름입니다.
- PROJECT_ID는 Integration Connectors에 사용 중인 Google Cloud 프로젝트입니다.
- MANAGED_ZONE_NAME은 관리형 영역의 이름입니다. 이름은 고유해야 합니다. 이름이 같은 다른 관리형 영역은 있을 수 없으며 이름은 나중에 변경할 수 없습니다. 이름은 소문자로 시작해야 합니다. 이어서 최대 63자(영문 기준)의 소문자, 숫자 또는 하이픈이 와야 하며 하이픈으로 끝나서는 안 됩니다. 최소 길이는 2자입니다.
API를 호출하면 Integration Connectors가 장기 실행 작업을 시작하고 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다. 작업이 성공적으로 완료되면 관리형 영역이 생성됩니다.
- GetManagedZone API를 사용하여 관리형 영역이 생성되었는지 확인합니다.
예를 들면 다음과 같습니다.
curl -X GET -H "Authorization: Bearer $TOKEN" \ https://connectors.googleapis.com/v1/projects/PROJECT_ID/locations/global/managedZones/MANAGED_ZONE_NAME
API는 다음과 비슷한 응답을 반환합니다.
{ "name": "projects/demo-project/locations/global/managedZones/demo-mz", "createTime": "2023-04-17T04:34:59.569527046Z", "updateTime": "2023-04-17T04:37:25.189074195Z", "description": "demo managed zone", "dns": "api.private.service.com.", "targetVpc": "target-project-vpc", "targetProject": "target-project" }
- Integration Connectors 관리형 영역을 만드는 사용자에게
관리형 영역 만들기에 성공하면 새로 생성된 관리형 영역이 다음 이미지와 비슷한 관리형 영역 페이지에 나열됩니다.
서비스 연결에 Integration Connectors 프로젝트 허용 목록에 추가
지정된 Google Cloud 프로젝트의 요청만 수락하도록 PSC 서비스 연결을 만들 수 있습니다. 하지만 이렇게 하려면 Google Cloud 프로젝트와 연결된 서비스 디렉터리의 프로젝트 ID가 필요합니다. 서비스 디렉터리의 프로젝트 ID를 가져오려면 다음 예시와 같이 List Connections API를 사용할 수 있습니다.
구문
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"
다음을 바꿉니다.
- CONNECTORS_PROJECT_ID: 연결을 만든 Google Cloud 프로젝트의 ID
예
이 예시에서는 connectors-test
Google Cloud 프로젝트에 대한 서비스 디렉터리의 프로젝트 ID를 가져옵니다.
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"
터미널에서 이 명령어를 실행하면 다음과 비슷한 출력이 표시됩니다.
..... { "connections": [ { "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa", "createTime": "2022-10-07T09:02:31.905048520Z", "updateTime": "2022-10-07T09:22:39.993778690Z", "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1", "status": { "state": "ACTIVE" }, "configVariables": [ { "key": "project_id", "stringValue": "connectors-test" }, { "key": "dataset_id", "stringValue": "testDataset" } ], "authConfig": {}, "serviceAccount": "564332356444-compute@developer.gserviceaccount.com", "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime", "nodeConfig": { "minNodeCount": 2, "maxNodeCount": 50 } }, ....
샘플 출력에서 connectors-test
Google Cloud 프로젝트의 서비스 디렉터리 프로젝트 ID는 abcdefghijk-tp
입니다.
엔드포인트 연결 확인
엔드포인트 연결을 확인하려면 다음 단계를 따르세요.
- 엔드포인트 연결 페이지에서 만든 엔드포인트 연결의 이름을 클릭합니다.
- 표시되는 엔드포인트 연결 세부정보 페이지에서 연결 상태 필드를 확인합니다. 상태가
Accepted
이면 엔드포인트 연결이 올바르게 설정되고 Private Service Connect 연결이 설정된 것입니다.다른 상태에 관한 자세한 내용은 연결 상태를 참고하세요.
엔드포인트 연결을 사용하도록 연결 구성
통합 커넥터에서 새 연결을 만들거나 기존 연결을 업데이트할 때는 대상 섹션에서 대상 유형으로 엔드포인트 연결을 선택하고 엔드포인트 연결 목록에서 만든 엔드포인트 연결을 선택합니다.
관리형 영역을 만든 경우 대상 유형으로 호스트 주소를 선택하고 관리형 영역을 만들 때 만든 A 레코드를 사용합니다.
다양한 유형의 비공개 네트워크에 대한 연결
Integration Connectors의 비공개 연결은 항상 PSC 서비스 연결을 통해 이루어지지만 비공개 연결을 설정하는 단계는 환경에 따라 약간 다릅니다. 다음 섹션에서는 다양한 환경에서 비공개 연결을 설정하는 방법을 설명합니다.
- 백엔드가 온프레미스에서 호스팅됨
- 백엔드가 Google VPC에 호스팅됨
- 백엔드가 Google Cloud 서버리스 환경에 호스팅됨
- 백엔드를 관리형 Google Cloud 서비스로 사용할 수 있음