Restaurar uma versão anterior de uma política de permissão do IAM

Nesta página, explicamos como restaurar uma versão anterior de uma política de permissão do IAM depois de fazer mudanças inadvertidas ou exclusão acidental.

Para restaurar uma política do IAM anterior, encontre o último setIamPolicy bem-sucedido antes da mudança ou exclusão e use-o para restaurar a política.

Também é possível usar o Inventário de recursos do Cloud para encontrar o histórico de mudanças do IAM e usá-lo para restaurar a política.

Funções exigidas

Para receber as permissões necessárias para restaurar uma política de permissão anterior, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto, na pasta ou na organização:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Ao restaurar políticas de permissão com setIamPolicy, a função de Administrador da organização é necessária para políticas de permissão no nível da organização e da pasta, e a função de Proprietário é necessária para políticas de permissão para envolvidos no projeto.

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Restaurar uma política de permissão com a última instância setIamPolicy bem-sucedida

Para restaurar uma política de permissão para uma versão anterior, revise os registros de auditoria da última instância bem-sucedida de setIamPolicy antes da mudança ou exclusão e use as informações dessa instância para restaurar a política. Esse processo envolve as seguintes etapas:

  1. Identifique a última instância setIamPolicy bem-sucedida para a política de permissão e recupere o insertId.
  2. Use o insertId da solicitação setIamPolicy para exportar a política de permissão no formato YAML ou JSON.
  3. Modifique o arquivo de saída para corresponder à política de permissão funcional anterior e substitua a política de permissão atual.

Identifique a última instância bem-sucedida de setIamPolicy e recupere o insertId.

Para identificar a última instância bem-sucedida de setIamPolicy e recuperar o isertId, use o console do Google Cloud ou a CLI gcloud para analisar seus registros de auditoria.

Console

  1. No console do Google Cloud , acesse a página Análise de registros.

    Acessar a Análise de registros

  2. No editor de consultas, insira uma das seguintes consultas. Essas consultas pesquisam nos registros de auditoria entradas que têm SetIamPolicy no campo methodName do protoPayload:

    • Para receber os registros de todas as mudanças feitas em uma política de permissão de um recurso, use a seguinte consulta:

      logName="RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity"
      protoPayload.methodName:SetIamPolicy
      
    • Para receber os registros de mudanças na política de permissão que envolvem um usuário ou conta de serviço específica, use a seguinte consulta:

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

      Substitua:

      • RESOURCE_TYPE: o tipo de recurso para o qual você está listando registros de auditoria. Os valores válidos são projects, folders ou organizations.
      • RESOURCE_ID: o ID do seu Google Cloud projeto, pasta ou organização. Os IDs de projeto são alfanuméricos, como my-project. Os IDs de pastas e organizações são numéricos, como 123456789012.
      • EMAIL_ADDRESS: o endereço de e-mail do usuário ou da conta de serviço, por exemplo, example-service-account@example-project.iam.gserviceaccount.com.
  3. Para executar a consulta, clique em Executar consulta.

  4. Use o seletor Linha do tempo para especificar o período adequado para a consulta. Também é possível adicionar uma expressão de marcação de tempo diretamente ao editor de consultas. Para mais informações, consulte Ver registros por período.

  5. Copie o insertId da última instância bem-sucedida de setIamPolicy antes da mudança ou exclusão.

gcloud

O comando gcloud logging read lê entradas de registro.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RESOURCE_TYPE: o tipo de recurso que está listando os registros de auditoria. Use o valor projects, folders ou organizations.
  • RESOURCE_ID: o ID do seu Google Cloud projeto, organização ou pasta. Os IDs do projeto são strings alfanuméricas, como my-project. Os IDs de pastas e organizações são numéricos, como 123456789012.
  • TIME_PERIOD: o período em que você está listando os registros de auditoria. As entradas retornadas não são mais antigas que esse valor. Se o valor não for especificado, será usado o padrão 1d. Para informações sobre formatos de tempo, consulte gcloud topic datetimes.
  • RESOURCE_TYPE_SINGULAR: o tipo de recurso que está listando os registros de auditoria. Use o valor project, folder ou organization.

Execute o seguinte comando:

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

Copie o insertId da última instância bem-sucedida de setIamPolicy antes da mudança ou exclusão.

Use o insertId para exportar a política de permissão

