Créer une instance Private Service Connect

Cette page explique comment créer une instance Private Service Connect pour Secure Source Manager.

Les instances Private Service Connect n'exposent aucun point de terminaison sur l'Internet public. Lorsque vous créez une instance Private Service Connect, des points de terminaison sont créés pour fournir un accès SSH (Git) et HTTPS (Git, interface Web, API) à l'instance. Les points de terminaison doivent être associés à des adresses IP sur votre réseau privé. Tout le trafic vers et depuis l'instance Private Service Connect transite par les points de terminaison Private Service Connect.

Pour en savoir plus sur l'utilisation de Private Service Connect pour accéder de manière privée à des services gérés depuis un réseau VPC, consultez Private Service Connect.

Secure Source Manager est un service à locataire unique. Une seule instance Secure Source Manager ne doit inclure que les utilisateurs d'un seul Google Cloud client, sauf si plusieurs entreprises ayant une relation contractuelle doivent utiliser une seule instance pour collaborer.

Si vous travaillez avec plusieurs entreprises et que vous souhaitez collaborer avec elles sur le code source, nous vous recommandons de créer une instance distincte pour chaque entreprise.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  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. Installez la Google Cloud CLI.

  5. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  6. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    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. Installez la Google Cloud CLI.

  10. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  11. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init

Rôles requis

Pour obtenir les autorisations nécessaires pour créer une instance Private Service Connect Secure Source Manager, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Créer une identité de service et un pool d'autorités de certification

Cette section explique comment utiliser votre propre certificat CA. Vous devez utiliser votre propre certificat CA si vous prévoyez d'utiliser des domaines personnalisés avec votre instance privée. Pour utiliser un certificat géré sans domaines personnalisés, il vous suffit d'exécuter la gcloud source-manager instances create commande sans créer d'identité de service ni de pool d'autorités de certification. GooglePour en savoir plus, consultez Créer une instance Private Service Connect Secure Source Manager.

Si vous utilisez votre propre certificat CA, vous devez spécifier un nom de pool d'autorités de certification lorsque vous créez une instance Secure Source Manager privée. Une requête de signature du certificat SSL HTTPS de l'instance est envoyée au pool d'autorités de certification.

  1. Exécutez la commande suivante pour créer une identité de service pour l'API Secure Source Manager dans votre projet :

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

    où PROJECT-ID correspond à l'ID de votre projet.

    Le résultat ressemble à ce qui suit :

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

    service-PROJECT_NUM@gcp-sa-sourcemanager.iam.gserviceaccount.com correspond à l'agent de service Secure Source Manager et PROJECT_NUM est le numéro de votre projet.

  2. Créez un pool d'autorités de certification avec les demandes de certificat basées sur la requête de signature de certificat activées.

  3. Créez une autorité de certification. Vous pouvez créer une autorité de certification racine ou subordonnée en fonction de vos besoins.

    Pour en savoir plus sur les différences entre les autorités de certification racines et subordonnées, consultez Déterminer les paramètres de l'autorité de certification.

  4. Accordez à l'identité de service de l'API Secure Source Manager les autorisations nécessaires pour demander de nouveaux certificats dans le pool d'autorités de certification :

    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
    

    Remplacez les éléments suivants :

    • CA_POOL_NAME par le nom que vous avez donné à votre pool d'autorités de certification.
    • CA_LOCATION par la région ou la zone de votre pool d'autorités de certification.
    • PROJECT_NUMBER par le numéro du projet dans lequel Secure Source Manager est activé. Pour trouver le numéro de projet, consultez Identifier des projets.
    • CA_PROJECT_ID par l'ID du projet dans lequel vous avez créé le pool d'autorités de certification.

Créer une instance Private Service Connect Secure Source Manager

Vous pouvez attribuer des domaines personnalisés à votre instance privée pour les points de terminaison HTML, API, Git HTTP et Git SSH. Les domaines personnalisés nécessitent votre propre certificat CA. Par conséquent, vous devez fournir un pool d'autorités de certification lorsque vous créez une instance avec des domaines personnalisés. Vous ne pouvez configurer des domaines personnalisés que lors de la création de l'instance à l'aide de l'API. Vous ne pouvez pas les modifier une fois l'instance créée.

gcloud

