Como avaliar e aplicar recomendações

Nesta página, explicamos como visualizar, entender e aplicar recomendações feitas pelo recomendador do IAM. O recomendador do IAM ajuda a aplicar o princípio do menor privilégio, garantindo que os membros tenham apenas as permissõesde que realmente precisam.

Antes de começar

Como avaliar e aplicar recomendações

A maneira mais fácil de avaliar e aplicar as recomendações é usando o Console do Google Cloud. Use o Console do Cloud para concluir algumas tarefas:

  • Como visualizar detalhes sobre o motivo pelo qual você recebeu uma recomendação.
  • Como dispensar recomendações.
  • Como criar um papel personalizado automaticamente ao aplicar uma recomendação.

Você também pode avaliar e aplicar recomendações com a ferramenta de linha de comando gcloud e a API Recommender.

Console

  1. No Console do Cloud, acesse a página IAM.

    Acessar a página "IAM"

  2. Na lista de membros do projeto, encontre a coluna Permissões analisadas.

    Para cada papel atribuído a um membro, essa coluna mostra o número de permissões em excesso, seguido pelo número total de permissões atribuídas a ele:

    O ícone Recomendação disponível indica que há recomendação disponível para o papel, tanto para revogá-lo quanto para substituí-lo por um papel que inclui menos permissões.

  3. Se houver recomendações para avaliar, clique em um ícone de Recomendação disponível para ver detalhes da recomendação.

    Se a recomendação for substituir o papel, o recomendador do IAM sempre irá sugerir um conjunto de papéis predefinidos que é possível aplicar.

    Em alguns casos, o recomendador do IAM também sugere a criação de um novo papel personalizado no nível do projeto. Se uma recomendação de papel personalizado estiver disponível, o Console do Cloud a mostrará por padrão. Para alternar para a recomendação de papel predefinido, clique em Visualizar papel predefinido recomendado.

  4. Avalie a recomendação com atenção e entenda como ela irá alterar o acesso do membro aos recursos do Google Cloud. Consulte Como avaliar recomendações para entender os tipos de alterações que uma recomendação pode incluir.

    Exceto no caso de recomendações para contas de serviço gerenciadas pelo Google, uma recomendação nunca aumenta o nível de acesso de um membro. Consulte Como o recomendador do IAM funciona para mais informações.

  5. (Opcional) Se a recomendação for criar um papel personalizado, atualize o Título, a Descrição, o ID e a Etapa de criação do papel conforme necessário.

    Se for necessário adicionar permissões ao papel personalizado, clique em Adicionar permissões.

    Se for necessário remover permissões do papel personalizado, desmarque a caixa de seleção de cada permissão que você queira remover.

  6. Tome providências com relação à recomendação.

    Para aplicar a recomendação, clique em Aplicar ou Criar e aplicar. Se você mudar de ideia nos próximos 90 dias, use os registros do recomendador do IAM para reverter a escolha.

    Para dispensar a recomendação, clique em Dispensar e confirme sua escolha. É possível restaurar uma recomendação dispensada, desde que a recomendação ainda seja válida.

  7. Repita as etapas anteriores até ter avaliado todas as recomendações.

gcloud

Revisar suas recomendações:

Para listar as recomendações, execute o comando gcloud recommender recommendations list:

gcloud recommender recommendations list \
    --location=global \
    --recommender=google.iam.policy.Recommender \
    --project=project-id \
    --format=format

Substitua os seguintes valores:

  • project-id: o identificador do projeto, como project-123.
  • format: o formato da resposta. Use json ou yaml.

A resposta é semelhante ao exemplo a seguir. Neste exemplo, uma conta de serviço não usou permissões do papel "Administrador" do Compute (roles/compute.admin) nos últimos 90 dias. Assim, o recomendador do IAM sugere que você revogue o papel:

[
  {
    "associatedInsights": [
      {
        "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/279ef748-408f-44db-9a4a-1ff8865b9839"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "description": "This role has not been used during the observation window.",
    "recommenderSubtype": "REMOVE_ROLE",
    "etag": "\"770237e2c0decf40\"",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
  }
]

Avalie cada recomendação com cuidado e veja como isso mudará o acesso do membro aos recursos do Google Cloud.

Para ver o uso da permissão na qual essa recomendação se baseia, consulte os insights associados a ela. Esses insights são listados no campo associatedInsights. Para visualizar um insight, faça o seguinte:

  • Copie o ID do insight. O ID do insight é tudo depois de insights/ no campo insight. No exemplo anterior, o ID do insight é 279ef748-408f-44db-9a4a-1ff8865b9839.
  • Siga as instruções para receber um insight, usando o ID que você copiou e o ID do tipo de insight google.iam.policy.Insight.

Para aplicar uma recomendação:

  1. Use o comando gcloud recommender recommendations mark-claimed para alterar o estado da recomendação para CLAIMED,, o que impede que a recomendação seja alterada enquanto você a aplica:

    gcloud recommender recommendations mark-claimed \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    Substitua os seguintes valores:

    • recommendation-id: o identificador exclusivo da recomendação. Esse valor é exibido no final do campo name na recomendação. No exemplo mostrado acima, o ID é fb927dc1-9695-4436-0000-f0f285007c0f.
    • project-id: o identificador do projeto, como project-123.
    • format: o formato da resposta. Use json ou yaml.
    • etag: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Observe que esse valor pode incluir aspas.
    • state-metadata: opcional. Pares de chave-valor separados por vírgula que contenham a opção de metadados sobre a recomendação. Por exemplo, --state-metadata=reviewedBy=alice,priority=high. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Se o comando for bem-sucedido, a resposta mostrará a recomendação em um estado CLAIMED, conforme mostrado no exemplo a seguir. Para esclarecer, o exemplo omite a maioria dos campos:

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"df7308cca9719dcc\"",
        "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "CLAIMED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]
  2. Veja a política do IAM do projeto e, em seguida, modifique a política para que ela reflita a recomendação.

  3. Se você tiver conseguido aplicar a recomendação, atualize o estado dela para SUCCEEDED. Caso contrário, atualize o estado para FAILED:

    gcloud recommender recommendations command \
        recommendation-id \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=project-id \
        --format=format \
        --etag=etag \
        --state-metadata=state-metadata
    

    Substitua os seguintes valores:

    • command: use mark-succeeded se tiver conseguido aplicar a recomendação. Caso contrário, use mark-failed.
    • recommendation-id: o identificador exclusivo da recomendação. Esse valor é exibido no final do campo name na recomendação. No exemplo mostrado acima, o ID é fb927dc1-9695-4436-0000-f0f285007c0f.
    • project-id: o identificador do projeto, como project-123.
    • format: o formato da resposta. Use json ou yaml.
    • etag: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Observe que esse valor pode incluir aspas.
    • state-metadata: opcional. Pares de chave-valor separados por vírgula que contenham a opção de metadados sobre a recomendação. Por exemplo, --state-metadata=reviewedBy=alice,priority=high. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Por exemplo, se você tiver marcado a recomendação como bem-sucedida, a resposta mostrará a recomendação em um estado SUCCEEDED. Para esclarecer, este exemplo omite a maioria dos campos:

    [
      {
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"dd0686e7136a4cbb\"",
        "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "stateInfo": {
          "state": "SUCCEEDED",
          "stateMetadata": {
            "reviewedBy": "alice",
            "priority": "high"
          }
        }
      }
    ]

REST

Revisar suas recomendações:

O método recommendations.list da API Recommender lista todas as recomendações disponíveis para seu projeto.

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

  • project-id: o ID do projeto do Google Cloud.
  • page-size: opcional. O número máximo de resultados a serem retornados a partir dessa solicitação. Se não especificado, o servidor determinará o número de resultados a serem retornados. Se o número de recomendações for maior que o tamanho da página, a resposta conterá um token de paginação que é possível usar para recuperar a próxima página de resultados.
  • page-token: opcional. O token de paginação retornado em uma resposta anterior desse método. Se especificado, a lista de recomendações começará onde a solicitaçãoanterior foi finalizada.
  • filter: opcional. Uma expressão de filtro para restringir as recomendações retornadas. É possível filtrar as recomendações com base no campo stateInfo.state. Por exemplo, stateInfo.state:"DISMISSED" ou stateInfo.state:"FAILED".

Método HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations?pageSize=page-size&pageToken=page-token&filter=filter

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

A resposta é semelhante ao exemplo a seguir. Neste exemplo, uma conta de serviço não usou permissões do papel "Administrador" do Compute(roles/compute.admin) nos últimos 90 dias. Assim, o recomendador do IAM sugere que você revogue o papel:

{
  "recommendations": [
    "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
    "description": "This role has not been used during the observation window.",
    "lastRefreshTime": "2020-01-09T06:06:17Z",
    "primaryImpact": {
      "category": "SECURITY",
        "securityProjection": {
          "revokedIamPermissionsCount": 708
        }
    },
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilter": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                "/iamPolicy/bindings/*/role": "roles/compute.admin"
              },
              "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
              "resourceType": "cloudresourcemanager.googleapis.com/Project"
            }
          ]
        }
      ]
    },
    "stateInfo": {
      "state": "ACTIVE"
    }
    "etag": "\"770237e2c0decf40\"",
    "recommenderSubtype": "REMOVE_ROLE",
    "associatedInsights": [
      {
        "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/279ef748-408f-44db-9a4a-1ff8865b9839"
      }
  ]
}

Avalie cada recomendação com cuidado e veja como isso mudará o acesso do membro aos recursos do Google Cloud.

Para ver o uso da permissão na qual essa recomendação se baseia, consulte os insights associados a ela. Esses insights são listados no campo associatedInsights. Para visualizar um insight, faça o seguinte:

  • Copie o ID do insight. O ID do insight é tudo depois de insights/ no campo insight. No exemplo anterior, o ID do insight é 279ef748-408f-44db-9a4a-1ff8865b9839.
  • Siga as instruções para receber um insight, usando o ID que você copiou e o ID do tipo de insight google.iam.policy.Insight.

Para aplicar uma recomendação:

  1. Marque a recomendação como CLAIMED:

    O método recommendations.markClaimed da API Recommender marca uma recomendação como CLAIMED, o que impede que a recomendação seja alterada enquanto você a aplica.

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

    • project-id: o ID do projeto do Google Cloud.
    • recommendation-id: o identificador exclusivo da recomendação. Esse valor é exibido no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID de recomendação será fb927dc1-9695-4436-0000-f0f285007c0f.
    • etag: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Use barras invertidas para escapar das aspas, por exemplo, "\"df7308cca9719dcc\"".
    • state-metadata: opcional. Um objeto que contém pares de chave-valor com a opção de metadados sobre a recomendação. Por exemplo, {"reviewedBy": "alice", "priority": "high"}. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Método HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markClaimed

    Corpo JSON da solicitação:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

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

    A resposta mostra a recomendação em um estado CLAIMED, conforme mostrado no exemplo a seguir. Para esclarecer, este exemplo omite a maioria dos campos:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "CLAIMED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

  2. Veja a política do IAM do projeto e, em seguida, modifique a política para que ela reflita a recomendação.

  3. Se você tiver conseguido aplicar a recomendação, atualize o estado dela para SUCCEEDED. Caso contrário, atualize o estado para FAILED:

    SUCCEEDED

    O método recommendations.markSucceeded da API Recommender marca uma recomendação como SUCCEEDED, indicando que você conseguiu aplicá-la.

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

    • project-id: o ID do projeto do Google Cloud.
    • recommendation-id: o identificador exclusivo da recomendação. Esse valor é exibido no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID de recomendação será fb927dc1-9695-4436-0000-f0f285007c0f.
    • etag: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Use barras invertidas para escapar das aspas, por exemplo, "\"df7308cca9719dcc\"".
    • state-metadata: opcional. Um objeto que contém pares de chave-valor com a opção de metadados sobre a recomendação. Por exemplo, {"reviewedBy": "alice", "priority": "high"}. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Método HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markSucceeded

    Corpo JSON da solicitação:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

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

    A resposta mostra a recomendação em um estado SUCCEEDED, conforme mostrado no exemplo a seguir. Para esclarecer, este exemplo omite a maioria dos campos:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "SUCCEEDED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

    FAILED

    O método recommendations.markFailed da API Recommender marca uma recomendação como FAILED, indicando que não foi possível aplicá-la.

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

    • project-id: o ID do projeto do Google Cloud.
    • recommendation-id: o identificador exclusivo da recomendação. Esse valor é exibido no final do campo name na recomendação. Por exemplo, se o campo name for projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, o ID de recomendação será fb927dc1-9695-4436-0000-f0f285007c0f.
    • etag: o valor do campo etag na recomendação, como "dd0686e7136a4cbb". Use barras invertidas para escapar das aspas, por exemplo, "\"df7308cca9719dcc\"".
    • state-metadata: opcional. Um objeto que contém pares de chave-valor com a opção de metadados sobre a recomendação. Por exemplo, {"reviewedBy": "alice", "priority": "high"}. Os metadados substituem o campo stateInfo.stateMetadata na recomendação.

    Método HTTP e URL:

    POST https://recommender.googleapis.com/v1/projects/project-id/locations/global/recommenders/google.iam.policy.Recommender/recommendations/recommendation-id:markFailed

    Corpo JSON da solicitação:

    {
      "etag": "etag"
      "stateMetadata": {
        "state-metadata"
    }
    

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

    A resposta mostra a recomendação em um estado FAILED, conforme mostrado no exemplo a seguir. Para esclarecer, este exemplo omite a maioria dos campos:

    {
      "description": "This role has not been used during the observation window.",
      "stateInfo": {
        "state": "FAILED",
        "stateMetadata": {
          "reviewedBy": "alice",
          "priority": "high"
        }
      }
      "etag": "\"dd0686e7136a4cbb\"",
      "recommenderSubtype": "REMOVE_ROLE"
    }
    

Como visualizar, reverter e restaurar alterações

Depois de aplicar ou dispensar uma recomendação, essa ação será exibida no histórico de recomendações. Para ver o histórico, siga estas etapas:

  1. No Console do Cloud, acesse a página IAM.

    Acessar a página "IAM"

  2. Próximo à parte superior da tela, clique em Histórico de recomendações.

    O Console do Cloud mostra uma lista de ações anteriores nas recomendações do IAM.

  3. Para visualizar detalhes sobre uma recomendação, clique na seta expansora .

    O Console do Cloud mostra detalhes sobre a ação que foi realizada, inclusive o membro que executou a ação:

  4. (Opcional) Se necessário, é possível reverter a recomendação, o que desfará as alterações feitas. Também é possível restaurar uma recomendação dispensada.

    Para reverter uma alteração aplicada anteriormente a uma recomendação, clique em Reverter. O Console do Cloud reverte as alterações para os papéis do membro. A recomendação não aparece mais no Console do Cloud.

    Para restaurar uma recomendação dispensada, clique em Restaurar. A recomendação ficará visível na página IAM do Console do Cloud. Nem papéis nem permissões são alterados.

A seguir