Restaurer une version précédente d'une stratégie d'autorisation IAM

Cette page explique comment restaurer une version précédente d'une stratégie d'autorisation IAM après avoir apporté des modifications par inadvertance ou l'avoir supprimée accidentellement.

Pour restaurer une stratégie IAM précédente, recherchez la dernière setIamPolicy réussie avant la modification ou la suppression, puis utilisez-la pour restaurer la stratégie.

Vous pouvez également utiliser l'inventaire des éléments cloud pour trouver l'historique des modifications IAM et l'utiliser pour restaurer la stratégie.

Rôles requis

Pour obtenir les autorisations nécessaires pour restaurer une ancienne règle d'autorisation, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet, le dossier ou l'organisation :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Lorsque vous restaurez des stratégies d'autorisation avec setIamPolicy, le rôle d'administrateur de l'organisation est nécessaire pour les stratégies d'autorisation au niveau de l'organisation et du dossier, et le rôle de propriétaire est nécessaire pour les stratégies d'autorisation au niveau du projet.

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Restaurer une stratégie d'autorisation avec la dernière instance setIamPolicy réussie

Pour restaurer une version précédente d'une stratégie d'autorisation, vous pouvez consulter vos journaux d'audit pour trouver la dernière instance réussie de setIamPolicy avant la modification ou la suppression, puis utiliser les informations de cette instance pour restaurer la stratégie. Ce processus comprend les étapes suivantes :

  1. Identifiez la dernière instance setIamPolicy réussie pour la règle d'autorisation et récupérez le insertId.
  2. Utilisez insertId à partir de la requête setIamPolicy pour exporter la stratégie d'autorisation au format YAML ou JSON.
  3. Modifiez le fichier de sortie pour qu'il corresponde à la stratégie d'autorisation fonctionnelle précédente et remplacez la stratégie d'autorisation actuelle.

Identifiez la dernière instance réussie de setIamPolicy et récupérez le insertId.

Pour identifier la dernière instance réussie de setIamPolicy et récupérer le isertId, utilisez la console Google Cloud ou la gcloud CLI pour examiner vos journaux d'audit.

Console

  1. Dans la console Google Cloud , accédez à la page Explorateur de journaux.

    Accéder à l'explorateur de journaux

  2. Dans l'éditeur de requête, saisissez l'une des requêtes suivantes. Ces requêtes recherchent dans vos journaux d'audit les entrées qui contiennent SetIamPolicy dans le champ methodName de protoPayload :

    • Pour obtenir les journaux de toutes les modifications apportées à la stratégie d'autorisation d'une ressource, utilisez la requête suivante :

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      
    • Pour obtenir les journaux des modifications apportées aux stratégies d'autorisation impliquant un utilisateur ou un compte de service spécifique, utilisez la requête suivante :

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      protoPayload.serviceData.policyDelta.bindingDeltas.member:"EMAIL_ADDRESS"
      

      Remplacez les éléments suivants :

      • RESOURCE_TYPE : type de ressource pour lequel vous souhaitez répertorier les journaux d'audit. Les valeurs valides sont projects, folders ou organizations.
      • RESOURCE_ID : ID de votre projet Google Cloud , dossier ou organisation. Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
      • EMAIL_ADDRESS : adresse e-mail de l'utilisateur ou du compte de service, par exemple example-service-account@example-project.iam.gserviceaccount.com.
  3. Pour exécuter la requête, cliquez sur Exécuter la requête.

  4. Utilisez le sélecteur Période pour spécifier la période appropriée pour la requête. Vous pouvez également ajouter une expression de code temporel directement à l'éditeur de requête. Pour en savoir plus, consultez Afficher les journaux par plage de dates.

  5. Copiez le insertId de la dernière instance réussie de setIamPolicy avant la modification ou la suppression.

gcloud