Use o insertId recuperado da última instância bem-sucedida de setIamPolicy para executar o comando a seguir na CLI gcloud e exportar a política de permissão no formato JSON ou YAML. É possível exportar políticas de permissão para organizações e projetos.

Nível da organização

O comando gcloud logging read lê entradas de registro.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • ORGANIZATION_ID: a organização para a qual você quer ver e exportar a política de permissão.
  • INSERT_ID: o insertId da solicitação setIamPolicy.
  • FORMAT: o formato da resposta. Use json ou yaml.
  • TIME_PERIOD: o período em que você está listando os registros de auditoria. As entradas retornadas não são mais antigas que esse valor. Se o valor não for especificado, será usado o padrão 1d. Para informações sobre formatos de tempo, consulte gcloud topic datetimes.
  • OUTPUT_FILE: o nome do arquivo e a extensão da saída. Por exemplo, previous_policy.json ou previous_policy.yaml.

Execute o seguinte comando:

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

Nível do projeto

O comando gcloud logging read lê entradas de registro.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • INSERT_ID: o insertId da solicitação setIamPolicy.
  • TIME_PERIOD: o período em que você está listando os registros de auditoria. As entradas retornadas não são mais antigas que esse valor. Se o valor não for especificado, será usado o padrão 1d. Para informações sobre formatos de tempo, consulte gcloud topic datetimes.
  • FORMAT: o formato da resposta. Use json ou yaml.
  • OUTPUT_FILE: o nome do arquivo em que você quer salvar a saída. Por exemplo, previous_policy.json ou previous_policy.yaml.

Execute o seguinte comando:

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

Modificar o arquivo de saída e substituir a política de permissão atual

