Veja a seguir problemas comuns que podem ocorrer ao interagir com a API Cloud Asset e como lidar com eles.
O Inventário de recursos do Cloud é um serviço global?
Sim. A API Cloud Asset não depende do local. Ela tem um endpoint global, que exibe os metadados de todos os recursos regionais e globais aceitos no Inventário de recursos do Cloud. A API Cloud Asset pode ser acessada em qualquer zona.
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. Embora quase todas as atualizações de recursos fiquem disponíveis em minutos para os clientes, em casos raros é possível que o resultado dos métodos da API Cloud Asset não inclua as atualizações de recursos mais recentes.
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 Google Cloud CLI ou do Cloud Shell é rejeitada?
Se um projeto de usuário em uma solicitação for enviado para
cloudasset.googleapis.com
a partir da CLI do Google Cloud ou do Cloud Shell,
você verá uma mensagem de erro como esta:
Your application has authenticated using end user credentials from the Google Cloud CLI 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 você estiver usando a CLI gcloud, especifique a sinalização --billing-project <var>PROJECT_ID</var>
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.
Por que não recebi notificações de exclusões de projetos?
Ao encerrar um projeto, você tem
30 dias
para desfazer a operação. O campo deleted
na notificação não é definido até que
o projeto seja excluído permanentemente. Para monitorar projetos com exclusão
pendente, defina um feed com uma
condição
no lifecycleState
do projeto.
Por exemplo: temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED"
.