Visão geral das recomendações de papel

As recomendações de papéis ajudam a identificar e remover permissões em excesso dos principais, melhorando as configurações de segurança dos recursos.

Visão geral das recomendações de papel

As recomendações de papel são um dos tipos de recomendação que o Recommender gera.

Cada recomendação de papel sugere que você remova ou substitua um papel que conceda aos principais permissões excessivas. Em escala, essas recomendações ajudam você a aplicar o princípio do menor privilégio, garantindo que os principais tenham apenas as permissões de que realmente precisam.

O recomendador identifica as permissões em excesso usando insights de política. Os insights de política são informações baseadas em ML sobre o uso de permissões do principal.

Algumas recomendações também são associadas a insights de movimento lateral. Esses insights identificam papéis que permitem que contas de serviço em um projeto personifiquem contas de serviço em outro projeto. Para mais informações, consulte Como os insights de movimento lateral são gerados.

Como os insights de política são gerados

O recomendador gera insights de política comparando as permissões que cada principal usou nos últimos 90 dias com o total de permissões que o princiapl tem. Existem algumas formas de um principal poder usar uma permissão:

  • Diretamente, chamando uma API que requer a permissão

    Por exemplo, o método roles.list na API REST do IAM requer a permissão iam.roles.list. Quando você chama o método roles.list, você usa a permissão iam.roles.list.

    Da mesma forma, ao chamar o método testIamPermissions para um recurso, você usa efetivamente todas as permissões que está testando.

  • Indiretamente, usando o Console do Google Cloud para trabalhar com recursos do Google Cloud.

    Por exemplo, no console, é possível editar uma instância de máquina virtual (VM) do Compute Engine, que requer permissões diferentes com base nas configurações alteradas. No entanto, o console também exibe as configurações atuais, que exigem a permissão compute.instances.get.

    Como resultado, ao editar uma instância de VM no console, você usa a permissão compute.instances.get.

O recomendador do IAM também usa o machine learning para identificar as permissões no papel atual de um principal, que este provavelmente usará no futuro, mesmo que não tenha usado essas permissões nos últimos 90 dias. Para mais informações, consulte Machine learning para insights de política nesta página.

Os insights de política não são gerados para todas as vinculações de papéis do IAM. Para mais informações sobre o motivo pelo qual uma vinculação de papel pode não ter um insight de política, consulte Disponibilidade nesta página.

Para saber como gerenciar insights de políticas, consulte Gerenciar insights de políticas para projetos, pastas e organizações ou Gerenciar insights de políticas para buckets do Cloud Storage.

Machine learning para insights de política

Em alguns casos, é provável que um principal precise de determinadas permissões incluídas nos papéis atuais, mas que não tenha usado recentemente. Para identificar essas permissões, o Recomendador usa um modelo de aprendizado de máquina (ML, na sigla em inglês) ao gerar insights de política.

Esse modelo de machine learning é treinado com vários conjuntos de sinais:

  • Padrões comuns de co-ocorrência no histórico observado: o fato de um usuário ter usado as permissões A, B e C no passado sugere que A, B e C podem estar relacionados de alguma forma e que eles são necessários juntos para realizar uma tarefa no Google Cloud. Se o modelo de ML observar esse padrão com frequência suficiente, na próxima vez que um usuário diferente usar as permissões A e B, o modelo sugerirá que o usuário também precisará da permissão C.

  • Conhecimento de domínio conforme codificado nas definições do papel: o IAM fornece centenas de papéis predefinidos diferentes que são específicos do serviço. Se um papel predefinido contém um conjunto de permissões, isso é um forte sinal de que estas permissões precisam ser concedidas em conjunto.

Além desses sinais, o modelo também usa a incorporação de palavras para calcular a semelhança semântica das permissões. Permissões semanticamente semelhantes serão consideradas "próximas" umas das outras após a incorporação e terão maior probabilidade de serem concedidas juntas. Por exemplo, bigquery.datasets.get e bigquery.tables.list estarão muito próximos uns dos outros após a incorporação.

Todos os dados usados no pipeline de machine learning do recomendador do IAM têm k-anonimato. Isso significa que os indivíduos do conjunto de dados anônimos não podem ser identificados novamente. Para atingir este nível de anonimato, descartamos todas as informações de identificação pessoal, como o ID de usuário relacionado a cada padrão de uso de permissão. Em seguida, descartaremos todos os padrões de uso que não são exibidos com frequência suficiente no Google Cloud. O modelo global é treinado com esses dados anônimos.

