Private Service Connect 인스턴스 만들기

이 페이지에서는 Secure Source Manager의 Private Service Connect 인스턴스를 만드는 방법을 설명합니다.

Private Service Connect 인스턴스는 공개 인터넷에 엔드포인트를 노출하지 않습니다. Private Service Connect 인스턴스를 만들면 인스턴스에 대한 SSH (Git) 및 HTTPS (Git, 웹 인터페이스, API) 액세스를 제공하는 엔드포인트가 생성됩니다. 엔드포인트에는 비공개 네트워크의 IP 주소가 할당되어야 합니다. Private Service Connect 인스턴스로 오가는 모든 트래픽은 Private Service Connect 엔드포인트를 통과합니다.

VPC 네트워크 내부에서 Private Service Connect를 사용하여 관리형 서비스에 비공개로 액세스하는 방법에 대한 자세한 내용은 Private Service Connect를 참조하세요.

Secure Source Manager는 단일 테넌트 서비스입니다. 계약 관계가 있는 여러 회사가 공동작업을 위해 단일 인스턴스를 사용해야 하는 경우가 아니면 단일 Secure Source Manager 인스턴스에 한 Google Cloud 고객의 사용자만 포함해야 합니다.

여러 회사와 협력하고 소스 코드에 대해 공동작업하려는 경우 각 회사에 대해 별도의 인스턴스를 만드는 것이 좋습니다.

시작하기 전에

  1. 로그인하여 Google 계정을 사용하세요.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Enable the Secure Source Manager API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. Google Cloud CLI를 설치합니다.

  5. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  6. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Enable the Secure Source Manager API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  9. Google Cloud CLI를 설치합니다.

  10. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  11. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init

필요한 역할

Private Service Connect Secure Source Manager 인스턴스를 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

서비스 ID 및 인증 기관 풀 만들기

이 섹션에서는 자체 CA 인증서를 사용하는 방법을 설명합니다. 비공개 인스턴스에서 커스텀 도메인을 사용하려면 자체 CA 인증서를 사용해야 합니다. 커스텀 도메인 없이 Google관리형 인증서를 사용하려면 서비스 ID 및 CA 풀을 만들지 않고 gcloud source-manager instances create 명령어를 실행하기만 하면 됩니다. 자세한 내용은 Private Service Connect Secure Source Manager 인스턴스 만들기를 참조하세요.

자체 CA 인증서를 사용하는 경우 비공개 Secure Source Manager 인스턴스를 만들 때 인증 기관 (CA) 풀 이름을 지정해야 합니다. 인스턴스의 HTTPS SSL 인증서에 서명하는 요청이 CA 풀로 전송됩니다.

  1. 다음 명령어를 실행하여 프로젝트 내에서 Secure Source Manager API의 서비스 ID를 만듭니다.

    gcloud beta services identity create \
        --service=securesourcemanager.googleapis.com \
        --project=PROJECT_ID
    

    여기서 PROJECT_ID는 프로젝트 ID입니다.

    출력은 다음과 비슷합니다.

    Service identity created: service-PROJECT_NUM@gcp-sa-sourcemanager.iam.gserviceaccount.com

    여기서 service-PROJECT_NUM@gcp-sa-sourcemanager.iam.gserviceaccount.com 는 Secure Source Manager 서비스 에이전트이고 PROJECT_NUM은 프로젝트 번호입니다.

  2. CSR 기반 인증서 요청이 사용 설정된 인증 기관 (CA) 풀을 만듭니다.

  3. CA를 만듭니다. 필요에 따라 루트 또는 하위 CA를 만들 수 있습니다.

    루트 CA와 하위 CA의 차이점에 대한 자세한 내용은 인증 기관 설정 결정을 참조하세요.

  4. CA 풀에서 새 인증서를 요청할 수 있는 Secure Source Manager API 서비스 ID 권한을 부여합니다.

    gcloud privateca pools add-iam-policy-binding CA_POOL_NAME \
        --location=CA_LOCATION \
        --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com' \
        --role='roles/privateca.certificateRequester' \
        --project=CA_PROJECT_ID
    

    다음을 바꿉니다.

    • CA_POOL_NAME을 CA 풀에 지정한 이름으로 바꿉니다.
    • CA_LOCATION을 CA 풀의 리전 또는 영역으로 바꿉니다.
    • PROJECT_NUMBER를 Secure Source Manager가 사용 설정된 프로젝트의 프로젝트 번호로 바꿉니다. 프로젝트 번호를 찾으려면 프로젝트 식별을 참조하세요.
    • CA_PROJECT_ID를 CA 풀을 만든 프로젝트의 프로젝트 ID로 바꿉니다.