La commande gcloud logging read permet de lire les entrées de journal.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • RESOURCE_TYPE : type de ressource pour lequel vous souhaitez répertorier les journaux d'audit. Utilisez la valeur projects, folders ou organizations.
  • RESOURCE_ID : ID de votre projet Google Cloud, de votre organisation ou de votre dossier. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • TIME_PERIOD : période pour laquelle vous souhaitez répertorier les journaux d'audit. Les entrées renvoyées ne sont pas antérieures à cette valeur. Si elle n'est pas spécifiée, la valeur par défaut est 1d. Pour en savoir plus sur les formats de date et d'heure, consultez la section gcloud topic datetimes.
  • RESOURCE_TYPE_SINGULAR : type de ressource pour lequel vous souhaitez répertorier les journaux d'audit. Utilisez la valeur project, folder ou organization.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud logging read \
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' \
    --freshness=TIME_PERIOD \
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

Windows (PowerShell)

gcloud logging read `
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' `
    --freshness=TIME_PERIOD `
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

Windows (cmd.exe)

gcloud logging read ^
    'logName:RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity
    AND protoPayload.methodName=SetIamPolicy' ^
    --freshness=TIME_PERIOD ^
    --RESOURCE_TYPE_SINGULAR=RESOURCE_ID

Copiez le insertId de la dernière instance réussie de setIamPolicy avant la modification ou la suppression.

Utilisez insertId pour exporter la stratégie d'autorisation.

Utilisez le insertId que vous avez récupéré lors de la dernière instance réussie de setIamPolicy pour exécuter la commande suivante dans gcloud CLI afin d'exporter la stratégie d'autorisation au format JSON ou YAML. Vous pouvez exporter les stratégies d'autorisation pour les organisations et les projets.

Niveau Organisation

La commande gcloud logging read permet de lire les entrées de journal.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • ORGANIZATION_ID : organisation pour laquelle vous souhaitez afficher et exporter la stratégie d'autorisation.
  • INSERT_ID : insertId de la requête setIamPolicy.
  • FORMAT : format de la réponse. Utilisez json ou yaml.
  • TIME_PERIOD : période pour laquelle vous souhaitez répertorier les journaux d'audit. Les entrées renvoyées ne sont pas antérieures à cette valeur. Si elle n'est pas spécifiée, la valeur par défaut est 1d. Pour en savoir plus sur les formats de date et d'heure, consultez la section gcloud topic datetimes.
  • OUTPUT_FILE : nom de fichier et extension de la sortie. Par exemple, previous_policy.json ou previous_policy.yaml.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

Windows (PowerShell)

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

Windows (cmd.exe)

gcloud logging read organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com
insertId="INSERT_ID"'
--organization=ORGANIZATION_ID
--format="FORMAT(protoPayload.request.policy)"
--freshness=TIME_PERIOD > OUTPUT_FILE

Niveau Projet

La commande gcloud logging read permet de lire les entrées de journal.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • INSERT_ID : insertId de la requête setIamPolicy.
  • TIME_PERIOD : période pour laquelle vous souhaitez répertorier les journaux d'audit. Les entrées renvoyées ne sont pas antérieures à cette valeur. Si elle n'est pas spécifiée, la valeur par défaut est 1d. Pour en savoir plus sur les formats de date et d'heure, consultez la section gcloud topic datetimes.
  • FORMAT : format de la réponse. Utilisez json ou yaml.
  • OUTPUT_FILE : nom du fichier dans lequel vous souhaitez enregistrer la sortie (par exemple, previous_policy.json ou previous_policy.yaml).

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud logging read \
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' \
--freshness=TIME_PERIOD \
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

Windows (PowerShell)

gcloud logging read `
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' `
--freshness=TIME_PERIOD `
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

Windows (cmd.exe)

gcloud logging read ^
'protoPayload.methodName="SetIamPolicy" AND insertId="INSERT_ID"' ^
--freshness=TIME_PERIOD ^
--format="FORMAT(protoPayload.request.policy)" > OUTPUT_FILE

Modifier le fichier de sortie et remplacer la stratégie d'autorisation actuelle

Modifiez le fichier de sortie comme suit et remplacez la stratégie d'autorisation actuelle.

  1. Modifiez le fichier de sortie de manière programmatique ou à l'aide d'un éditeur de texte en supprimant les lignes suivantes :

     ---
     protoPayload:
        request:
          policy:
    

    Le fichier obtenu commence par auditConfigs:.

  2. Obtenez la stratégie d'autorisation actuelle.

    gcloud

    La commande gcloud get-iam-policy permet d'obtenir la stratégie d'autorisation d'un projet, d'un dossier ou d'une organisation.

    Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

    • RESOURCE_TYPE : type de la ressource pour laquelle vous souhaitez obtenir la stratégie d'autorisation. Les valeurs valides sont projects, resource-manager folders ou organizations.

    • RESOURCE_ID : ID de votre projet Google Cloud , dossier ou organisation. Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossier et d'organisation sont des valeurs numériques, telles que 123456789012.

    • FORMAT : format souhaité pour la stratégie d'autorisation. Utilisez json ou yaml.

    • PATH : le chemin d'accès à un nouveau fichier de sortie pour la stratégie d'autorisation.

    Exécutez la commande suivante :

    Linux, macOS ou Cloud Shell

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Windows (PowerShell)

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Windows (cmd.exe)

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Par exemple, la commande suivante récupère la stratégie d'autorisation du projet my-project et l'enregistre dans votre répertoire d'accueil au format JSON :

    gcloud projects get-iam-policy my-project --format json > ~/policy.json

    C#

    Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

    Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

    L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy GetPolicy(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
                projectId).Execute();
            return policy;
        }
    }
    

    Java

    Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

    Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

    L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.GetIamPolicyRequest;
    import com.google.iam.v1.Policy;
    import java.io.IOException;
    
    public class GetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
    
        getProjectPolicy(projectId);
      }
    
      // Gets a project's policy.
      public static Policy getProjectPolicy(String projectId) throws IOException {
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .build();
          return projectsClient.getIamPolicy(request);
        }
      }
    }

    Python

    Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

    Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

    L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def get_project_policy(project_id: str) -> policy_pb2.Policy:
        """Get policy for project.
    
        project_id: ID or number of the Google Cloud project you want to use.
        """
    
        client = resourcemanager_v3.ProjectsClient()
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        policy = client.get_iam_policy(request)
        print(f"Policy retrieved: {policy}")
    
        return policy

    REST

    La méthode get-iam-policy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation d'un projet, d'un dossier ou d'une organisation.

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • API_VERSION : version de l'API à utiliser. Pour les projets et les organisations, utilisez v1. Pour les dossiers, utilisez v2.
    • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeur projects, folders ou organizations.
    • RESOURCE_ID : ID de votre projet Google Cloud, de votre organisation ou de votre dossier. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
    • POLICY_VERSION : version de la stratégie à renvoyer. Les requêtes doivent spécifier la version de stratégie la plus récente, qui est la version 3. Pour plus d'informations, consultez la section Spécifier une version de stratégie lors de l'obtention d'une stratégie.

    Méthode HTTP et URL :

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

    Corps JSON de la requête :

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    La réponse contient la stratégie d'autorisation de la ressource. Par exemple :

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }
    

    Enregistrez la réponse dans un fichier du type approprié (json ou yaml).

  3. Copiez la valeur etag de la stratégie d'autorisation actuelle.

  4. Remplacez la valeur etag dans le fichier de sortie par la valeur etag que vous avez copiée à partir de la stratégie d'autorisation actuelle. Le etag du fichier de résultat doit correspondre au etag actuel pour lancer une nouvelle requête setIamPolicy. Assurez-vous que l'espacement de l'etag n'a pas changé dans le fichier de sortie.

  5. Examinez le fichier pour vous assurer qu'il correspond à la stratégie d'autorisation fonctionnelle précédente. Vous pouvez envisager de créer un projet et d'y appliquer la règle pour vous assurer qu'elle fonctionne comme prévu.

  6. Définissez la stratégie d'autorisation pour remplacer la stratégie d'autorisation actuelle par celle du fichier de sortie que vous avez créé.

    gcloud

    La commande gcloud set-iam-policy définit la stratégie de la requête comme nouvelle stratégie d'autorisation pour le projet, le dossier ou l'organisation.

    Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

    • RESOURCE_TYPE : type de la ressource pour laquelle vous souhaitez définir la stratégie d'autorisation. Les valeurs valides sont projects, resource-manager folders ou organizations.

    • RESOURCE_ID : ID de votre projet Google Cloud , dossier ou organisation. Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossier et d'organisation sont des valeurs numériques, telles que 123456789012.

    • PATH : le chemin d'accès à un fichier contenant la nouvelle stratégie d'autorisation.

    Exécutez la commande suivante :

    Linux, macOS ou Cloud Shell

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Windows (PowerShell)

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Windows (cmd.exe)

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    La réponse contient la stratégie d'autorisation mise à jour.

    Par exemple, la commande suivante définit la stratégie d'autorisation stockée dans policy.json en tant que stratégie d'autorisation pour le projet my-project :

    gcloud projects set-iam-policy my-project ~/policy.json

    C#

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy SetPolicy(string projectId, Policy policy)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            return service.Projects.SetIamPolicy(new SetIamPolicyRequest
            {
                Policy = policy
            }, projectId).Execute();
        }
    }
    

    Java

    Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

    Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

    L'exemple suivant montre comment définir la stratégie d'autorisation pour un projet. Pour savoir comment définir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.Policy;
    import com.google.iam.v1.SetIamPolicyRequest;
    import com.google.protobuf.FieldMask;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    
    public class SetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
        // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
        Policy policy = Policy.newBuilder().build();
    
        setProjectPolicy(policy, projectId);
      }
    
      // Sets a project's policy.
      public static Policy setProjectPolicy(Policy policy, String projectId)
              throws IOException {
    
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          List<String> paths = Arrays.asList("bindings", "etag");
          SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .setPolicy(policy)
                  // A FieldMask specifying which fields of the policy to modify. Only
                  // the fields in the mask will be modified. If no mask is provided, the
                  // following default mask is used:
                  // `paths: "bindings, etag"`
                  .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
                  .build();
    
          return projectsClient.setIamPolicy(request);
        }
      }
    }

    Python

    Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

    Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

    L'exemple suivant montre comment définir la stratégie d'autorisation pour un projet. Pour savoir comment définir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def set_project_policy(
        project_id: str, policy: policy_pb2.Policy, merge: bool = True
    ) -> policy_pb2.Policy:
        """
        Set policy for project. Pay attention that previous state will be completely rewritten.
        If you want to update only part of the policy follow the approach read->modify->write.
        For more details about policies check out https://cloud.google.com/iam/docs/policies
    
        project_id: ID or number of the Google Cloud project you want to use.
        policy: Policy which has to be set.
        merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
        when MergeFrom is replacing only immutable fields and extending mutable.
        https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
        """
        client = resourcemanager_v3.ProjectsClient()
    
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
        current_policy = client.get_iam_policy(request)
    
        # Etag should as fresh as possible to lower chance of collisions
        policy.ClearField("etag")
        if merge:
            current_policy.MergeFrom(policy)
        else:
            current_policy.CopyFrom(policy)
    
        request = iam_policy_pb2.SetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        # request.etag field also will be merged which means you are secured from collision,
        # but it means that request may fail and you need to leverage exponential retries approach
        # to be sure policy has been updated.
        request.policy.CopyFrom(current_policy)
    
        policy = client.set_iam_policy(request)
        return policy
    
    

    REST

    La méthode set-iam-policy de l'API Resource Manager définit la stratégie de la requête comme nouvelle stratégie d'autorisation pour le projet, le dossier ou l'organisation.

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • API_VERSION : version de l'API à utiliser. Pour les projets et les organisations, utilisez v1. Pour les dossiers, utilisez v2.
    • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeur projects, folders ou organizations.
    • RESOURCE_ID : ID de votre projet Google Cloud, de votre organisation ou de votre dossier. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
    • POLICY : représentation JSON de la stratégie que vous souhaitez définir. Pour en savoir plus sur le format d'une stratégie, consultez la documentation de référence sur les stratégies.

    Méthode HTTP et URL :

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

    Corps JSON de la requête :

    {
      "policy": POLICY
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    La réponse contient la stratégie d'autorisation mise à jour.

Restaurer une stratégie d'autorisation avec l'inventaire des éléments cloud

Pour restaurer une version précédente d'une stratégie d'autorisation, vous pouvez utiliser inventaire des éléments cloud pour afficher l'historique des modifications des stratégies d'autorisation de la ressource et utiliser ces informations pour restaurer la stratégie. Ce processus comprend les étapes suivantes :

  1. Utilisez l'inventaire des éléments cloud pour consulter l'historique des modifications des stratégies d'autorisation et identifier celle que vous souhaitez restaurer.
  2. Copiez la stratégie d'autorisation et créez un fichier au format JSON.
  3. Remplacez la stratégie d'autorisation actuelle par celle du nouveau fichier.

Examiner l'historique des modifications des stratégies d'autorisation avec inventaire des éléments cloud

Console

  1. Dans la console Google Cloud , accédez à la page Inventaire des éléments.

    Accéder à l'inventaire des éléments

  2. Cliquez sur l'onglet Stratégie IAM.

  3. Exécutez la requête suivante dans le champ Filtre :

    Resource : RESOURCE_ID

    Remplacez RESOURCE_ID par l'ID de votre Google Cloud projet, dossier ou organisation. Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.

  4. Pour afficher l'historique des modifications de la règle d'autorisation de la ressource, cliquez sur le nom de la ressource, puis sélectionnez l'onglet Historique des modifications.

  5. Pour comparer les modifications apportées à la règle d'autorisation de la ressource, sélectionnez deux enregistrements différents avec un code temporel dans le menu Sélectionnez un enregistrement à comparer.

gcloud

La commande gcloud asset get-history permet d'obtenir l'historique mis à jour des stratégies d'autorisation sur un élément qui chevauche une période.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • RESOURCE_TYPE : type de ressource pour lequel vous souhaitez répertorier les journaux d'audit. Utilisez la valeur project, folder ou organization.
  • RESOURCE_ID : ID de votre projet Google Cloud, de votre organisation ou de votre dossier. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • ASSET_NAME : liste de noms de ressources mis en forme, séparés par une virgule, pour les ressources dont vous souhaitez afficher l'historique des stratégies d'autorisation. Exemple : //cloudresourcemanager.googleapis.com/projects/my-project Ces ressources peuvent être n'importe quel type de ressource acceptant les stratégies d'autorisation.
  • START_TIME : début de la période. 7 jours au maximum. La valeur doit être l'heure actuelle ou une heure passée (35 jours maximum). Pour en savoir plus sur les formats de date et d'heure, consultez la section gcloud topic datetimes.
  • END_TIME : facultatif. Point de fin de la période. 7 jours au maximum. La valeur doit être l'heure actuelle ou une heure passée (35 jours maximum). Si aucune heure de fin n'est spécifiée, l'heure actuelle est utilisée. Pour en savoir plus sur les formats de date et d'heure, consultez la section gcloud topic datetimes.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud asset get-history \
    --RESOURCE_TYPE=RESOURCE_ID \
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --content-type=iam-policy \
    --start-time=START_TIME \
    --end-time=END_TIME

Windows (PowerShell)

gcloud asset get-history `
    --RESOURCE_TYPE=RESOURCE_ID `
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... `
    --content-type=iam-policy `
    --start-time=START_TIME `
    --end-time=END_TIME