Créez une instance Private Service Connect avec la commande suivante :

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

Remplacez les éléments suivants :

  • INSTANCE_ID par le nom que vous souhaitez donner à l'instance.
  • LOCATION par la région dans laquelle vous souhaitez créer l'instance. Pour connaître les emplacements compatibles, consultez Emplacements.
  • PROJECT_ID par le nom du projet dans lequel vous souhaitez créer une instance.
  • CA_PROJECT par le nom du projet de pool d'autorités de certification. Obligatoire si vous utilisez votre propre certificat CA.
  • CA_LOCATION par la région dans laquelle vous avez créé le pool d'autorités de certification. Obligatoire si vous utilisez votre propre certificat CA.
  • CA_POOL_NAME par le nom du pool d'autorités de certification. Obligatoire si vous utilisez votre propre certificat CA.

API

Créez une instance Private Service Connect avec la commande suivante :

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"}}}'

Remplacez les éléments suivants :

  • INSTANCE_ID par le nom que vous souhaitez donner à l'instance.
  • LOCATION par la région dans laquelle vous souhaitez créer l'instance. Pour connaître les emplacements compatibles, consultez Emplacements.
  • PROJECT_ID par le nom du projet dans lequel vous souhaitez créer une instance.
  • CA_PROJECT par le nom du projet de pool d'autorités de certification. Obligatoire si vous utilisez votre propre certificat CA ou des domaines personnalisés.
  • CA_LOCATION par la région dans laquelle vous avez créé le pool d'autorités de certification. Obligatoire si vous utilisez votre propre certificat CA ou des domaines personnalisés.
  • CA_POOL_NAME par le nom du pool d'autorités de certification. Obligatoire si vous utilisez votre propre certificat CA ou des domaines personnalisés.
  • API_CUSTOM_DOMAIN par votre domaine personnalisé pour l'accès à l'API, par exemple api.source.example.com. Obligatoire uniquement si vous utilisez des domaines personnalisés.
  • HTML_CUSTOM_DOMAIN par votre domaine personnalisé pour l'accès à l'interface utilisateur Web, par exemple source.example.com. Obligatoire uniquement si vous utilisez des domaines personnalisés.
  • GIT_SSH_CUSTOM_DOMAIN par votre domaine personnalisé pour l'accès Git SSH, par exemple ssh.source.example.com. Obligatoire uniquement si vous utilisez des domaines personnalisés.
  • GIT_HTTP_CUSTOM_DOMAIN par votre domaine personnalisé pour l'accès Git HTTP, par exemple git.source.example.com. Obligatoire uniquement si vous utilisez des domaines personnalisés.

Terraform

Pour créer une instance Private Service Connect avec Terraform, utilisez la google_secure_source_manager_instance ressource avec le private_config.is_private champ défini sur true.

Une opération de création d'instance de longue durée démarre. La création de l'instance prend jusqu'à 60 minutes. Le résultat ressemble à ce qui suit :

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 correspond à OPERATION_NAME.

Vous avez besoin de OPERATION_NAME pour vérifier l'état de l'opération.

Pour vérifier l'état de l'opération, exécutez la commande suivante :

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

Remplacez les éléments suivants :

  • OPERATION_NAME par le nom de l'opération dans la réponse de votre commande de création.
  • LOCATION par la région dans laquelle vous souhaitez créer l'instance. Pour connaître les emplacements compatibles, consultez Emplacements.

Une fois l'instance créée, les points de terminaison Private Service Connect httpServiceAttachment et sshServiceAttachment, ainsi que les noms d'hôte pour html, api, gitHttp et gitSsh, sont listés dans le résultat.

Accéder à l'instance privée

Vous pouvez accéder à votre instance Private Service Connect en créant des points de terminaison Private Service Connect basés sur des règles de transfert ou en créant des backends Private Service Connect basés sur des équilibreurs de charge.

Les backends Private Service Connect basés sur des équilibreurs de charge sont plus flexibles et vous permettent de vous intégrer à d'autres Google Cloud services tels que Cloud Build, mais ils sont plus complexes et entraînent une facturation supplémentaire.

Les points de terminaison Private Service Connect basés sur des règles de transfert sont plus simples et moins coûteux. Toutefois, vous ne pouvez pas vous connecter à Cloud Build ni à d'autres Google Cloud services.

