Ripristinare una versione precedente di una policy di autorizzazione IAM

Questa pagina spiega come ripristinare una versione precedente di una policy di autorizzazione IAM dopo aver apportato modifiche involontarie o eliminazioni accidentali.

Per ripristinare una policy IAM precedente, trova l'ultima setIamPolicy riuscita prima della modifica o dell'eliminazione e utilizzala per ripristinare la policy.

Puoi anche utilizzare Cloud Asset Inventory per trovare la cronologia delle modifiche IAM e utilizzarla per ripristinare il criterio.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per ripristinare una precedente policy di autorizzazione, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto, nella cartella o nell'organizzazione:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Quando ripristini le policy di autorizzazione con setIamPolicy, il ruolo Amministratore dell'organizzazione è necessario per le policy di autorizzazione a livello di organizzazione e cartella, mentre il ruolo Proprietario è necessario per le policy di autorizzazione a livello di progetto.

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Ripristina una policy di autorizzazione con l'ultima istanza setIamPolicy riuscita

Per ripristinare una policy di autorizzazione a una versione precedente, puoi esaminare i log di controllo dell'ultima istanza riuscita di setIamPolicy prima della modifica o dell'eliminazione e utilizzare le informazioni di quell'istanza per ripristinare la policy. Questo processo prevede i seguenti passaggi:

  1. Identifica l'ultima istanza setIamPolicy riuscita per la policy di autorizzazione e recupera insertId.
  2. Utilizza insertId dalla richiesta setIamPolicy per esportare la policy di autorizzazione in formato YAML o JSON.
  3. Modifica il file di output in modo che corrisponda alla precedente policy di autorizzazione funzionante e sovrascrivi la policy di autorizzazione attuale.

Identifica l'ultima istanza riuscita di setIamPolicy e recupera insertId

Per identificare l'ultima istanza riuscita di setIamPolicy e recuperare il isertId, utilizza la console Google Cloud o gcloud CLI per esaminare i log di controllo.

Console

  1. Nella console Google Cloud , vai alla pagina Esplora log.

    Vai a Esplora log

  2. Nell'editor di query, inserisci una delle seguenti query. Queste query cercano nei tuoi audit log le voci che contengono SetIamPolicy nel campo methodName di protoPayload:

    • Per ottenere i log di tutte le modifiche alla policy di autorizzazione apportate a una risorsa, utilizza la seguente query:

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      
    • Per ottenere i log delle modifiche ai criteri di autorizzazione che coinvolgono un utente o un account di servizio specifico, utilizza la seguente query:

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

      Sostituisci quanto segue:

      • RESOURCE_TYPE: il tipo di risorsa per cui stai elencando gli audit log. I valori validi sono projects, folders o organizations.
      • RESOURCE_ID: l'ID progetto, cartella o organizzazione Google Cloud . Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
      • EMAIL_ADDRESS: l'indirizzo email dell'utente o delaccount di serviziot, ad esempio example-service-account@example-project.iam.gserviceaccount.com.
  3. Per eseguire la query, fai clic su Esegui query.

  4. Utilizza il selettore Sequenza temporale per specificare l'intervallo di tempo appropriato per la query. In alternativa, puoi aggiungere un'espressione timestamp direttamente all'editor di query. Per saperne di più, vedi Visualizzare i log per intervallo di tempo.

  5. Copia insertId dall'ultima istanza riuscita di setIamPolicy prima della modifica o dell'eliminazione.

gcloud

Il comando gcloud logging read legge le voci di log.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • RESOURCE_TYPE: Il tipo di risorsa per cui stai elencando i log di controllo. Utilizza il valore projects, folders o organizations.
  • RESOURCE_ID: l'ID Google Cloud del progetto, dell'organizzazione o della cartella. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • TIME_PERIOD: il periodo di tempo per cui stai elencando i log di controllo. Le voci restituite non sono precedenti a questo valore. Se non specificato, il valore predefinito è 1d. Per informazioni sui formati di ora, consulta gcloud topic datetimes.
  • RESOURCE_TYPE_SINGULAR: Il tipo di risorsa per cui stai elencando i log di controllo. Utilizza il valore project, folder o organization.

Esegui questo comando:

Linux, macOS o 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

Copia insertId dall'ultima istanza riuscita di setIamPolicy prima della modifica o dell'eliminazione.

Utilizza insertId per esportare la policy di autorizzazione

Utilizza insertId recuperato dall'ultima istanza riuscita di setIamPolicy per eseguire il seguente comando in gcloud CLI per esportare la policy di autorizzazione in formato JSON o YAML. Puoi esportare le policy di autorizzazione per organizzazioni e progetti.

