Gerenciar insights da conta de serviço

Além de fazer recomendações, o Recomendador usa machine learning (ML) para apresentar insights detalhados. Os insights são descobertas que destacam padrões notáveis no uso de recursos. Por exemplo, é possível coletar mais informações sobre o uso de permissões no projeto ou identificar contas de serviço não utilizadas. Alguns insights também estão vinculados às recomendações porque são evidências delas.

O IAM oferece vários tipos diferentes de insights. Esta página mostra como gerenciar insights de conta de serviço (google.iam.serviceAccount.Insight), que são descobertas sobre quais contas de serviço no projeto não foram usadas nos últimos 90 dias.

Antes de começar

Opcional: leia sobre os insights do recomendador.

Permissões necessárias

As permissões necessárias para usar os insights da conta de serviço variam de acordo com o que você quer fazer.

Permissões para ver insights

Para visualizar os insights da conta de serviço, você precisará de um papel que inclua estas permissões:

  • recommender.iamServiceAccountinsights.get
  • recommender.iamServiceAccountinsights.list

Para ter essas permissões seguindo o princípio do privilégio mínimo, peça ao administrador para conceder a você um dos seguintes papéis:

  • Leitor do recomendador do IAM (roles/recommender.iamViewer)
  • Revisor de segurança do IAM (roles/iam.securityReviewer)

Como alternativa, o administrador pode conceder a você um papel diferente que inclua as permissões necessárias, como um papel personalizado ou um papel predefinido mais permissivo.

Permissões para modificar insights

Para modificar os insights da conta de serviço, você precisa de um papel que inclua estas permissões:

  • recommender.iamServiceAccountinsights.get
  • recommender.iamServiceAccountinsights.list
  • recommender.iamServiceAccountinsights.update

Para receber essas permissões seguindo o princípio do privilégio mínimo, peça ao administrador que conceda a você o papel de administrador do recomendador do IAM (roles/recommender.iamAdmin).

Como alternativa, o administrador pode conceder a você um papel diferente que inclua as permissões necessárias, como um papel personalizado ou um papel predefinido mais permissivo.

Listar insights da conta de serviço

Para listar todos os insights da conta de serviço do projeto, use um dos métodos a seguir:

gcloud

Use o comando gcloud recommender insights list para ver todos os insights da conta de serviço do projeto.

Antes de executar o comando, substitua os seguintes valores:

  • PROJECT_ID: o ID do projeto para o qual você quer listar insights.
gcloud recommender insights list --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

A saída lista todos os insights da conta de serviço do projeto. Exemplo:

INSIGHT_ID                            LOCATION  INSIGHT_TYPE                       CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME
446303ba-2a14-49cc-b9fa-e2d2499d4f82  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
4cfd82c3-7320-4dc6-9b67-ca0756bbd54c  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
52ce7097-6787-41cd-91e9-9248147ecfaf  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
54abdb81-a7d9-4733-988b-c0e499c6d715  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z
a922dd59-df0a-422d-a2a4-096195e1dae5  global    google.iam.serviceAccount.Insight  SECURITY  ACTIVE         2021-04-18T07:00:00Z

REST

O método insights.list da API Recommender lista todos os insights de conta de serviço do projeto.

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

  • PROJECT_ID: o ID do projeto para o qual você quer listar insights.

Método HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights

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

A resposta lista todos os insights da conta de serviço no projeto. Exemplo:

{
  "insights": [
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
      "description": "Service account my-service-account@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "103185812403937829397",
        "email": "my-service-account@my-project.iam.gserviceaccount.com",
        "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
      },
      "lastRefreshTime": "2021-04-18T07:00:00Z",
      "observationPeriod": "19008000s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"9d797dd04263c855\""
    },
    {
      "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/4cfd82c3-7320-4dc6-9b67-ca0756bbd54c",
      "description": "Service account my-service-account2@my-project.iam.gserviceaccount.com was inactive.",
      "content": {
        "serviceAccountId": "105496400997178042131",
        "email": "my-service-account2@my-project.iam.gserviceaccount.com"
      },
      "lastRefreshTime": "2021-04-18T07:00:00Z",
      "observationPeriod": "16070400s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "targetResources": [
        "//cloudresourcemanager.googleapis.com/projects/123456789012"
      ],
      "insightSubtype": "SERVICE_ACCOUNT_USAGE",
      "etag": "\"783a32b635d79a4e\""
    }
  ]
}

