Créer une règle applicable aux invités

Utilisez des règles d'invité pour maintenir la cohérence des configurations logicielles entre les instances de VM.

Pour configurer une règle d'invité sur un ensemble de VM, procédez comme suit :

  1. Attribuez les autorisations requises aux utilisateurs.
  2. Configurez votre VM.
  3. Configurez le fichier JSON ou YAML de la règle d'invité.
  4. Créez la règle d'invité.

Avant de commencer

Systèmes d'exploitation compatibles

  • Debian 9 et 10
  • Ubuntu 16.04 et 18.04+
  • CentOS 6, 7 et 8
  • Red Hat Enterprise Linux (RHEL) 6, 7 et 8
  • Windows Server 2012R2, 2016, 2019 et versions semestrielles 1803, 1809 et 1903
  • SUSE Enterprise Linux Server (SLES) 12 et 15, OpenSUSE Leap 15

Limites

  • Toutes les instances ciblées par une règle d'invité sont mises à jour chaque fois que l'agent fait appel au service. Cette vérification a lieu toutes les 10 à 15 minutes.
  • Aucun service de tableau de bord de conformité, de notification ni d'alerte n'est disponible avec cette version bêta. Les VM qui n'exécutent pas l'agent OS Config ne signalent pas d'échec. Pour de meilleurs résultats, utilisez cette fonctionnalité avec le service OS Inventory Management ou tout autre outil de surveillance de la conformité.

Autorisations

Comme vous pouvez utiliser des règles d'invité pour installer et gérer des packages logiciels sur une VM, la création et la gestion des règles d'invité reviennent à accorder l'accès à l'exécution de code à distance sur une VM.

Lorsque vous utilisez des règles d'invité, l'accès est contrôlé à l'aide des autorisations IAM et consigné dans un journal d'audit. Cependant, la possibilité d'exécuter du code sur la VM reste une option et peut présenter un risque de sécurité potentiel. Pour éviter ce problème, nous vous recommandons de ne fournir que l'accès requis à chaque utilisateur.

Les propriétaires d'un projet disposent d'un accès complet pour créer et gérer des règles. Pour tous les autres utilisateurs, vous devez accorder des autorisations. Vous pouvez attribuer l'un des rôles suivants :

  • Administrateur GuestPolicy (roles/osconfig.guestPolicyAdmin). Contient les autorisations permettant de créer, supprimer, mettre à jour, obtenir et répertorier les règles d'invité.
  • Éditeur GuestPolicy (roles/osconfig.guestPolicyEditor). Contient les autorisations permettant d'obtenir, de mettre à jour et de répertorier les règles d'invité.
  • Lecteur GuestPolicy (roles/osconfig.guestPolicyViewer). Contient des autorisations d'accès en lecture seule pour obtenir et répertorier les règles d'invité.

Par exemple, pour accorder à un administrateur des utilisateurs un accès aux règles d'invité, exécutez la commande suivante :

gcloud projects add-iam-policy-binding project-id \
    --member user:user-id@gmail.com \
    --role roles/osconfig.guestPolicyAdmin

Remplacez les éléments suivants :

  • project-id : ID du projet.
  • user-id : nom d'utilisateur G Suite de l'utilisateur.

Configurer la VM

Pour utiliser le service OS Configuration Management, vous devez configurer l'API du service OS Config et installer l'agent OS Config. Pour obtenir des instructions détaillées, consultez la page Configurer OS Config.

Configurer un fichier YAML ou JSON de règle d'invité

Vous devez fournir des spécifications de règle d'invité à l'aide d'un fichier JSON ou YAML. Pour afficher des exemples de configurations, consultez les exemples de fichiers YAML de règle d'invité.

Le fichier YAML ou JSON contient les deux sections principales suivantes :

Attributions

Vous pouvez attribuer des règles d'invité à toutes les instances de VM de votre projet ou utiliser la clé assignment de votre fichier JSON ou YAML pour cibler un groupe spécifique de VM.

Par exemple, vous pouvez cibler un groupe de VM en utilisant l'une des caractéristiques suivantes :

  • Nom de l'instance. Voir l'exemple 1.
  • Préfixe du nom de l'instance. Voir l'exemple 2.
  • Libellé de l'instance. Voir l'exemple 3.
  • Zone. Voir l'exemple 4.
  • Informations sur le système d'exploitation, contenant le nom, la version et l'architecture du système d'exploitation. Voir l'exemple 5. La commande os-inventer describe peut être utilisée pour déterminer le nom et la version du système d'exploitation, ainsi que l'architecture des VM.

Pour attribuer une règle d'invité à l'aide des informations du système d'exploitation, l'agent de configuration du système d'exploitation doit envoyer les informations du système d'exploitation au point de terminaison des attributs d'invité de la VM. Par défaut, les informations sur le système d'exploitation des VM ne sont pas disponibles pour garantir la confidentialité. Pour regrouper les données par système d'exploitation, vous devez vous assurer que les attributs d'invité et les services OS Inventory Management sont activés. Pour activer ces services, consultez la section Configurer votre VM.

Les configurations des règles d'invité sont automatiquement appliquées à toutes les nouvelles VM correspondant à l'attribution.

Configuration requise

La configuration requise peut être effectuée à l'aide de l'une ou de plusieurs des tâches suivantes :

  • Installer, supprimer et mettre à jour automatiquement des packages logiciels. Voir l'exemple 1.
  • Configurer des dépôts de packages logiciels. Voir l'exemple 1 ou l'exemple 3.
  • Installer des logiciels à l'aide de recettes logicielles. Voir l'exemple 4 ou l'exemple 5.