Livello dell'organizzazione

Il comando gcloud logging read legge le voci di log.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • ORGANIZATION_ID: L'organizzazione per cui vuoi visualizzare ed esportare la policy di autorizzazione.
  • INSERT_ID: il insertId della richiesta setIamPolicy.
  • FORMAT: il formato della risposta. Utilizza json o yaml.
  • TIME_PERIOD: Il periodo di tempo per cui stai elencando i log di controllo. Le voci restituite non sono precedenti a questo valore. Se non specificato, il valore predefinito è 1d. Per informazioni sui formati di ora, consulta gcloud topic datetimes.
  • OUTPUT_FILE: il nome e l'estensione del file di output. Ad esempio, previous_policy.json o previous_policy.yaml.

Esegui questo comando:

Linux, macOS o 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

Livello progetto

Il comando gcloud logging read legge le voci di log.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • INSERT_ID: il insertId della richiesta setIamPolicy.
  • TIME_PERIOD: Il periodo di tempo per cui stai elencando i log di controllo. Le voci restituite non sono precedenti a questo valore. Se non specificato, il valore predefinito è 1d. Per informazioni sui formati di ora, consulta gcloud topic datetimes.
  • FORMAT: il formato della risposta. Utilizza json o yaml.
  • OUTPUT_FILE: il nome del file in cui vuoi salvare l'output, ad esempio previous_policy.json o previous_policy.yaml.

Esegui questo comando:

Linux, macOS o 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

Modificare il file di output e ignorare la policy di autorizzazione corrente

Modifica il file di output nei seguenti modi e sostituisci la policy di autorizzazione corrente.

  1. Modifica il file di output in modo programmatico o utilizzando un editor di testo eliminando le seguenti righe:

     ---
     protoPayload:
        request:
          policy:
    

    Il file risultante inizia con auditConfigs:.

  2. Recupera la policy di autorizzazione attuale.

    gcloud

    Il comando gcloud get-iam-policy recupera la policy di autorizzazione di un progetto, una cartella o un'organizzazione.

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • RESOURCE_TYPE: Il tipo di risorsa per cui vuoi ottenere la policy di autorizzazione. I valori validi sono projects, resource-manager folders o organizations.

    • RESOURCE_ID: l'ID progetto, cartella o organizzazione Google Cloud . Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

    • FORMAT: Il formato desiderato per la policy di autorizzazione. Utilizza json o yaml.

    • PATH: il percorso di un nuovo file di output per la policy consenti.

    Esegui questo comando:

    Linux, macOS o 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

    Ad esempio, il seguente comando recupera la policy di autorizzazione per il progetto my-project e la salva nella tua home directory in formato JSON:

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

    C#

    Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

    L'esempio seguente mostra come ottenere la policy di autorizzazione per un progetto. Per scoprire come ottenere la policy di autorizzazione di una cartella o di un'organizzazione, consulta la documentazione della libreria client Resource Manager per il tuo linguaggio di programmazione.

    
    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

    Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

    L'esempio seguente mostra come ottenere la policy di autorizzazione per un progetto. Per scoprire come ottenere la policy di autorizzazione di una cartella o di un'organizzazione, consulta la documentazione della libreria client Resource Manager per il tuo linguaggio di programmazione.

    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

    Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

    L'esempio seguente mostra come ottenere la policy di autorizzazione per un progetto. Per scoprire come ottenere la policy di autorizzazione di una cartella o di un'organizzazione, consulta la documentazione della libreria client Resource Manager per il tuo linguaggio di programmazione.

    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

    Il metodo get-iam-policy dell'API Resource Manager recupera la policy di autorizzazione di un progetto, una cartella o un'organizzazione.

    Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

    • API_VERSION: la versione dell'API da utilizzare. Per progetti e organizzazioni, utilizza v1. Per le cartelle, utilizza v2.
    • RESOURCE_TYPE: Il tipo di risorsa di cui vuoi gestire la policy. Utilizza il valore projects, folders o organizations.
    • RESOURCE_ID: l'ID Google Cloud del progetto, dell'organizzazione o della cartella. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
    • POLICY_VERSION: La versione della policy da restituire. Le richieste devono specificare la versione più recente delle norme, ovvero la versione 3. Per maggiori dettagli, vedi Specificare una versione delle norme quando si recuperano le norme.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene la policy di autorizzazione della risorsa. Ad esempio:

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

    Salva la risposta in un file del tipo appropriato (json o yaml).

  3. Copia il valore di etag dalla policy di autorizzazione corrente.

  4. Sostituisci il valore etag nel file di output con il valore etag che hai copiato dal criterio di autorizzazione corrente. Il etag nel file di output deve corrispondere al etag attuale per avviare una nuova richiesta setIamPolicy. Assicurati che la spaziatura dell'etag non sia cambiata nel file di output.

  5. Rivedi il file per assicurarti che corrisponda alla precedente policy di autorizzazione funzionante. Potresti valutare la possibilità di creare un nuovo progetto e applicare la policy per assicurarti che funzioni come previsto.

  6. Imposta la policy di autorizzazione in modo che sostituisca quella attuale con quella nel file di output che hai creato.

    gcloud

    Il comando gcloud set-iam-policy imposta la policy nella richiesta come nuova policy di autorizzazione per il progetto, la cartella o l'organizzazione.

    Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

    • RESOURCE_TYPE: Il tipo di risorsa per cui vuoi impostare la policy di autorizzazione. I valori validi sono projects, resource-manager folders o organizations.

    • RESOURCE_ID: l'ID progetto, cartella o organizzazione Google Cloud . Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

    • PATH: il percorso di un file che contiene la nuova policy di autorizzazione.

    Esegui questo comando:

    Linux, macOS o 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 risposta contiene la policy di autorizzazione aggiornata.

    Ad esempio, il seguente comando imposta la policy di autorizzazione archiviata in policy.json come policy di autorizzazione per il progetto 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

    Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

    L'esempio seguente mostra come impostare la policy di autorizzazione per un progetto. Per scoprire come impostare la policy di autorizzazione di una cartella o di un'organizzazione, consulta la documentazione della libreria client Resource Manager per il tuo linguaggio di programmazione.

    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

    Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

    Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

    L'esempio seguente mostra come impostare la policy di autorizzazione per un progetto. Per scoprire come impostare la policy di autorizzazione di una cartella o di un'organizzazione, consulta la documentazione della libreria client Resource Manager per il tuo linguaggio di programmazione.

    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

    Il metodo set-iam-policy dell'API Resource Manager imposta il criterio nella richiesta come nuovo criterio di autorizzazione per il progetto, la cartella o l'organizzazione.

    Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

    • API_VERSION: la versione dell'API da utilizzare. Per progetti e organizzazioni, utilizza v1. Per le cartelle, utilizza v2.
    • RESOURCE_TYPE: Il tipo di risorsa di cui vuoi gestire la policy. Utilizza il valore projects, folders o organizations.
    • RESOURCE_ID: l'ID Google Cloud del progetto, dell'organizzazione o della cartella. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
    • POLICY: una rappresentazione JSON della policy che vuoi impostare. Per ulteriori informazioni sul formato di una policy, consulta il riferimento alle policy.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
      "policy": POLICY
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    La risposta contiene la policy di autorizzazione aggiornata.