O modelo global pode ser ainda mais personalizado para cada organização usando federated learning, um processo de machine learning que treina modelos sem exportar dados.

Como as recomendações de papel são geradas

Se um insight de política indicar que um principal não precisa de todas as permissões no papel, o Recomendador avalia o papel para determinar se ele pode ser revogado ou se há outro papel mais adequado. Se o papel puder ser revogado, o Recomendador gerará uma recomendação de papel para revogar o papel. Se houver outro papel mais adequado, o recomendador gerará uma recomendação de papel para substituir o papel por um papel sugerido. Esse substituto recomendado pode ser um papel personalizado novo, um papel personalizado existente ou um ou mais papéis predefinidos. Exceto no caso de recomendações para contas de serviço gerenciadas pelo Google, uma recomendação de papel nunca sugere uma alteração que aumente o nível de acesso de um principal.

As recomendações de papel são geradas com base apenas nos controles de acesso do IAM. Eles não consideram outros tipos de controle de acesso, como listas de controle de acesso (ACLs) e controle de acesso baseado em papéis (RBAC) do Kubernetes. Se você usa outros tipos de controle de acesso, tenha muito cuidado ao analisar suas recomendações e considere como esses controles de acesso estão relacionados às políticas de permissão.

Além disso, as recomendações de papel não são geradas para todas as vinculações de papéis do IAM. Para mais informações sobre o motivo pelo qual uma vinculação de papel pode não ter uma recomendação de papel, consulte Disponibilidade nesta página.

Novos papéis personalizados nas recomendações de papéis

Ao sugerir substituições para um papel, o recomendador sempre sugere um papel personalizado atual ou um ou mais papéis predefinidos, que parecem ser mais adequados às necessidades do principal.

Se o Recomendador identificar um padrão de uso de permissão comum na sua organização que não seja mapeado para um papel predefinido ou personalizado, também é recomendável criar um novo papel personalizado para envolvidos no projeto. /1}. Esse papel personalizado inclui apenas as permissões recomendadas. É possível modificar a recomendação de papel personalizado adicionando ou removendo permissões.

Se você quiser aplicar o princípio do menor privilégio da maneira mais estrita possível, escolha o novo papel personalizado. O recomendador cria o papel personalizado no nível do projeto. Você é responsável por manter e atualizar os papéis personalizados dos seus projetos.

Se preferir usar um papel gerenciado pelo Google, escolha o papel predefinido. O Google Cloud atualiza esses papéis regularmente adicionando ou removendo permissões. Para receber notificações sobre essas atualizações, inscreva-se no feed de notícias do registro de alterações de permissões. Quando você escolhe o papel predefinido, o principal continua tendo pelo menos algumas permissões e possivelmente um grande número de permissões que não foram usadas.

O recomendador não recomenda novos papéis personalizados nos seguintes casos:

  • A recomendação é para um papel no nível da pasta ou da organização.
  • Sua organização já tem 100 ou mais papéis personalizados
  • Seu projeto já tem 25 ou mais papéis personalizados

Além disso, o Recomendador do IAM recomenda no máximo cinco novos papéis personalizados por dia em cada projeto e no máximo 15 novos papéis personalizados em toda a organização.

Como os insights de movimento lateral são gerados

O movimento lateral ocorre quando uma conta de serviço em um projeto tem permissão para personificar uma conta de serviço em outro. Por exemplo, uma conta de serviço pode ter sido criada no projeto A, mas tem permissões para personificar uma conta de serviço no projeto B.

Essas permissões podem resultar em uma cadeia de representações entre projetos que dá aos diretores acesso não intencional aos recursos. Por exemplo, se um principal representar a conta de serviço no projeto A, ele poderá usar essa conta de serviço para personificar a conta de serviço no projeto B. Se a conta de serviço no projeto B tiver permissão para personificar outras contas de serviço em outros projetos na sua organização, o principal poderá continuar usando a representação da conta de serviço para mover do projeto para o projeto, recebendo permissões durante esse processo ir.