Private Service Connect Secure Source Manager 인스턴스 만들기

HTML, API, Git HTTP, Git SSH 엔드포인트의 비공개 인스턴스에 커스텀 도메인을 할당할 수 있습니다. 커스텀 도메인에는 자체 CA 인증서가 필요합니다. 따라서 커스텀 도메인으로 인스턴스를 만들 때 CA 풀을 제공해야 합니다. API를 사용하여 인스턴스를 만드는 동안에만 커스텀 도메인을 구성할 수 있습니다. 인스턴스를 만든 후에는 수정할 수 없습니다.

gcloud

다음 명령어를 사용하여 Private Service Connect 인스턴스를 만듭니다.

gcloud source-manager instances create INSTANCE_ID \
  --region=LOCATION \
  --project=PROJECT_ID \
  --is-private \
  --ca-pool=projects/CA_PROJECT/locations/CA_LOCATION/caPools/CA_POOL_NAME

다음을 바꿉니다.

  • INSTANCE_ID를 인스턴스에 지정할 이름으로 바꿉니다.
  • LOCATION을 인스턴스를 만들 리전으로 바꿉니다. 지원되는 위치는 위치를 참조하세요.
  • PROJECT_ID를 인스턴스를 만들 프로젝트의 이름으로 바꿉니다.
  • CA_PROJECT를 CA 풀 프로젝트의 이름으로 바꿉니다. 자체 CA 인증서를 사용하는 경우 필요합니다.
  • CA_LOCATION을 CA 풀을 만든 리전으로 바꿉니다. 자체 CA 인증서를 사용하는 경우 필요합니다.
  • CA_POOL_NAME을 CA 풀의 이름으로 바꿉니다. 자체 CA 인증서를 사용하는 경우 필요합니다.

API

다음 명령어를 사용하여 Private Service Connect 인스턴스를 만듭니다.

curl \
    -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://securesourcemanager.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances?instance_id=INSTANCE_ID \
    -H "Content-Type: application/json" \
    -d '{"private_config":{"is_private":true,"ca_pool":"projects/CA_PROJECT/locations/CA_LOCATION/caPools/CA_POOL_NAME","custom_host_config":{"api":"API_CUSTOM_DOMAIN", "html":"HTML_CUSTOM_DOMAIN", "git_ssh":"GIT_SSH_CUSTOM_DOMAIN", "git_http":"GIT_HTTP_CUSTOM_DOMAIN"}}}'

다음을 바꿉니다.

  • INSTANCE_ID를 인스턴스에 지정할 이름으로 바꿉니다.
  • LOCATION을 인스턴스를 만들 리전으로 바꿉니다. 지원되는 위치는 위치를 참조하세요.
  • PROJECT_ID를 인스턴스를 만들 프로젝트의 이름으로 바꿉니다.
  • CA_PROJECT를 CA 풀 프로젝트의 이름으로 바꿉니다. 자체 CA 인증서 또는 커스텀 도메인을 사용하는 경우 필요합니다.
  • CA_LOCATION을 CA 풀을 만든 리전으로 바꿉니다. 자체 CA 인증서 또는 커스텀 도메인을 사용하는 경우 필요합니다.
  • CA_POOL_NAME을 CA 풀의 이름으로 바꿉니다. 자체 CA 인증서 또는 커스텀 도메인을 사용하는 경우 필요합니다.
  • API_CUSTOM_DOMAIN을 API 액세스를 위한 커스텀 도메인(예: api.source.example.com)으로 바꿉니다. 커스텀 도메인을 사용하는 경우에만 필요합니다.
  • HTML_CUSTOM_DOMAIN을 웹 UI 액세스를 위한 커스텀 도메인(예: source.example.com)으로 바꿉니다. 커스텀 도메인을 사용하는 경우에만 필요합니다.
  • GIT_SSH_CUSTOM_DOMAIN을 Git SSH 액세스를 위한 커스텀 도메인(예: ssh.source.example.com)으로 바꿉니다. 커스텀 도메인을 사용하는 경우에만 필요합니다.
  • GIT_HTTP_CUSTOM_DOMAIN을 Git HTTP 액세스를 위한 커스텀 도메인(예: git.source.example.com)으로 바꿉니다. 커스텀 도메인을 사용하는 경우에만 필요합니다.