Ripristinare un criterio di autorizzazione con Cloud Asset Inventory

Per ripristinare una policy di autorizzazione a una versione precedente, puoi utilizzare Cloud Asset Inventory per visualizzare la cronologia delle modifiche delle policy di autorizzazione della risorsa e utilizzare queste informazioni per ripristinare la policy. Questo processo prevede i seguenti passaggi:

  1. Utilizza Cloud Asset Inventory per esaminare la cronologia delle modifiche delle policy di autorizzazione e identificare la policy di autorizzazione che vuoi ripristinare.
  2. Copia il criterio di autorizzazione e crea un nuovo file in formato JSON.
  3. Esegui l'override della policy di autorizzazione corrente con quella nel nuovo file.

Esamina la cronologia delle modifiche ai criteri di autorizzazione con Cloud Asset Inventory

Console

  1. Nella console Google Cloud , vai alla pagina Inventario asset.

    Vai ad Asset Inventory

  2. Fai clic sulla scheda Policy IAM.

  3. Esegui la seguente query nel campo Filtro:

    Resource : RESOURCE_ID

    Sostituisci RESOURCE_ID con l' Google Cloud ID progetto, cartella o organizzazione. Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

  4. Per visualizzare la cronologia delle modifiche della policy di autorizzazione della risorsa, fai clic sul nome della risorsa, quindi seleziona la scheda Cronologia delle modifiche.

  5. Per confrontare le modifiche apportate alla norma di autorizzazione per la risorsa, seleziona due record con timestamp diversi dal menu Seleziona un record da confrontare.

gcloud