O recomendador gera insights de movimento lateral identificando vinculações de papéis que se encaixam nos seguintes critérios:

  • O principal na vinculação de papel é uma conta de serviço que não foi criada no projeto.
  • O papel inclui uma das permissões a seguir, que permitem que um principal represente uma conta de serviço:

    • iam.serviceAccounts.actAs
    • iam.serviceAccounts.getAccessToken
    • iam.serviceAccounts.getOpenIdToken
    • iam.serviceAccounts.implicitDelegation
    • iam.serviceAccounts.signBlob
    • iam.serviceAccounts.signJwt

Se uma vinculação de papel atender a esses critérios, o recomendador gerará um insights de movimento lateral para a vinculação. Esse insight contém informações sobre as capacidades de representação da conta de serviço, incluindo quais contas de serviço ela pode representar e se usou permissões de representação nos últimos 90 dias.

O Recommender não usa insights de movimento lateral por si só para gerar novas recomendações de papel. Isso ocorre porque, se uma conta de serviço estiver usando as permissões de representação, o Recomendador não pode sugerir a remoção dela com segurança. No entanto, se uma recomendação de papel sugerir a remoção dessas permissões porque elas não estão sendo usadas, o Recomendador vinculará o insight de movimento lateral a essa recomendação. Essa vinculação ajuda você a priorizar as recomendações de papel para contas de serviço que têm permissões de representação avançadas e não utilizadas em projetos.

Para saber como gerenciar insights de movimento lateral, consulte Gerenciar insights de movimento lateral.

Disponibilidade

Os insights de política e as recomendações de papéis não são geradas para cada vinculação de papéis. Leia as seções a seguir para entender as vinculações de papéis para as quais insights e recomendações de política são gerados.

Disponibilidade do insight de política

Para que o Recomendador gere um insight de política para uma vinculação de papel, o seguinte precisa ser verdadeiro:

  • A política de permissão do IAM que contém a vinculação do papel precisa ser anexada a um dos seguintes recursos:

    • Bucket do Cloud Storage
    • Projeto
    • Pasta
    • Organização

    O recomendador só gera insights de política para papéis concedidos nesses recursos.

  • A vinculação do papel não precisa ter uma condição. O recomendador não gera insights de política para vinculações condicionais de papel.

Pode levar até 10 dias para o Recomendador gerar insights de política para uma nova vinculação de papel.

Disponibilidade de insight de movimento lateral

Os insights de movimento lateral são gerados para vinculações de papéis nos seguintes recursos:

  • organizações
  • Pastas
  • Projetos
  • Contas de serviço

Disponibilidade da recomendação de papéis

Para que o Recomendador gere uma recomendação de papel para uma vinculação de papel, os seguintes itens precisam ser atendidos:

  • A vinculação de papel precisa ter um insight de política associado a ela. O insight desta política serve como base para a recomendação.
  • A vinculação de papéis precisa ter mais de 90 dias. Isso garante que o Recomendador tenha dados de uso suficientes para fazer uma recomendação.
  • Se o principal na vinculação de papel for uma conta de serviço gerenciada pelo Google, a vinculação de papel precisará ser Proprietário, Editor ou Visualizador. O Recomendador não gera recomendações de papéis para contas de serviço gerenciadas pelo Google com outros papéis. Para mais detalhes, consulte Recomendações de papéis para contas de serviço gerenciadas pelo Google.

Se uma vinculação de papel não tiver insights ou não existir por 90 dias, a coluna Permissões analisadas no console mostrará um ícone .

Em alguns casos, o Recomendador não gera recomendações de papéis para uma vinculação de papel anterior a 90 dias e que tem um insight associado a ela. Isso pode acontecer pelos seguintes motivos:

  • Não há papéis do IAM predefinidos que sejam mais apropriados do que o papel atual. Se um principal já tiver um papel predefinido que minimize as permissões dele ou inclua menos permissões do que outros papéis predefinidos, o recomendador do não poderá recomendar um papel predefinido diferente.

    Você pode reduzir as permissões do principal criando um papel personalizado para ele.

  • O principal é uma conta de serviço gerenciada pelo Google e o papel não é um papel básico. O Recomendador só gera recomendações de papéis para contas de serviço gerenciadas pelo Google se a conta de serviço tiver um papel básico (Proprietário, Editor ou Visualizador). Para mais detalhes, consulte Recomendações de papéis para contas de serviço gerenciadas pelo Google.

  • Nenhum outro principal tem o papel básico de Proprietário do projeto. Pelo menos um principal precisa ter o papel Proprietário (roles/owner) em cada projeto. Se apenas um principal tiver esse papel, o recomendador do IAM não recomendará a revogação ou a substituição do papel.

