Perguntas frequentes e solução de problemas

Veja a seguir problemas comuns que podem ocorrer ao interagir com a API Cloud Asset e como lidar com eles.

Por que minha solicitação tem credenciais de autenticação inválidas?

Se você não tiver configurado o cabeçalho OAuth corretamente, uma chamada retornará o seguinte erro:

{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected
               OAuth 2 access token, login cookie or other valid
               authentication credential. See
               https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "Authentication error: 2"
      }
    ]
  }
}

Para resolver esse problema, repita os passos para verificar sua configuração inicial.

Por que não tenho permissão para usar a API Cloud Asset?

Se você não tiver permissão para exportar recursos ou receber o histórico em uma organização, projeto ou pasta, será retornado um erro.

Por exemplo, se você não tiver permissão, executar o seguinte comando:

gcurl -d '{"outputConfig":{"gcsDestination": \
{"uri":gs://YOUR_BUCKET/NEW_FILE}}}' \
https://cloudasset.googleapis.com/v1/projects/PROJECT_NUMBER:exportAssets

Gerará o seguinte erro:

{
 "error": {
  "code": 403,
  "message": "The caller does not have permission",
  "status": "PERMISSION_DENIED",
  "details": [
   {
    "@type": "type.googleapis.com/google.rpc.DebugInfo",
    "detail": "[ORIGINAL ERROR] generic::permission_denied: Request
    denied by Cloud IAM."
   }
  ]
 }
}

Para resolver esse problema, solicite acesso ao administrador do seu projeto pasta ou organização. Dependendo dos recursos que você está tentando exportar ou do qual quer receber o histórico, você precisará de um dos seguintes papéis ou de outros que incluam as permissões necessárias da API do Cloud Asset:

  • cloudasset.viewer
  • cloudasset.owner

Para mais informações sobre papéis e permissões, veja Noções básicas sobre papéis.

Para mais informações sobre as opções de controle de acesso para APIs do Cloud Asset, consulte Controle de acesso.

Por que minha exportação para os comandos do Cloud Storage está falhando?

Se o bucket do Cloud Storage usado para armazenar dados exportados não estiver no projeto com a API Cloud Asset ativada em que você está executando a exportação, a solicitação resultará no seguinte erro de permissão negada:

    {
     "error": {
      "code": 7,
      "message": "Failed to write to: YOUR_BUCKET/FILE",
     }
    }
    

Para resolver esse problema, use um bucket do Cloud Storage que pertença ao projeto com a API Cloud Asset ativada em que você está executando a exportação ou conceda à conta de serviço service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com o papel roles/storage.admin , em que PROJECT_NUMBER é o número do projeto com a API Cloud Asset ativada em que você está executando a exportação.

Por que a API Cloud Asset está desatualizada?

A atualização dos dados na API do Cloud Asset é feita com base no melhor esforço. Mesmo que quase todas as atualizações de recursos estejam disponíveis em minutos para os clientes, em casos raros é possível que o resultado dos métodos ExportAssets ou BatchGetAssetsHistory não inclua as atualizações mais recentes.

Para selecionar as atualizações mais recentes de recursos, ajuste o carimbo de data/hora nas chamadas da API Cloud Asset para que sejam dois minutos mais antigos que a data/hora atual.

Por que os arquivos temporários são gerados depois da execução de ExportAssets?

A operação ExportAssets pode criar arquivos temporários na pasta de saída. Não remova esses arquivos enquanto a operação estiver em andamento. Quando ela for concluída, os arquivos temporários serão removidos automaticamente.

Se os arquivos temporários não forem excluídos, será possível removê-los com segurança após a conclusão da operação ExportAssets.

E se meu URL de solicitação for muito longo para BatchGetAssetsHistory?

O método BatchGetAssetsHistory é uma ação HTTP GET que envia todos os dados da solicitação em um URL com tamanho limitado. Como resultado, ocorrerá um erro se a solicitação for muito longa.

Para ignorar isso, o código do cliente precisa usar o HTTP POST para enviar uma solicitação com Content-Type definido como application/x-www-form-urlencoded, além de um cabeçalho HTTP X-HTTP-Method-Override: GET. Para mais informações, veja URLs de solicitação longa.

Veja a seguir um exemplo de solicitação de BatchGetAssetsHistory usando HTTP POST:

curl -X POST -H "X-HTTP-Method-Override: GET" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -H "Authorization: Bearer " \
     -d 'assetNames=&contentType=1&readTimeWindow.startTime=2018-09-01T09:00:00Z' \
     https://cloudasset.googleapis.com/v1/projects/:batchGetAssetsHistory

Por que minha credencial do SDK do Cloud ou do Cloud Shell foi rejeitada?

Se um projeto de usuário em uma solicitação for enviado para cloudasset.googleapis.com a partir do SDK do Cloud ou do Cloud Shell, você verá uma mensagem de erro como esta:

Your application has authenticated using end user credentials from the
Cloud SDK or Cloud Shell which are not supported by the
cloudasset.googleapis.com. We recommend that most server applications
use service accounts instead. For more information about service accounts
and how to use them in your application, see
https://cloud.google.com/docs/authentication/.

Para corrigir esse problema, defina o projeto do usuário como o ID do projeto do usuário com a API Cloud Asset ativada. Isso pode ser feito especificando o cabeçalho HTTP X-Goog-User-Project na solicitação HTTP.

Se você estiver usando curl, isso pode ser feito adicionando o seguinte parâmetro:

-H 'X-Goog-User-Project: PROJECT_ID'

Se estiver usando a ferramenta gcloud, especifique a sinalização --billing-project <var>PROJECT_ID</var> junto com o comando gcloud asset ou use o seguinte comando:

gcloud config set billing/quota_project PROJECT_ID

Como faço para exportar recursos para tabelas do BigQuery que não pertencem ao projeto atual?

Quando você chama a API ExportAssets do projeto ativado pela API Cloud Asset (A), ela usa a conta de serviço service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com para gravar na tabela de destino do BigQuery. Para enviar para uma tabela do BigQuery em outro projeto (B):

Na política de gerenciamento de identidade e acesso (IAM, na sigla em inglês) do projeto B, conceda à conta de serviço (service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com) os papéis roles/bigquery.user e roles/bigquery.dataEditor.

Por que vejo ancestrais diferentes para os mesmos recursos?

Ao chamar a API Cloud Asset para receber diferentes tipos de metadados, como metadados RESOURCE e metadados IAM POLICY para o mesmo recurso, é possível que o campo ancestors esteja inconsistente no conteúdo de pesquisa. Isso acontece porque há programações de processamento de dados diferentes para cada tipo de conteúdo e, até que o processo de ingestão seja concluído, eles podem ser inconsistentes. Verifique o campo update_time para garantir que o recurso tenha as informações mais atualizadas.

Entre em contato conosco se a inconsistência durar mais de 24 horas.

Com que frequência posso chamar a API ExportAssets?

Recomendamos chamar a API ExportAssets para a mesma organização/pasta/projeto em ordem sequencial. Por exemplo, emita a segunda chamada após a conclusão da anterior. Para capturar atualizações de recursos em tempo real, use notificações em tempo real.

Receber atualizações de recursos duplicados

Depois de configurar as notificações em tempo real, é possível receber atualizações de recursos duplicadas no seu tópico do Pub/Sub. Isso é causado por uma tentativa automática de repetição da entrega, já que o Pub/Sub não garante entrega pelo menos uma vez.