Terraform

Terraform으로 Private Service Connect 인스턴스를 만들려면 google_secure_source_manager_instance 리소스를 사용하고 private_config.is_private 필드를 true로 설정합니다.

장기 실행 인스턴스 생성 작업이 시작됩니다. 인스턴스를 만드는 데 최대 60분이 걸립니다. 출력은 다음과 비슷합니다.

Create request issued for [my-instance].
done: false
metadata:
  '@type': type.googleapis.com/google.cloud.securesourcemanager.v1.OperationMetadata
  apiVersion: v1
  createTime: '2023-02-27T20:57:52.315609549Z'
  requestedCancellation: false
  target: projects/my-project/locations/us-central1/instances/my-instance
  verb: create
name: projects/my-project/locations/us-central1/operations/operation-1234567894561-5ec69948c0f2b-60dd727f-a9b97a2e

여기서 projects/my-project/locations/us-central1/operations/operation-1234567894561-5ec69948c0f2b-60dd727f-a9b97a2e는 OPERATION_NAME입니다.

작업 상태를 확인하려면 OPERATION_NAME이 필요합니다.

작업 상태를 확인하려면 다음 명령어를 실행합니다.

gcloud source-manager operations describe OPERATION_NAME \
    --region=LOCATION

다음을 바꿉니다.

  • OPERATION_NAME을 만들기 명령어 응답의 작업 이름으로 바꿉니다.
  • LOCATION을 인스턴스를 만들 리전으로 바꿉니다. 지원되는 위치는 위치를 참조하세요.

인스턴스를 만든 후에는 Private Service Connect 엔드포인트 httpServiceAttachmentsshServiceAttachment와 함께 html, api, gitHttp, gitSsh의 호스트 이름이 출력에 나열됩니다.

비공개 인스턴스에 액세스

전달 규칙을 기반으로 Private Service Connect 엔드포인트를 만들거나 부하 분산기를 기반으로 Private Service Connect 백엔드를 만들어 Private Service Connect 인스턴스에 액세스할 수 있습니다.

부하 분산기를 기반으로 하는 Private Service Connect 백엔드는 더 유연하며 Cloud Build와 같은 다른 Google Cloud 서비스와 통합할 수 있지만 더 복잡하고 추가 청구가 발생합니다.

전달 규칙을 기반으로 하는 Private Service Connect 엔드포인트는 더 간단하고 비용이 저렴합니다. 하지만 Cloud Build 또는 다른 Google Cloud 서비스에 연결할 수는 없습니다.

Private Service Connect 인스턴스에 부하 분산기를 기반으로 하는 Private Service Connect 백엔드를 설정하고 Cloud Build에 연결하려면 Cloud Build를 Private Service Connect 인스턴스에 연결을 참조하세요.