Para saber mais sobre os componentes de um insight, consulte Analisar insights da conta de serviço nesta página.

Receber um único insight da conta de serviço

Para mais informações sobre um único insight, incluindo a descrição, o status e as recomendações associadas, use um dos seguintes métodos:

gcloud

Use o comando gcloud recommender insights describe com o ID do insight para ver as informações sobre um único insight.

  • INSIGHT_ID: o ID do insight que você quer ver. Para encontrar o ID, liste os insights do projeto.
  • PROJECT_ID: o ID do projeto para o qual você quer gerenciar insights.
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global

A saída mostra os insights detalhados. Por exemplo, o insight a seguir indica que a conta de serviço my-service-account@my-project.iam.gserviceaccount.com foi autenticada pela última vez em 11 de outubro de 2020.

category: SECURITY
content:
  email: my-service-account@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account my-service-account@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"9d797dd04263c855"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2021-04-18T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

Para saber mais sobre os componentes de um insight, consulte Analisar insights da conta de serviço nesta página.

REST

O método insights.get da API Recommender recebe um insight.

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

  • PROJECT_ID: o ID do projeto para o qual você quer gerenciar insights.
  • INSIGHT_ID: o ID do insight que você quer ver. Se não souber o ID, é possível encontrá-lo listando os insights no projeto. O ID de um insight é tudo o que aparece depois de insights/ no campo name do insight.

Método HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

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

A resposta contém o insight. Por exemplo, o insight a seguir indica que a conta de serviço my-service-account@my-project.iam.gserviceaccount.com foi autenticada pela última vez em 11 de outubro de 2020.

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account my-service-account@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "my-service-account@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-09-11T07:00:00Z"
  },
  "lastRefreshTime": "2021-04-18T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"9d797dd04263c855\""
}

Para saber mais sobre os componentes de um insight, consulte Analisar insights da conta de serviço nesta página.

Analisar insights da conta de serviço

Depois de receber um único insight, é possível analisar o conteúdo para entender o padrão de uso de recursos destacado

O conteúdo do insight é determinado pelos subtipos dele. Os insights da conta de serviço (google.iam.serviceAccount.Insight) são compatíveis com insights com o subtipo SERVICE_ACCOUNT_USAGE.

Os insights SERVICE_ACCOUNT_USAGE têm os seguintes componentes, não necessariamente nesta ordem:

  • associatedRecommendations: os identificadores de qualquer recomendação associada ao insight. Se não houver recomendações associadas ao insight, esse campo estará vazio.
  • category: a categoria dos insights do IAM é sempre SECURITY.
  • content: relata a última vez que a conta de serviço foi autenticada. Este campo contém os seguintes componentes:

    • email: o endereço de e-mail da conta de serviço.
    • lastAuthenticatedTime: o horário mais recente em que a conta de serviço foi autenticada. Se a conta de serviço não tiver autenticações registradas, esse campo não estará incluído.
    • serviceAccountId: o ID numérico exclusivo da conta de serviço.
  • description: um resumo legível do insight.
  • etag: um identificador exclusivo do estado atual de um insight. Sempre que o insight é alterado, um novo valor de etag é atribuído.

    Para alterar o estado de um insight, informe a etag do insight atual. O uso de etag ajuda a garantir que qualquer operação seja executada somente se o insight não tiver sido alterado desde a última vez que você o recuperou.

  • insightSubtype: o subtipo de insight.
  • lastRefreshTime: a data em que o insight foi atualizado pela última vez, o que indica a atualização dos dados usados para gerá-lo.
  • name: o nome do insight no seguinte formato:

    projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID

    Os marcadores têm os seguintes valores:

    • PROJECT_ID: o ID do projeto em que o insight foi gerado.
    • INSIGHT_ID: um ID exclusivo para o insight.
  • observationPeriod: o período antes do insight. Os dados de origem usados para gerar o insight terminam em lastRefreshTime e começam em lastRefreshTime menos observationPeriod.
  • stateInfo: os insights passam por várias transições de estado após serem propostos:

    • ACTIVE: o insight foi gerado, mas nenhuma ação foi realizada, ou uma ação foi realizada sem atualizar o estado dele. Os insights ativos são atualizados quando os dados subjacentes são alterados.
    • ACCEPTED: ocorreu uma ação com base no insight. Os insights são aceitos quando uma recomendação associada é marcada como CLAIMED, SUCCEEDED ou FAILED, ou quando o insight é aceito diretamente. Quando o estado do insight é ACCEPTED, o conteúdo dele não pode ser alterado. Os insights aceitos são mantidos por 90 dias após a aceitação.
  • targetResources: o nome completo do recurso do projeto relacionado ao insight. Por exemplo, //cloudresourcemanager.googleapis.com/projects/1234567890.