Il comando gcloud asset get-history recupera la cronologia aggiornata delle policy di autorizzazione su una risorsa che si sovrappone a un intervallo di tempo.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • RESOURCE_TYPE: Il tipo di risorsa per cui stai elencando i log di controllo. Utilizza il valore project, folder o organization.
  • RESOURCE_ID: l'ID Google Cloud del progetto, dell'organizzazione o della cartella. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • ASSET_NAME: un elenco separato da virgole di nomi di risorse formattati per le risorse di cui vuoi visualizzare le cronologie delle policy di autorizzazione. Ad esempio, //cloudresourcemanager.googleapis.com/projects/my-project. Queste risorse possono essere uno qualsiasi dei tipi di risorse che accettano le policy di autorizzazione.
  • START_TIME: l'inizio dell'intervallo di tempo. L'intervallo di tempo massimo è di 7 giorni. Il valore deve essere l'ora corrente o un'ora non più di 35 giorni nel passato. Per informazioni sui formati di ora, consulta gcloud topic datetimes.
  • END_TIME: (Facoltativo) Il punto finale dell'intervallo di tempo. L'intervallo di tempo massimo è di 7 giorni. Il valore deve essere l'ora corrente o un'ora non più di 35 giorni nel passato. Se non viene specificata, l'ora di fine viene considerata l'ora attuale. Per informazioni sui formati di ora, consulta gcloud topic datetimes.

Esegui questo comando:

Linux, macOS o 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 risposta contiene la cronologia aggiornata delle policy di autorizzazione.

Crea un nuovo file di policy di autorizzazione

Dopo aver esaminato la cronologia delle norme di autorizzazione e identificato la norma di autorizzazione che vuoi ripristinare, completa i seguenti passaggi.

  1. Copia il criterio di autorizzazione che vuoi ripristinare a partire dalla riga "bindings" fino alla riga "etag".

  2. Incolla la policy di autorizzazione che hai copiato in un nuovo file e utilizza le parentesi graffe ({}) per racchiudere la policy. Ad esempio, la policy di autorizzazione potrebbe avere il seguente aspetto:

     {
      "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. Salva il file in formato JSON. Ad esempio, potresti chiamare il nuovo file previous_iam_policy.json.

Imposta la nuova policy di autorizzazione

Imposta la policy di autorizzazione in modo che sostituisca quella attuale con quella nel file di output che hai creato.

gcloud

Il comando gcloud set-iam-policy imposta la policy nella richiesta come nuova policy di autorizzazione per il progetto, la cartella o l'organizzazione.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • RESOURCE_TYPE: Il tipo di risorsa per cui vuoi impostare la policy di autorizzazione. I valori validi sono projects, resource-manager folders o organizations.

  • RESOURCE_ID: l'ID progetto, cartella o organizzazione Google Cloud . Gli ID progetto sono alfanumerici, ad esempio my-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.

  • PATH: il percorso di un file che contiene la nuova policy di autorizzazione.

Esegui questo comando:

Linux, macOS o 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 risposta contiene la policy di autorizzazione aggiornata.

Ad esempio, il seguente comando imposta la policy di autorizzazione archiviata in policy.json come policy di autorizzazione per il progetto 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

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

L'esempio seguente mostra come impostare la policy di autorizzazione per un progetto. Per scoprire come impostare la policy di autorizzazione di una cartella o di un'organizzazione, consulta la documentazione della libreria client Resource Manager per il tuo linguaggio di programmazione.

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

Per eseguire l'autenticazione in Resource Manager, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, consulta Librerie client di Resource Manager.

L'esempio seguente mostra come impostare la policy di autorizzazione per un progetto. Per scoprire come impostare la policy di autorizzazione di una cartella o di un'organizzazione, consulta la documentazione della libreria client Resource Manager per il tuo linguaggio di programmazione.

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

Il metodo set-iam-policy dell'API Resource Manager imposta il criterio nella richiesta come nuovo criterio di autorizzazione per il progetto, la cartella o l'organizzazione.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • API_VERSION: la versione dell'API da utilizzare. Per progetti e organizzazioni, utilizza v1. Per le cartelle, utilizza v2.
  • RESOURCE_TYPE: Il tipo di risorsa di cui vuoi gestire la policy. Utilizza il valore projects, folders o organizations.
  • RESOURCE_ID: l'ID Google Cloud del progetto, dell'organizzazione o della cartella. Gli ID progetto sono stringhe alfanumeriche, comemy-project. Gli ID cartella e organizzazione sono numerici, ad esempio 123456789012.
  • POLICY: una rappresentazione JSON della policy che vuoi impostare. Per ulteriori informazioni sul formato di una policy, consulta il riferimento alle policy.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "policy": POLICY
}

Per inviare la richiesta, espandi una di queste opzioni:

La risposta contiene la policy di autorizzazione aggiornata.