Windows (cmd.exe)

gcloud asset get-history ^
    --RESOURCE_TYPE=RESOURCE_ID ^
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... ^
    --content-type=iam-policy ^
    --start-time=START_TIME ^
    --end-time=END_TIME

La réponse contient l'historique mis à jour des stratégies d'autorisation.

Créer un fichier de règles d'autorisation

Après avoir examiné l'historique des stratégies d'autorisation et identifié celle que vous souhaitez restaurer, procédez comme suit.

  1. Copiez la stratégie d'autorisation que vous souhaitez restaurer, en commençant par la ligne "bindings" et en terminant par la ligne "etag".

  2. Collez la règle d'autorisation que vous avez copiée dans un nouveau fichier, puis placez-la entre accolades ({}). Par exemple, la stratégie d'autorisation peut se présenter comme suit :

     {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
     }
    
  3. Enregistrez le fichier au format JSON. Par exemple, vous pouvez nommer le nouveau fichier previous_iam_policy.json.

Définir la nouvelle stratégie d'autorisation

Définissez la stratégie d'autorisation pour remplacer la stratégie d'autorisation actuelle par celle du fichier de sortie que vous avez créé.

gcloud

La commande gcloud set-iam-policy définit la stratégie de la requête comme nouvelle stratégie d'autorisation pour le projet, le dossier ou l'organisation.

Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

  • RESOURCE_TYPE : type de la ressource pour laquelle vous souhaitez définir la stratégie d'autorisation. Les valeurs valides sont projects, resource-manager folders ou organizations.

  • RESOURCE_ID : ID de votre projet Google Cloud , dossier ou organisation. Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossier et d'organisation sont des valeurs numériques, telles que 123456789012.

  • PATH : le chemin d'accès à un fichier contenant la nouvelle stratégie d'autorisation.