전달 규칙을 기반으로 Private Service Connect 엔드포인트 설정

  1. Private Service Connect 엔드포인트를 만들려면 다음의 엔드포인트를 통해 게시된 서비스 액세스안내를 따르세요.

  2. Secure Source Manager 인스턴스의 HTTP 및 SSH 서비스 연결의 URI를 가져오려면 다음 명령어를 실행합니다.

    gcloud source-manager instances describe INSTANCE_ID \
        --region=LOCATION
    

    다음을 바꿉니다.

    • INSTANCE_ID를 인스턴스의 이름으로 바꿉니다. 특정 리전의 인스턴스를 나열하려면 다음 명령어를 실행합니다. gcloud source-manager instances list --region=LOCATION
    • LOCATION을 인스턴스 위치로 바꿉니다. 지원되는 위치는 위치를 참조하세요.

    출력에는 다음이 포함됩니다.

    createTime: '2023-09-22T18:21:35.729454612Z'
    hostConfig:
      api: my-project-012345678901-api.us-central1.p.sourcemanager.dev
      gitHttp: my-project-012345678901-git.us-central1.p.sourcemanager.dev
      gitSsh: my-project-012345678901-ssh.us-central1.p.sourcemanager.dev
      html: my-project-012345678901.us-central1.p.sourcemanager.dev
    name: projects/my-project/locations/us-central1/instances/my-instance
    privateConfig:
      caPool: projects/my-project/locations/us-central1/caPools/my-ca-pool
      httpServiceAttachment: projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/http-psc
      isPrivate: true
      sshServiceAttachment: projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/ssh-psc
    state: ACTIVE
    updateTime: '2023-09-22T18:39:53.390563549Z'
    
    • projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/http-psc 는 인스턴스의 HTTP 서비스 연결 URI입니다.
    • projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/ssh-psc 는 인스턴스의 SSH 서비스 연결 URI입니다.
  3. Private Service Connect 엔드포인트를 만든 후에는 비공개 DNS 레코드를 설정해야 합니다. 비공개 DNS 레코드를 설정하는 방법은 수동으로 DNS 구성을 참조하세요. 인스턴스에 커스텀 도메인을 구성한 경우 커스텀 도메인을 서비스 연결의 내부 IP 주소에 매핑하는 DNS 레코드를 만듭니다. 그렇지 않으면 인스턴스의 hostConfig 필드에 있는 호스트 이름을 사용합니다.

    1. hostConfig.html (또는 HTML 커스텀 도메인), hostConfig.api (또는 API 커스텀 도메인), 및 hostConfig.gitHttp (또는 Git HTTP 커스텀 도메인)의 값을 HTTP 서비스 연결의 내부 IP 주소에 매핑합니다.
    2. hostConfig.ssh (또는 Git SSH 커스텀 도메인)의 값을 SSH 서비스 연결의 내부 IP 주소에 매핑합니다.

    예를 들어 이전 출력 예에서 hostConfig.html의 값은 my-project-012345678901.us-central1.p.sourcemanager.dev입니다.

    Google Cloud

커스텀 도메인을 사용한 Git 인증

비공개 인스턴스에 커스텀 도메인을 사용하는 경우 각 머신에서 다음 클라이언트 측 구성을 실행하여 HTTPS를 통해 Git을 사용합니다. 이 구성은 Git을 gcloud 사용자 인증 정보 도우미에 연결하여 커스텀 도메인에 대해 인증합니다.

  1. 커스텀 Git HTTP 도메인에 gcloud 도우미를 사용하도록 Git을 구성합니다.

    git config --global credential.'https://GIT_HTTP_CUSTOM_DOMAIN'.helper gcloud.sh
    

    GIT_HTTP_CUSTOM_DOMAIN을 Git HTTP 액세스를 위해 구성한 커스텀 도메인으로 바꿉니다.

  2. gcloud에서 커스텀 도메인을 승인합니다.

    gcloud config set core/credentialed_hosted_repo_domains GIT_HTTP_CUSTOM_DOMAIN
    

    여러 도메인을 승인하려면 쉼표로 구분된 목록으로 제공합니다.

Secure Source Manager API와 함께 CA 사용

Secure Source Manager에는 컨트롤 플레인과 데이터 영역이 있습니다. 데이터 영역 엔드포인트는 Secure Source Manager 인스턴스에서 직접 호스팅되므로 인스턴스의 API 호스트 이름에 연결하여 액세스해야 합니다.

비공개 Secure Source Manager 인스턴스를 사용하려면 서비스 ID 및 인증 기관 풀 만들기 섹션에서 만든 CA를 사용합니다.

  1. CA를 다운로드하려면 다음 명령어를 실행합니다.

    gcloud privateca pools get-ca-certs CA_POOL \
        --location LOCATION \
        --output-file=root-cert.pem \
        --project PROJECT
    
  2. 인스턴스에 API 호출을 하려면 CA 인증서를 데이터 영역 Secure Source Manager API에 전달합니다.

    예를 들어 다음 명령어는 CA 인증서 root-cert.pem을 Secure Source Manager API에 전달하여 us-central1 위치의 비공개 인스턴스 my-instance에 있는 저장소를 나열합니다.

    curl \
        --cacert root-cert.pem \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://my-instance-01234567890-api.us-central1.sourcemanager.dev/v1/projects/01234567890/locations/us-central1/repositories
    

다음 단계