Nesses casos, a coluna Permissões analisadas no console mostra o uso da permissão da principal, mas não tem um ícone Recomendação disponível.

Prioridade e gravidade

A prioridade da recomendação e a gravidade do insight ajudam você a entender a urgência de uma recomendação ou um insight e a priorizar de acordo.

Prioridade de recomendação do papel

As recomendações recebem níveis de prioridade com base na urgência percebida. Os níveis de prioridade variam de P0 (prioridade mais alta) a P4 (prioridade mais baixa).

A prioridade de uma recomendação de papel depende da vinculação de papéis em que a recomendação será aplicada:

Detalhes da recomendação Prioridade Explicação
Recomendações para vinculações de papéis que concedem acesso público a buckets do Cloud Storage P1 Buckets acessíveis publicamente podem ser acessados por qualquer pessoa na Internet. Ao remover o acesso público, você tem mais controle sobre seus dados.
Recomendações para vinculações de papéis que concedem papéis básicos (proprietário, editor e leitor) em um projeto, uma pasta ou uma organização P2 Os papéis básicos são altamente permissivos, e a aplicação de recomendações para eles pode reduzir muito as permissões concedidas acima do limite.
Recomendações que não concedem acesso público ou papéis básicos P4 Embora essas recomendações ajudem a reduzir permissões em excesso, elas não removem acesso público ou papéis básicos altamente permissivos, o que as torna uma prioridade menor.

Gravidade do insight

Os insights recebem níveis de gravidade com base na urgência percebida. Os níveis de gravidade podem ser LOW, MEDIUM, HIGH ou CRITICAL.

A gravidade de um insight de política depende da vinculação de papéis em que o insight será usado:

Detalhes do insight Gravidade Explicação
Insights para vinculações de papéis que concedem acesso público a buckets do Cloud Storage CRITICAL Buckets acessíveis publicamente podem ser acessados por qualquer pessoa na Internet. Ao remover o acesso público, você tem mais controle sobre seus dados.
Insights para vinculações de papel que concedem papéis básicos (proprietário, editor e leitor) em um projeto, uma pasta ou uma organização HIGH Os papéis básicos são altamente permissivos, e a solução de insights desses papéis pode reduzir muito as permissões concedidas demais.
Insights que não concedem acesso público ou papéis básicos LOW Embora esses insights destaquem as permissões em excesso, eles não envolvem acesso público ou papéis básicos altamente permissivos, o que as torna uma prioridade mais baixa.

Todos os insights de movimento lateral têm uma gravidade de LOW.

Como as recomendações de papel são aplicadas

O recomendador não aplica recomendações automaticamente. Em vez disso, você precisa avaliar as recomendações e decidir se quer aplicá-las ou dispensá-las. Para saber como revisar, aplicar e dispensar recomendações de papéis, consulte Analisar e aplicar recomendações de papéis para projetos, pastas e organizações ou Analisar e aplicar recomendações de papéis para buckets do Cloud Storage.

Registro de auditoria

Quando você aplica ou descarta uma recomendação, o Recomendador do IAM cria uma entrada de registro. É possível ver essas entradas no histórico de recomendações ou nos registros de auditoria do Google Cloud.

Subtipos de recomendações de papéis

As recomendações de papel são divididas em vários subtipos diferentes com base na ação que recomendam. Se você usa a CLI gcloud ou a API REST, use esses subtipos para filtrar as recomendações.