Exécutez la commande suivante :

Linux, macOS ou Cloud Shell

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Windows (PowerShell)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Windows (cmd.exe)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

La réponse contient la stratégie d'autorisation mise à jour.

Par exemple, la commande suivante définit la stratégie d'autorisation stockée dans policy.json en tant que stratégie d'autorisation pour le projet my-project :

gcloud projects set-iam-policy my-project ~/policy.json

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Java

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

L'exemple suivant montre comment définir la stratégie d'autorisation pour un projet. Pour savoir comment définir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetProjectPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setProjectPolicy(policy, projectId);
  }

  // Sets a project's policy.
  public static Policy setProjectPolicy(Policy policy, String projectId)
          throws IOException {

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (ProjectsClient projectsClient = ProjectsClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return projectsClient.setIamPolicy(request);
    }
  }
}

Python

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

L'exemple suivant montre comment définir la stratégie d'autorisation pour un projet. Pour savoir comment définir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_project_policy(
    project_id: str, policy: policy_pb2.Policy, merge: bool = True
) -> policy_pb2.Policy:
    """
    Set policy for project. Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach read->modify->write.
    For more details about policies check out https://cloud.google.com/iam/docs/policies

    project_id: ID or number of the Google Cloud project you want to use.
    policy: Policy which has to be set.
    merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
    when MergeFrom is replacing only immutable fields and extending mutable.
    https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
    """
    client = resourcemanager_v3.ProjectsClient()

    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"
    current_policy = client.get_iam_policy(request)

    # Etag should as fresh as possible to lower chance of collisions
    policy.ClearField("etag")
    if merge:
        current_policy.MergeFrom(policy)
    else:
        current_policy.CopyFrom(policy)

    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    # request.etag field also will be merged which means you are secured from collision,
    # but it means that request may fail and you need to leverage exponential retries approach
    # to be sure policy has been updated.
    request.policy.CopyFrom(current_policy)

    policy = client.set_iam_policy(request)
    return policy

REST

La méthode set-iam-policy de l'API Resource Manager définit la stratégie de la requête comme nouvelle stratégie d'autorisation pour le projet, le dossier ou l'organisation.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • API_VERSION : version de l'API à utiliser. Pour les projets et les organisations, utilisez v1. Pour les dossiers, utilisez v2.
  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeur projects, folders ou organizations.
  • RESOURCE_ID : ID de votre projet Google Cloud, de votre organisation ou de votre dossier. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • POLICY : représentation JSON de la stratégie que vous souhaitez définir. Pour en savoir plus sur le format d'une stratégie, consultez la documentation de référence sur les stratégies.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

Corps JSON de la requête :

{
  "policy": POLICY
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la stratégie d'autorisation mise à jour.