Modifique o arquivo de saída das seguintes maneiras e substitua a política de permissão atual.

  1. De forma programática ou usando um editor de texto, modifique o arquivo de saída excluindo as seguintes linhas:

     ---
     protoPayload:
        request:
          policy:
    

    O arquivo resultante começa com auditConfigs:.

  2. Acessar a política de permissão atual.

    gcloud

    O comando gcloud get-iam-policy recebe a política de permissão de um projeto, pasta ou organização.

    Antes de usar os dados do comando abaixo, faça estas substituições:

    • RESOURCE_TYPE: o tipo de recurso para o qual você quer conseguir a política de permissão. Os valores válidos são projects, resource-manager folders ou organizations.

    • RESOURCE_ID: o ID do seu Google Cloud projeto, pasta ou organização. Os IDs de projeto são alfanuméricos, como my-project. Os códigos de pastas e organizações são numéricos, como 123456789012.

    • FORMAT: o formato desejado para a política. Use json ou yaml.

    • PATH: o caminho para um novo arquivo de saída para a política de permissão.

    Execute o seguinte comando:

    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

    Por exemplo, o comando a seguir recebe a política de permissão do projeto my-project e a salva no diretório inicial em formato JSON:

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

    C#

    Para autenticar no Resource Manager, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte Bibliotecas de cliente do Resource Manager.

    O exemplo a seguir mostra como receber a política de permissão de um projeto. Para saber como conseguir a política de permissão de uma pasta ou organização, consulte a documentação da biblioteca de cliente do Resource Manager para sua linguagem de programação.

    
    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

    Para autenticar no Resource Manager, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte Bibliotecas de cliente do Resource Manager.

    O exemplo a seguir mostra como receber a política de permissão de um projeto. Para saber como conseguir a política de permissão de uma pasta ou organização, consulte a documentação da biblioteca de cliente do Resource Manager para sua linguagem de programação.

    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

    Para autenticar no Resource Manager, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte Bibliotecas de cliente do Resource Manager.

    O exemplo a seguir mostra como receber a política de permissão de um projeto. Para saber como conseguir a política de permissão de uma pasta ou organização, consulte a documentação da biblioteca de cliente do Resource Manager para sua linguagem de programação.

    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

    O método get-iam-policy da API Resource Manager recebe a política de permissão de um projeto, pasta ou organização.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • API_VERSION: a versão da API a ser usada. Para projetos e organizações, use v1. Para pastas, use v2.
    • RESOURCE_TYPE: o tipo de recurso com a política que você quer gerenciar. Use o valor projects, folders ou organizations.
    • RESOURCE_ID: o ID do seu Google Cloud projeto, organização ou pasta. Os IDs do projeto são strings alfanuméricas, como my-project. Os IDs de pastas e organizações são numéricos, como 123456789012.
    • POLICY_VERSION: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar a solicitação, expanda uma destas opções:

    A resposta contém a política de permissão do projeto. Por exemplo:

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

    Salve a resposta em um arquivo do tipo apropriado (json ou yaml).

  3. Copie o valor etag da política de permissão atual.

  4. Substitua o valor etag no arquivo de saída pelo valor etag que você copiou da política de permissão atual. O etag no arquivo de saída precisa corresponder ao etag atual para iniciar uma nova solicitação setIamPolicy. Verifique se o espaçamento da ETag não mudou no arquivo de saída.

  5. Revise o arquivo para garantir que ele corresponda à política de permissão funcional anterior. Considere criar um novo projeto e aplicar a política para garantir que ela funcione como esperado.

  6. Defina a política de permissão para substituir a política de permissão atual com a do arquivo de saída que você criou.

    gcloud

    O comando gcloud set-iam-policy define a política na solicitação como a nova política de permissão para o projeto, pasta ou organização.

    Antes de usar os dados do comando abaixo, faça estas substituições:

    • RESOURCE_TYPE: o tipo de recurso para o qual você quer definir a política de permissão. Os valores válidos são projects, resource-manager folders ou organizations.

    • RESOURCE_ID: o ID do seu Google Cloud projeto, pasta ou organização. Os IDs de projeto são alfanuméricos, como my-project. Os códigos de pastas e organizações são numéricos, como 123456789012.

    • PATH: o caminho para um arquivo que contém a nova política de permissão.

    Execute o seguinte comando:

    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

    A resposta contém a política de permissão atualizada.

    Por exemplo, o comando a seguir define a política de permissão armazenada em policy.json como a política de permissão do projeto 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

    Para autenticar no Resource Manager, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte Bibliotecas de cliente do Resource Manager.

    O exemplo a seguir mostra como definir a política de permissão para um projeto. Para saber como definir a política de permissão de uma pasta ou organização, consulte a documentação da biblioteca de cliente do Resource Manager para sua linguagem de programação.

    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

    Para autenticar no Resource Manager, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte Bibliotecas de cliente do Resource Manager.

    O exemplo a seguir mostra como definir a política de permissão para um projeto. Para saber como definir a política de permissão de uma pasta ou organização, consulte a documentação da biblioteca de cliente do Resource Manager para sua linguagem de programação.

    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

    O método set-iam-policy da API Resource Manager define a política na solicitação como a nova política de permissão para o projeto, a pasta ou a organização.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • API_VERSION: a versão da API a ser usada. Para projetos e organizações, use v1. Para pastas, use v2.
    • RESOURCE_TYPE: o tipo de recurso com a política que você quer gerenciar. Use o valor projects, folders ou organizations.
    • RESOURCE_ID: o ID do seu Google Cloud projeto, organização ou pasta. Os IDs do projeto são strings alfanuméricas, como my-project. Os IDs de pastas e organizações são numéricos, como 123456789012.
    • POLICY: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

    {
      "policy": POLICY
    }
    

    Para enviar a solicitação, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

Restaurar uma política de permissão com o Inventário de recursos do Cloud

Para restaurar uma política de permissão a uma versão anterior, use o Inventário de recursos do Cloud para conferir o histórico de mudanças das políticas de permissão do recurso e usar essas informações para restaurar a política. Esse processo envolve as seguintes etapas:

  1. Use o Inventário de recursos do Cloud para analisar o histórico de mudanças das políticas de permissão e identificar a política que você quer restaurar.
  2. Copie a política de permissão e crie um novo arquivo no formato JSON.
  3. Substitua a política de permissão atual pela do novo arquivo.

Analisar o histórico de mudanças na política de permissão com o Inventário de recursos do Cloud

Console

  1. No console Google Cloud , acesse a página Inventário de recursos.

    Acessar o inventário de recursos

  2. Clique na guia Política do IAM.

  3. Execute a seguinte consulta no campo Filtro:

    Resource : RESOURCE_ID

    Substitua RESOURCE_ID pelo ID do projeto, da pasta ou da organização do Google Cloud. Os IDs de projeto são alfanuméricos, como my-project. Os IDs de pastas e organizações são numéricos, como 123456789012.

  4. Para conferir o histórico de alterações da política de permissão do recurso, clique no nome dele e selecione a guia Histórico de alterações.

  5. Para comparar as mudanças na política de permissão do recurso, selecione dois registros diferentes com carimbo de data/hora no menu Selecionar um registro para comparar.