Subtipo Descrição
REMOVE_ROLE Uma recomendação para remover o papel principal do projeto, da pasta ou da organização.
REMOVE_ROLE_STORAGE_BUCKET Uma recomendação para remover o papel no nível do bucket principal.
REPLACE_ROLE Uma recomendação para substituir o papel do principal no nível do projeto, da pasta ou da organização por um papel menos permissivo. A substituição recomendada pode ser um papel personalizado existente ou um ou mais papéis predefinidos.
REPLACE_ROLE_CUSTOMIZABLE Uma recomendação para substituir o papel de principal por um novo papel personalizado que seja menos abrangente do que o papel atual.
REPLACE_ROLE_STORAGE_BUCKET Uma recomendação para substituir o papel do nível principal do bucket por um papel menos permissivo. A substituição recomendada pode ser um papel personalizado existente ou um ou mais papéis predefinidos.
SERVICE_AGENT_WITH_DEFAULT_ROLE Uma recomendação para substituir o papel de Proprietário, Editor ou Visualizador de uma conta de serviço gerenciada pelo Google pelo papel concedido automaticamente à conta de serviço quando ela foi criada. Para mais informações, consulte Recomendações para contas de serviço gerenciadas pelo Google.
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Uma recomendação para substituir o papel de Proprietário, Editor ou Visualizador de uma conta de serviço gerenciada pelo Google por um papel menos permissivo. Para mais informações, consulte Recomendações para contas de serviço gerenciadas pelo Google.

Recomendações para contas de serviço gerenciadas pelo Google

Para contas de serviço gerenciadas pelo Google, o recomendador do IAM fornece recomendações apenas para vinculações de papéis com papéis básicos (Proprietário, Editor ou Visualizador).

As recomendações para contas de serviço gerenciadas pelo Google são divididas em dois subtipos de recomendações.

SERVICE_AGENT_WITH_DEFAULT_ROLE

Durante a criação, algumas contas de serviço gerenciadas pelo Google recebem automaticamente um papel de agente de serviço para garantir que os serviços do Google Cloud funcionem corretamente. Se você substituir esse papel por um papel básico, como Proprietário, Editor ou Visualizador, o recomendador do IAM poderá sugerir que você restaure o papel original do agente de serviço para remover permissões em excesso, mesmo que ele tenha permissões que não estão no papel básico. Essas recomendações têm o subtipo SERVICE_AGENT_WITH_DEFAULT_ROLE. Elas ajudam a remover com segurança as permissões em excesso e garantir que todos os serviços do Google Cloud funcionem corretamente.

As recomendações de SERVICE_AGENT_WITH_DEFAULT_ROLE são o único tipo de recomendação que pode sugerir papéis com permissões que não estejam no papel atual.

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

Se uma conta de serviço gerenciada pelo Google não receber automaticamente um papel durante a criação, as recomendações serão baseadas exclusivamente nas permissões usadas pela conta de serviço. Essas recomendações têm o subtipo SERVICE_AGENT_WITHOUT_DEFAULT_ROLE.

Exemplos de recomendações de papéis

Estes exemplos mostram os tipos de recomendações que talvez você receba:

Revogar um papel atual

O usuário my-user@example.com recebeu o papel Navegador em um projeto. O papel Navegador inclui seis permissões que autorizam o usuário a ver os recursos no projeto. No entanto, durante os últimos 90 dias, my-user@example.com não viu nenhum recurso.

Portanto, o Recomendador gera uma recomendação de papel sugerindo que você revogue o papel Navegador de my-user@example.com:

Console

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "This role has not been used during the observation window.",
  "etag": "\"9fc3241da8bfab51\"",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REMOVE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "description": "This role has not been used during the observation window.",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"9fc3241da8bfab51\"",
  "recommenderSubtype": "REMOVE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "priority": "P4"
}

Substituir um papel atual

Uma conta de serviço recebeu o papel Editor (roles/editor) em um projeto. Esse papel básico inclui mais de 3.000 permissões e concede amplo acesso ao projeto. No entanto, durante os últimos 90 dias, a conta de serviço usou apenas algumas permissões.

Portanto, o Recomendador gera uma recomendação de papel sugerindo que você revogue o papel Editor e substitua-o por uma combinação de dois outros papéis, o que remove milhares de permissões excedentes:

Console

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountUser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "member": "user:my-user@example.com",
      "minimumObservationPeriodInDays": "0",
      "removedRole": "roles/editor",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "etag": "\"0da9a354c2a83d96\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "priority": "P2",
  "recommenderSubtype": "REPLACE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountOwner"
            }
          },
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/editor",
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"0da9a354c2a83d96\"",
  "recommenderSubtype": "REPLACE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "priority": "P2"
}

Criar um papel personalizado