Marcar um insight de conta de serviço como ACCEPTED

Se você executar uma ação com base em um insight ativo, será possível marcá-lo como ACCEPTED. O estado ACCEPTED informa à API Recommender que você tomou medidas com base nesse insight, o que ajuda a refinar suas recomendações.

Os insights aceitos são mantidos por 90 dias depois de serem marcados como ACCEPTED.

gcloud

Use o comando gcloud recommender insights mark-accepted com o ID do insight para marcar um insight como ACCEPTED

  • INSIGHT_ID: o ID do insight que você quer ver. Para encontrar o ID, liste os insights do projeto.
  • PROJECT_ID: o ID do projeto para o qual você quer gerenciar insights.
  • ETAG: um identificador de uma versão do insight. Para receber o etag, faça o seguinte:

    1. Receba o insight usando o comando gcloud recommender insights describe.
    2. Encontre e copie o valor da etag na saída, incluindo as aspas delimitadoras. Por exemplo, "d3cdec23cc712bd0".
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.serviceAccount.Insight \
    --project=PROJECT_ID \
    --location=global \
    --etag=ETAG

A saída mostra o insight, agora com o estado ACCEPTED:

category: SECURITY
content:
  email: my-service-account@my-project.iam.gserviceaccount.com
  lastAuthenticatedTime: '2020-10-11T07:00:00Z'
  serviceAccountId: '103185812403937829397'
description: Service account my-service-account@my-project.iam.gserviceaccount.com
  was inactive.
etag: '"39c4199dcec92848"'
insightSubtype: SERVICE_ACCOUNT_USAGE
lastRefreshTime: '2021-04-18T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82
observationPeriod: 19008000s
stateInfo:
  state: ACCEPTED
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012

Para saber mais sobre as informações de estado de um insight, consulte Analisar insights da conta de serviço nesta página.

REST

O método insights.markAccepted da API Recommender marca um insight como ACCEPTED.

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

  • PROJECT_ID: o ID do projeto para o qual você quer gerenciar insights.
  • INSIGHT_ID: o ID do insight que você quer ver. Se não souber o ID, é possível encontrá-lo listando os insights no projeto. O ID de um insight é tudo o que aparece depois de insights/ no campo name do insight.
  • ETAG: identificador de uma versão do insight. Para receber o etag, faça o seguinte:
    1. Receba o insight usando o método insights.get.
    2. Encontre e copie o valor etag da resposta.

Método HTTP e URL:

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/INSIGHT_ID:markAccepted

Corpo JSON da solicitação:

{
  "etag": "ETAG"
}

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

A resposta contém o insight, agora com o estado ACCEPTED:

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.serviceAccount.Insight/insights/446303ba-2a14-49cc-b9fa-e2d2499d4f82",
  "description": "Service account my-service-account@my-project.iam.gserviceaccount.com was inactive.",
  "content": {
    "serviceAccountId": "103185812403937829397",
    "email": "my-service-account@my-project.iam.gserviceaccount.com",
    "lastAuthenticatedTime": "2020-10-11T07:00:00Z"
  },
  "lastRefreshTime": "2021-04-18T07:00:00Z",
  "observationPeriod": "19008000s",
  "stateInfo": {
    "state": "ACCEPTED"
    },
  "category": "SECURITY",
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "SERVICE_ACCOUNT_USAGE",
  "etag": "\"39c4199dcec92848\""
}

Para saber mais sobre as informações de estado de um insight, consulte Analisar insights da conta de serviço nesta página.

A seguir