gcloud

O comando gcloud asset get-history recebe o histórico atualizado de políticas de permissão em um recurso que se sobrepõe a um período.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RESOURCE_TYPE: o tipo de recurso que está listando os registros de auditoria. Use o valor project, folder ou organization.
  • RESOURCE_ID: o ID do seu Google Cloud projeto, organização ou pasta. Os IDs do projeto são strings alfanuméricas, como my-project. Os IDs de pastas e organizações são numéricos, como 123456789012.
  • ASSET_NAME: uma lista separada por vírgulas de nomes de recursos formatados para os recursos cujos históricos de políticas de permissão você quer visualizar. Por exemplo, //cloudresourcemanager.googleapis.com/projects/my-project. Esses recursos podem ser qualquer um dos tipos de recursos que aceitam políticas de permissão.
  • START_TIME: o início do período. O período máximo é de 7 dias. O valor precisa ser a hora atual ou um horário de até 35 dias atrás. Para informações sobre formatos de tempo, consulte gcloud topic datetimes.
  • END_TIME: opcional. O ponto final do período. O período máximo é de 7 dias. O valor precisa ser a hora atual ou um horário de até 35 dias no passado. Quando não fornecido, o horário de término é considerado o horário atual. Saiba mais sobre formatos de tempo em gcloud topic datetimes.

Execute o seguinte comando:

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

A resposta contém o histórico atualizado de políticas de permissão.

Criar um arquivo de política de permissão

Depois de analisar o histórico e identificar a política de permissão que você quer restaurar, siga estas etapas.

  1. Copie a política de permissão que você quer restaurar, começando da linha "bindings" até a linha "etag".

  2. Cole a política de permissão copiada em um novo arquivo e use chaves ({}) para incluir a política. Por exemplo, a política de permissão pode ser assim:

     {
      "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. Salve o arquivo no formato JSON. Por exemplo, você pode nomear o novo arquivo como previous_iam_policy.json.

Definir a nova política de permissão

Defina a política de permissão para substituir a política de permissão atual com a do arquivo de saída que você criou.

gcloud

O comando gcloud set-iam-policy define a política na solicitação como a nova política de permissão para o projeto, pasta ou organização.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RESOURCE_TYPE: o tipo de recurso para o qual você quer definir a política de permissão. Os valores válidos são projects, resource-manager folders ou organizations.

  • RESOURCE_ID: o ID do seu Google Cloud projeto, pasta ou organização. Os IDs de projeto são alfanuméricos, como my-project. Os códigos de pastas e organizações são numéricos, como 123456789012.

  • PATH: o caminho para um arquivo que contém a nova política de permissão.

Execute o seguinte comando:

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

A resposta contém a política de permissão atualizada.

Por exemplo, o comando a seguir define a política de permissão armazenada em policy.json como a política de permissão do projeto 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

Para autenticar no Resource Manager, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte Bibliotecas de cliente do Resource Manager.

O exemplo a seguir mostra como definir a política de permissão para um projeto. Para saber como definir a política de permissão de uma pasta ou organização, consulte a documentação da biblioteca de cliente do Resource Manager para sua linguagem de programação.

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

Para autenticar no Resource Manager, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte Bibliotecas de cliente do Resource Manager.

O exemplo a seguir mostra como definir a política de permissão para um projeto. Para saber como definir a política de permissão de uma pasta ou organização, consulte a documentação da biblioteca de cliente do Resource Manager para sua linguagem de programação.

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

O método set-iam-policy da API Resource Manager define a política na solicitação como a nova política de permissão para o projeto, a pasta ou a organização.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • API_VERSION: a versão da API a ser usada. Para projetos e organizações, use v1. Para pastas, use v2.
  • RESOURCE_TYPE: o tipo de recurso com a política que você quer gerenciar. Use o valor projects, folders ou organizations.
  • RESOURCE_ID: o ID do seu Google Cloud projeto, organização ou pasta. Os IDs do projeto são strings alfanuméricas, como my-project. Os IDs de pastas e organizações são numéricos, como 123456789012.
  • POLICY: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "policy": POLICY
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política de permissão atualizada.