O usuário my-user@example.com recebeu o papel Administrador do Cloud Trace (roles/cloudtrace.admin) em um projeto. O papel inclui mais de 10 permissões, mas um insight de política indica que, nos últimos 90 dias, my-user@example.com usou apenas 4 dessas permissões.

Portanto, o Recomendador gera uma recomendação de papel sugerindo que você crie um papel personalizado que inclua apenas as permissões que my-user@example.com realmente usou:

Console

gcloud

O subtipo REPLACE_ROLE_CUSTOMIZABLE indica que o recomendador recomenda criar um papel personalizado com as permissões usadas. Para ver as permissões usadas, consulte a visão da política associada.

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "associatedResourceNames": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "etag": "\"c7f57a4725d32d66\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "originalContent": {},
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {},
      "revokedIamPermissionsCount": 1
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ]
}

REST

O subtipo REPLACE_ROLE_CUSTOMIZABLE indica que o recomendador recomenda criar um papel personalizado com as permissões usadas. Para ver as permissões usadas, consulte a visão da política associada.

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 1
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            }
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"c7f57a4725d32d66\"",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "priority": "P4"
}

O Recomendador do IAM também sugere outra opção, que é substituir o papel atual pelo de Usuário do Cloud Trace (roles/cloudtrace.user). Esse papel predefinido inclui menos permissões que o papel Administrador do Cloud Trace.

Substituição de papéis com permissões sugeridas por machine learning

Uma conta de serviço recebeu o papel Editor (roles/editor) em um projeto. Esse papel básico inclui mais de 3.000 permissões e concede amplo acesso a um projeto. No entanto, um insight de política indica que, nos últimos 90 dias, a conta de serviço usou menos de 10 permissões.

O insight de política também destaca várias permissões que a conta de serviço provavelmente precisará no futuro. O recomendador identificou essas permissões usando o machine learning.

O Recomendador gera uma recomendação de papel sugerindo que você revogue o papel de Editor e substitua-o pelo papel de Administrador de objetos do Storage (roles/storage.objectAdmin), que concede controle total de objetos em um bucket do Cloud Storage. Essa alteração remove milhares de permissões em excesso, enquanto ainda inclui as permissões usadas pela conta de serviço e as permissões que a conta de serviço provavelmente precisará no futuro:

Console

O recomendador usa um ícone de machine learning para identificar permissões que foram adicionadas com base no aprendizado de máquina do recomendador em vez de no uso de permissões. Neste exemplo, a permissão resourcemanager.projects.get foi recomendada com base em machine learning:

gcloud

As permissões adicionadas com base no aprendizado de máquina das recomendações, e não no uso das permissões, não são listadas na recomendação. Em vez disso, elas são listadas nos insights de política associados à recomendação. Todas as permissões com base em ML estão listadas no campo inferredPermissions do insight. Neste exemplo, a permissão resourcemanager.projects.get foi recomendada com base no machine learning:

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '5069'
  exercisedPermissions:
  - permission: storage.objects.create
  - permission: storage.objects.delete
  - permission: storage.objects.get
  - permission: storage.objects.list
  inferredPermissions:
  - permission: resourcemanager.projects.get
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/editor
description: 4 of the permissions in this role binding were used in the past 90 days.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012
severity: HIGH

Para saber como conseguir insights de política, consulte Revisar insights de política.

REST

As permissões adicionadas com base no aprendizado de máquina das recomendações, e não no uso das permissões, não são listadas na recomendação. Em vez disso, elas são listadas nos insights de política associados à recomendação. Todas as permissões com base em ML estão listadas no campo inferredPermissions do insight. Neste exemplo, a permissão resourcemanager.projects.get foi recomendada com base no machine learning:

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "4 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/editor",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [
      {
        "permission": "storage.objects.create"
      },
      {
        "permission": "storage.objects.delete"
      },
      {
        "permission": "storage.objects.get"
      },
      {
        "permission": "storage.objects.list"
      }
    ],
    "inferredPermissions": [
      {
        "permission": "resourcemanager.projects.get"
      }
    ],
    "currentTotalPermissionsCount: "5069"
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"d3cdec23cc712bd0\"",
  "severity": "HIGH"
}

Para saber como conseguir insights de política, consulte Revisar insights de política.

A seguir