Exemples de fichiers YAML de règle d'invité

Exemple 1

Installez un package my-package qui doit être tenu à jour sur les instances de VM suivantes : my-instance-1 et my-instance-2.

assignment:
  instances:
  - zones/us-east1-c/instances/my-instance-1
  - zones/us-east1-c/instances/my-instance-2
packages:
- name: "my-package"
  desiredState: UPDATED

Pour en savoir plus sur l'attribution de règles d'invité pour les packages, consultez la documentation de référence sur la représentation JSON du package.

Exemple 2

Installez l'agent Cloud Monitoring, à l'aide du gestionnaire de packages yum, sur toutes les instances de VM portant l'un des préfixes de nom d'instance suivants : test-instance- ou dev-instance-.

assignment:
  instanceNamePrefixes:
  - "test-instance-"
  - "dev-instance-"
packages:
- name: "stackdriver-agent"
  desiredState: INSTALLED
  manager: YUM
packageRepositories:
- yum:
    id: google-cloud-monitoring
    displayName: "Google Cloud Monitoring Agent Repository"
    baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el7-x86_64-all
    gpgKeys:
    - https://packages.cloud.google.com/yum/doc/yum-key.gpg
    - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

Pour en savoir plus sur l'attribution de règles d'invité pour les dépôts de package, consultez la documentation de référence sur la représentation JSON de PackageRepository.

Exemple 3

Installez my-package et supprimez bad-package-1 et bad-package-2 des instances avec un ensemble spécifique de libellés. Ajoutez également des dépôts pour les gestionnaires de packages apt et yum.

assignment:
  # Assign to VM instances where `(label.color=red AND label.env=test) OR (label.color=blue AND label.env=test)`
  groupLabels:
  - labels:
      color: red
      env: test
  - labels:
      color: blue
      env: test
packages:
- name: "my-package"
  desiredState: INSTALLED
- name: "bad-package-1"
  desiredState: REMOVED
- name: "bad-package-2"
  desiredState: REMOVED
  manager: APT  # Only apply this to systems with APT.
packageRepositories:
- apt:  # Only apply this to systems with APT.
    uri: "https://packages.cloud.google.com/apt"
    archiveType: DEB
    distribution: cloud-sdk-stretch
    components:
    - main
- yum:  # Only apply this to systems with YUM.
    id: google-cloud-sdk
    displayName: "Google Cloud SDK"
    baseUrl: https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64
    gpgKeys:
    - https://packages.cloud.google.com/yum/doc/yum-key.gpg
    - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

Exemple 4

Installez le logiciel d'un fichier MSI hébergé sur Cloud Storage sur toutes les instances de us-east1-b et us-east1-d.

assignment:
  zones:
  - us-east1-b
  - us-east1-d
recipes:
- name: "swr-msi-gcs"
  desiredState: INSTALLED
  artifacts:
  - id: "the-msi"
    gcs:
      bucket: "my-bucket"
      object: "executable.msi"  # full URI gs://my-bucket/executable.msi#nnnnn
      generation: 1546030865175603
  installSteps:
  - msiInstallation:

Pour en savoir plus sur la configuration des règles de recettes, consultez la documentation de référence sur la représentation JSON de SoftwareRecipe.

Exemple 5

Installez un logiciel en exécutant un script intégré sur toutes les instances de VM qui répondent aux exigences suivantes :

  • Système d'exploitation : Red Hat Enterprise Linux 7
  • Libellé : color=red
assignment:
  osTypes:
  - osShortName: rhel
    osVersion: "7"
  groupLabels:
  - labels:
      color: red
recipes:
- name: recipe-runscript
  desiredState: INSTALLED
  installSteps:
  - scriptRun:
      script: |-
        #!/bin/bash
        touch /TOUCH_FILE

Pour en savoir plus sur la configuration des règles de recettes, consultez la documentation de référence sur la représentation JSON de SoftwareRecipe.

Créer une règle applicable aux invités

Vous pouvez créer une règle d'invité à l'aide de l'outil de ligne de commande gcloud ou de l'API Cloud OS Config.

Lorsque vous créez une règle d'invité, son nom doit répondre aux exigences de dénomination suivantes :

  • Le nom ne doit contenir que des lettres minuscules, des chiffres et des traits d'union.
  • Le nom doit commencer par une lettre.
  • Le nom doit se terminer par un chiffre ou une lettre.
  • Le nom doit comporter entre 1 et 63 caractères.
  • Chaque ID de règle doit être unique dans un projet.

Dans l'outil de ligne de commande gcloud et l'API Cloud OS Config, le nom de la règle d'invité est policy-id.

gcloud

Utilisez la commande os-config guest-policies create pour créer une règle d'invité.

gcloud beta compute os-config guest-policies create policy-id \
    --file=file

Remplacez les éléments suivants :

  • policy-id : nom de la règle d'invité que vous souhaitez créer.
  • file : fichier JSON ou YAML contenant les spécifications de la règle d'invité. Pour afficher des exemples de configurations, consultez les exemples de fichiers YAML de règle d'invité.

API

Dans l'API, envoyez une requête POST à la méthode projects.guestPolicies.create.

POST https://osconfig.googleapis.com/v1beta/projects/project-id/guestPolicies?guestPolicyId=policy-id

{
 For more information, see Guest policy JSON
}

Remplacez les éléments suivants :

  • project-id : ID de votre projet.
  • policy-id : nom de votre règle d'invité.

Pour afficher des exemples de configurations, consultez les exemples de fichiers YAML de règle d'invité.

Étapes suivantes