Vous pouvez cibler un point de terminaison privé pour les appels HTTP à partir de l'exécution de votre workflow : à l'aide du registre de services de l'Annuaire des services avec Workflows. En créant un point de terminaison privé au sein d'un réseau cloud privé virtuel (VPC), le point de terminaison peut être compatible avec VPC Service Controls.
VPC Service Controls fournit un niveau de sécurité supplémentaire indépendamment d'Identity and Access Management (IAM). Si IAM permet un contrôle des accès précis basé sur l'identité, VPC Service Controls permet de bénéficier sécurité périmétrique basée sur le contexte, y compris le contrôle de la sortie des données dans le périmètre.
L'Annuaire des services est un registre de services qui stocke des informations sur les services réseau enregistrés y compris leur nom, leur emplacement et leurs attributs. Indépendamment de de l'infrastructure, vous pouvez enregistrer les services automatiquement et capturer plus de détails. Vous pouvez ainsi découvrir, publier et connecter des services à grande échelle pour tous vos points de terminaison de service.
Un réseau VPC fournit la connectivité aux vos instances de machines virtuelles (VM), et vous permet de créer des points de terminaison privés au sein de votre réseau VPC à l'aide d'adresses IP internes. HTTP les appels à une ressource de réseau VPC sont envoyés via un réseau privé tout en appliquant IAM et VPC Service Controls.
VPC Service Controls est un Fonctionnalité Google Cloud permettant de définir un périmètre de service et de créer une limite de transfert de données. Vous pouvez utiliser VPC Service Controls avec Workflows permettant de protéger vos services et de réduire les risques de l'exfiltration de données.
Ce document explique comment enregistrer une VM dans un réseau VPC en tant que point de terminaison de l'Annuaire des services. Cela vous permet de fournir votre workflow avec un nom de service de l'Annuaire des services. Votre utilise les informations extraites du registre de services pour envoyer la requête HTTP appropriée, sans sortir vers un réseau public.
Ce diagramme fournit une vue d'ensemble:
En règle générale, vous devez effectuer les tâches suivantes :
- Accorder des autorisations à l'agent de service Cloud Workflows afin que l'agent de service puisse afficher les ressources de l'Annuaire des services et accéder aux réseaux VPC via l'Annuaire des services.
- Créez un réseau VPC pour fournir des fonctionnalités de mise en réseau.
- Créez une règle de pare-feu VPC pour vous pouvez autoriser ou refuser le trafic vers ou depuis les instances de VM de votre VPC réseau.
- Créez une instance de VM dans le réseau VPC. A L'instance de VM Compute Engine est une machine virtuelle hébergée sur l'infrastructure de Google. Les termes instance Compute Engine Instance de VM et VM sont synonymes et sont utilisés de manière interchangeable.
- Déployez une application sur la VM. Vous pouvez exécuter une application l'instance de VM et confirmer que le trafic est acheminé comme prévu.
- Configurer l'annuaire des services pour que l'exécution de votre workflow puisse appeler un annuaire des services et un point de terminaison unique.
- Créez et déployez votre workflow. La
la valeur
private_service_name
de votre workflow spécifie Point de terminaison de l'Annuaire des services que vous avez enregistré étape.
Accorder des autorisations à l'agent de service Cloud Workflows
Certains services Google Cloud disposent d'agents de service qui permettent aux services d'accéder à vos ressources. Si une API nécessite un agent de service, Google le crée après l'activation et l'utilisation de l'API.
Lorsque vous déployez un workflow pour la première fois, l'agent de service Cloud Workflows est automatiquement créé au format suivant:
service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com
Vous pouvez créer manuellement le compte de service dans un projet à l'aide de la commande suivante:
gcloud beta services identity create \ --service=workflows.googleapis.com \ --project=PROJECT_ID
Remplacez
PROJECT_ID
par l'ID de votre projet Google Cloud.Pour afficher les ressources de l'Annuaire des services, accordez le rôle Rôle de lecteur de l'Annuaire des services (
servicedirectory.viewer
) sur le projet dans Workflows agent de service:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \ --role=roles/servicedirectory.viewer
Remplacez
PROJECT_NUMBER
par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Pour accéder aux réseaux VPC à l'aide de l'Annuaire des services, accorder le Rôle de service autorisé Private Service Connect (
roles/servicedirectory.pscAuthorizedService
) sur le projet Agent de service Workflows:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \ --role=roles/servicedirectory.pscAuthorizedService
Créer un réseau VPC
Un réseau VPC est une version virtuelle d'un réseau physique, mise en œuvre au sein du réseau de production de Google Il fournit une connectivité à vos instances de VM Compute Engine.
Vous pouvez créer un en mode automatique ou en mode personnalisé réseau. Chaque nouveau réseau que vous créez doit avoir un nom unique dans le même projet.
Par exemple, la commande suivante crée un VPC en mode automatique réseau:
gcloud compute networks create NETWORK_NAME \ --subnet-mode=auto
Remplacez NETWORK_NAME
par le nom que vous souhaitez donner au réseau VPC.
Pour en savoir plus, consultez la page Créer et gérer des réseaux VPC.
Créer une règle de pare-feu VPC
Les règles de pare-feu VPC vous permettent d'autoriser ou de refuser le trafic à destination ou en provenance d'une VM d'instances d'un réseau VPC en fonction d'un numéro de port, d'un tag standard.
Les règles de pare-feu VPC sont définies au niveau du réseau et s'appliquent seulement au réseau sur lequel elles ont été créées. Cependant, le nom que vous sélectionnez pour chacune d'elles doit être unique au projet.
Par exemple, la commande suivante crée une règle de pare-feu pour un réseau
et autorise le trafic entrant provenant de n'importe quelle adresse IPv4,
0.0.0.0/0
La valeur all
de l'option --rules
rend la règle applicable à tous
protocoles et tous les ports de destination.
gcloud compute firewall-rules create RULE_NAME \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --direction=INGRESS \ --action=ALLOW \ --source-ranges=0.0.0.0/0 \ --rules=all
Remplacez RULE_NAME
par le nom de la règle de pare-feu.
Pour plus d'informations, consultez la section Utiliser des règles de pare-feu VPC.
Créer une instance de VM dans le réseau VPC
comme les clusters Google Kubernetes Engine (GKE), App Engine des instances d'environnement flexible et d'autres produits Google Cloud VM Compute Engine. Pour soutenir Accès à un réseau privé une ressource de réseau VPC peut être une instance de VM, une adresse IP Cloud Interconnect ou un équilibreur de charge interne de couche 4.
Les instances Compute Engine peuvent exécuter des images publiques pour Linux et Windows. fourni par Google, ainsi que des images personnalisées privées que vous pouvez créer ou importer des données depuis vos systèmes existants. Vous pouvez aussi déployer des images containers.
Vous pouvez choisir les propriétés de vos instances, comme le nombre de processeurs virtuels et la quantité de mémoire, à l'aide d'un ensemble ou en créant des types personnalisés.
Par exemple, la commande suivante crée une instance de VM Linux à partir d'une instance avec une interface réseau connectée au réseau VPC que vous créé précédemment.
Créez et démarrez une instance de VM:
gcloud compute instances create VM_NAME \ --image-family=debian-11 \ --image-project=debian-cloud \ --machine-type=e2-micro \ --network-interface network=projects/PROJECT_ID/global/networks/NETWORK_NAME
Remplacez
VM_NAME
par le nom de la VM.Si vous êtes invité à confirmer la zone de l'instance, saisissez
y
.Après avoir créé l'instance de VM, notez l'adresse
INTERNAL_IP
. qui est renvoyé.Dans Google Cloud Console, accédez à la page Instances de VM.
Dans la colonne Nom, cliquez sur le nom de l'instance de VM appropriée.
Si la VM est en cours d'exécution, cliquez sur
Arrêter.Pour modifier la VM, cliquez sur
Modifier.Dans la section Mise en réseau > Pare-feu, pour autoriser le trafic HTTP ou HTTPS vers la VM, sélectionnez Autoriser le trafic HTTP ou Autoriser le trafic HTTPS
Pour cet exemple, cochez la case Autoriser le trafic HTTP.
Compute Engine ajoute à votre VM un tag réseau qui associe une règle de pare-feu avec la VM. Il crée ensuite le pare-feu d'entrée correspondant qui autorise tout le trafic entrant sur
tcp:80
(HTTP) outcp:443
(HTTPS).Pour enregistrer vos modifications, cliquez sur Enregistrer.
Pour redémarrer la VM, cliquez sur Démarrer/Reprendre.
Pour en savoir plus, consultez la page Créer et démarrer une instance de VM.
Déployer une application sur la VM
Pour tester la configuration réseau et confirmer que le trafic est diffusé en tant que vous pouvez déployer sur votre VM une application simple qui écoute sur un port.
Par exemple, les commandes suivantes créent un service Web Node.js qui écoute port 3000.
Établissez une connexion SSH avec votre VM. Compute Engine.
Mettez à jour vos dépôts de packages :
sudo apt update
Installez NVM. Node.js et npm.
Pour en savoir plus, consultez la section Configurer un environnement de développement Node.js.
Créez un fichier
package.json
de manière interactive:npm init
Exemple :
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "hello" }, "author": "", "license": "ISC" }
installer Express, une application Web ; pour Node.js:
npm install express
Rédigez le code de l'application de test:
vim app.js
L'exemple suivant crée une application qui répond aux requêtes
GET
au chemin racine (/
) avec le texte "Hello, world!"Notez le port sur lequel l'application écoute. Le même numéro de port doit être utilisé lorsque vous configurez le point de terminaison pour l'Annuaire des services Google Cloud.
Vérifiez que l'application écoute sur le port 3000:
node app.js
Compute Engine offre diverses options de déploiement. Pour plus pour en savoir plus, consultez Choisissez une stratégie de déploiement Compute Engine pour votre charge de travail.
Configurer l'Annuaire des services
Pour pouvoir appeler un point de terminaison privé à partir d'une exécution de workflow, vous devez définir un espace de noms de l'Annuaire des services, enregistrez un service et d'ajouter un point de terminaison au service.
Par exemple, les commandes suivantes créent un espace de noms, un service et un objet qui spécifie le réseau VPC et l'adresse IP interne de votre instance de VM.
Créez un espace de noms :
gcloud service-directory namespaces create NAMESPACE \ --location=REGION
Remplacez les éléments suivants :
NAMESPACE
: ID de l'espace de noms ou de l'espace de noms complet l'identifiant qualifié de l'espace de noms.REGION
: région Google Cloud contient l'espace de noms ; Exemple :us-central1
.
Créez un service:
gcloud service-directory services create SERVICE \ --namespace=NAMESPACE \ --location=REGION
Remplacez
SERVICE
par le nom du service que vous créent.Configurer un point de terminaison
gcloud service-directory endpoints create ENDPOINT \ --namespace=NAMESPACE \ --service=SERVICE \ --network=projects/PROJECT_NUMBER/locations/global/networks/NETWORK_NAME \ --port=PORT_NUMBER \ --address=IP_ADDRESS \ --location=REGION
Remplacez les éléments suivants :
ENDPOINT
: nom du point de terminaison que vous créer.PORT_NUMBER
: port exécuté par le point de terminaison activé ; Exemple :3000
.IP_ADDRESS
: adresse IPv6 ou IPv4 du point de terminaison il s'agit de l'adresse IP interne que vous avez notée précédemment.
Pour en savoir plus, consultez Configurer l'annuaire des services et Configurer l'accès au réseau privé.
Créer et déployer votre workflow
Un point de terminaison privé est appelé ou appelé à partir de Workflows.
via une requête HTTP. Les méthodes de requête HTTP les plus courantes comportent un appel
(par exemple, http.get et
http.post), mais vous pouvez
type de requête HTTP en définissant le champ call
sur http.request
et
en spécifiant le type de requête à l'aide du champ method
. Pour plus d'informations,
consultez la section Envoyer une requête HTTP.
Créez un fichier de code source pour votre workflow:
touch call-private-endpoint.JSON_OR_YAML
Remplacer
JSON_OR_YAML
paryaml
oujson
en fonction du format de votre flux de travail.Dans un éditeur de texte, copiez le workflow suivant (qui, dans le cas présent, utilise un protocole HTTP pour la valeur
url
) à votre fichier de code source:YAML
main: steps: - checkHttp: call: http.get args: url: http://IP_ADDRESS private_service_name: "projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE" result: res - ret: return: ${res}
JSON
{ "main": { "steps": [ { "checkHttp": { "call": "http.get", "args": { "url": "http://IP_ADDRESS", "private_service_name": "projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE" }, "result": "res" } }, { "ret": { "return": "${res}" } } ] } }
La valeur
private_service_name
doit être une chaîne spécifiant un dans le nom de service enregistré de l'Annuaire des services le format suivant:projects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME
Déployez le workflow. À des fins de test, vous pouvez joindre le Compute Engine par défaut au workflow pour représenter son identité:
gcloud workflows deploy call-private-endpoint \ --source=call-private-endpoint.JSON_OR_YAML \ --location=REGION \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Exécutez le workflow :
gcloud workflows run call-private-endpoint \ --location=REGION
Un résultat semblable aux lignes suivantes doit s'afficher:
argument: 'null' duration: 0.650784403s endTime: '2023-06-09T18:19:52.570690079Z' name: projects/968807934019/locations/us-central1/workflows/call-private-endpoint/executions/4aac88d3-0b54-419b-b364-b6eb973cc932 result: '{"body":"Hello, world!","code":200,"headers":{"Connection":"keep-alive","Content-Length":"21","Content-Type":"text/html; charset=utf-8","Date":"Fri, 09 Jun 2023 18:19:52 GMT","Etag":"W/\"15-NFaeBgdti+9S7zm5kAdSuGJQm6Q\"","Keep-Alive":"timeout=5","X-Powered-By":"Express"}}' startTime: '2023-06-09T18:19:51.919905676Z' state: SUCCEEDED
Étape suivante
- En savoir plus sur Private Service Connect
- Configurez un périmètre de service à l'aide de VPC Service Controls.
- Appelez un point de terminaison privé sur site, Compute Engine, GKE ou tout autre point de terminaison en activant IAP.