Pour configurer des backends Private Service Connect basés sur des équilibreurs de charge pour votre instance Private Service Connect et la connecter à Cloud Build, consultez Connecter Cloud Build à une instance Private Service Connect.

Configurer des points de terminaison Private Service Connect basés sur des règles de transfert

  1. Pour créer des points de terminaison Private Service Connect, suivez les instructions de la section Accéder aux services publiés via des points de terminaison.

  2. Pour obtenir les URI des rattachements de service HTTP et SSH de votre instance Secure Source Manager, exécutez la commande suivante :

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

    Remplacez les éléments suivants :

    • INSTANCE_ID par le nom de votre instance. Pour lister les instances dans une région donnée, exécutez gcloud source-manager instances list --region=LOCATION.
    • LOCATION par l'emplacement de votre instance. Pour connaître les emplacements compatibles, consultez Emplacements.

    Le résultat inclut les éléments suivants :

    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 correspond à l'URI du rattachement de service HTTP de votre instance.
    • projects/abc12345d1a1234a0a-tp/regions/us-central1/serviceAttachments/ssh-psc correspond à l'URI du rattachement de service SSH de votre instance.
  3. Après avoir créé les points de terminaison Private Service Connect, vous devez configurer des enregistrements DNS privés. Pour savoir comment configurer des enregistrements DNS privés, consultez Configurer manuellement le DNS. Si vous avez configuré des domaines personnalisés pour votre instance, créez des enregistrements DNS qui mappent vos domaines personnalisés aux adresses IP internes des rattachements de service. Sinon, utilisez les noms d'hôte dans le champ hostConfig de l'instance :

    1. Mappez la valeur de hostConfig.html (ou votre domaine personnalisé HTML), hostConfig.api (ou votre domaine personnalisé API) et hostConfig.gitHttp (ou votre domaine personnalisé Git HTTP) à l'adresse IP interne du rattachement de service HTTP.
    2. Mappez la valeur de hostConfig.ssh (ou votre domaine personnalisé Git SSH) à l'adresse IP interne du rattachement de service SSH.

    Par exemple, dans l'exemple de résultat précédent, la valeur de hostConfig.html est my-project-012345678901.us-central1.p.sourcemanager.dev.

    Google Cloud

Authentification Git avec des domaines personnalisés

Si vous utilisez des domaines personnalisés pour votre instance privée, effectuez la configuration côté client suivante sur chaque machine pour utiliser Git via HTTPS. Cette configuration connecte Git à l'assistant d'identifiants gcloud pour s'authentifier auprès de votre domaine personnalisé.

  1. Configurez Git pour qu'il utilise l'assistant gcloud pour votre domaine Git HTTP personnalisé :

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

    Remplacez GIT_HTTP_CUSTOM_DOMAIN par le domaine personnalisé que vous avez configuré pour l'accès Git HTTP.

  2. Autorisez votre domaine personnalisé dans gcloud :

    gcloud config set core/credentialed_hosted_repo_domains GIT_HTTP_CUSTOM_DOMAIN
    

    Pour autoriser plusieurs domaines, fournissez-les sous la forme d'une liste d'éléments séparés par une virgule.

Utiliser l'autorité de certification avec l'API Secure Source Manager

Secure Source Manager comporte un plan de contrôle et un plan de données. Les points de terminaison du plan de données sont hébergés directement par votre instance Secure Source Manager. Vous devez donc vous connecter au nom d'hôte de l'API de votre instance pour y accéder.

Pour utiliser votre instance Secure Source Manager privée, utilisez l'autorité de certification que vous avez créée dans la section Créer une identité de service et un pool d'autorités de certification.

  1. Pour télécharger votre autorité de certification, exécutez la commande suivante :

    gcloud privateca pools get-ca-certs CA_POOL \
        --location LOCATION \
        --output-file=root-cert.pem \
        --project PROJECT
    
  2. Pour effectuer des appels d'API à votre instance, transmettez le certificat CA à l'API Secure Source Manager du plan de données.

    Par exemple, la commande suivante transmet le certificat CA root-cert.pem à l'API Secure Source Manager pour lister les dépôts dans l'instance privée my-instance à l'emplacement us-central1.

    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
    

Étape suivante