O Inventário de recursos do Cloud é um serviço global?
Sim. A API Cloud Asset não depende do local. Ele tem um endpoint global, exibe os metadados de todos os recursos regionais e globais compatíveis no Inventário de recursos do Cloud. A API Cloud Asset pode ser acessada em qualquer zona.
Que tipo de consistência de dados o Cloud Asset Inventory oferece?
O Inventário de recursos do Cloud fornece consistência posterior nos dados atuais e no melhor esforço consistência nos dados históricos. Apesar da baixa chance na prática, é que o Inventário de recursos do Cloud perca algumas atualizações de um recurso no passado.
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:
curl -X POST \
-H "X-Goog-User-Project: BILLING_PROJECT_ID" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"outputConfig": {
"gcsDestination": {
"uri": "gs://BUCKET_NAME/FILENAME"
}
}
}' \
https://cloudasset.googleapis.com/v1/projects/PROJECT_ID:exportAssets
Retorna 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 conseguir o histórico, você precisa de uma das funções a seguir ou outras que incluam o permissões necessárias da API 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 minhas exportações estão retornando um erro de permissão negada?
A menos que você especifique o contrário, o Cloud Asset Inventory usa a conta de serviço padrão do Cloud Asset Inventory no projeto ativo para gerenciar recursos como tópicos do Pub/Sub, buckets do Cloud Storage e tabelas do BigQuery. Isso conta de serviço é criada na primeira vez que você chama a API Cloud Asset Inventory de um e, por padrão, tem permissão para gerenciar esses recursos, estejam localizados no mesmo projeto.
Você pode receber erros de permissão negada nas seguintes situações:
quando usar a API REST, que não define um projeto ativo. Portanto, O Inventário de recursos do Cloud não sabe qual conta de serviço usar.
Ao usar a CLI gcloud em um projeto diferente daquele em que o tópico do Pub/Sub, o bucket do Cloud Storage ou a tabela do BigQuery estão localizados. Isso significa que o Inventário de recursos do Cloud padrão do projeto ativo conta de serviço é usada para executar a tarefa (se existir) e pode não têm permissões para gravar nos recursos do outro projeto.
Para garantir que a conta de serviço correta seja usada ao fazer solicitações de exportação para tópicos do Pub/Sub, buckets do Cloud Storage ou tabelas do BigQuery, especifique o ID do projeto que contém a conta de serviço padrão correta do Cloud Asset Inventory. Se você estiver exportando de um projeto para outro, você também precisa conceder papéis específicos à conta de serviço.
gcloud
Para a CLI gcloud, adicione a flag --billing-project
ao comando para especificar o ID do projeto que contém a conta de serviço correta:
--billing-project=BILLING_PROJECT_ID
Como alternativa, você pode definir o projeto de faturamento antes de executar comandos com a CLI gcloud. Primeiro, verifique se o projeto de faturamento é diferente do projeto principal:
gcloud config list
Em seguida, se necessário, defina o projeto de faturamento:
gcloud config set billing/quota_project BILLING_PROJECT_ID
Forneça os valores a seguir:
BILLING_PROJECT_ID
: um ID do projeto que tem o A API Cloud Asset Inventory está ativada e uma conta de serviço com permissões para gerenciar o tópico de destino do Pub/Sub, o bucket do Cloud Storage ou Tabela do BigQuery.
REST
Para a API REST, adicione o cabeçalho X-Goog-User-Project
para especificar o ID do projeto que contém a conta de serviço correta. Ao usar curl
, você define
o cabeçalho com a sinalização -H
:
-H "X-Goog-User-Project: BILLING_PROJECT_ID"
Forneça os valores a seguir:
BILLING_PROJECT_ID
: um ID de projeto com a API Cloud Asset Inventory ativada e uma conta de serviço com permissões para gerenciar o tópico de destino do Pub/Sub, o bucket do Cloud Storage ou a tabela do BigQuery.
Exportar metadados de recursos de um projeto para outro
Para exportar metadados do recurso de um projeto, PROJECT_A
,
a outro, PROJECT_B
, é preciso definir o padrão
à conta de serviço do Inventário de recursos do Cloud no acesso PROJECT_A
ao
em PROJECT_B
. Isso viabiliza duas coisas:
É possível exportar metadados do recurso de
PROJECT_A
para um Tópico do Pub/Sub, bucket do Cloud Storage ou BigQuery localizada emPROJECT_B
.É possível usar
PROJECT_A
para exportar metadados de recursos dePROJECT_B
para um tópico do Pub/Sub, um bucket do Cloud Storage ou uma tabela do BigQuery localizado emPROJECT_B
.
Para exportar metadados de recursos de um projeto para outro, faça o seguinte: instruções:
Confira se a API Cloud Asset Inventory esteja ativada no projeto a partir do qual você quer executar a solicitação;
PROJECT_A
Faça pelo menos uma chamada para a API Cloud Asset Inventory
PROJECT_A
para criar o Inventário de recursos do Cloud padrão conta de serviço. Você também pode criar manualmente:gcloud beta services identity create \ --service=cloudasset.googleapis.com \ --project=PROJECT_A_ID gcloud projects add-iam-policy-binding PROJECT_A_ID \ --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/cloudasset.serviceAgent
Como encontrar um número de projeto do Google Cloud
Console
Para encontrar um número de projeto do Google Cloud, siga estas etapas:
-
Acesse a página Painel no console do Google Cloud.
- Clique na caixa Alternador na barra de menus.
- Selecione sua organização na caixa Selecionar de e pesquise o nome do projeto.
- Clique no nome do projeto para alternar para ele. O número do projeto aparece no card Informações do projeto.
CLI da gcloud
Recupere um número de projeto do Google Cloud com o seguinte comando:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
Conceda as permissões corretas à conta de serviço.
Para publicar em um feed pelo Pub/Sub, conceda o papel
roles/pubsub.publisher
à conta de serviço no tópico:gcloud pubsub topics add-iam-policy-binding projects/PROJECT_B_ID/topics/TOPIC_ID \ --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
Para gravar em um bucket do Cloud Storage, conceda
roles/storage.objectCreator
à conta de serviço no bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/storage.objectCreator
Para gravar em uma tabela do BigQuery, conceda os papéis
roles/bigquery.dataEditor
eroles/bigquery.user
à conta de serviço no projeto:gcloud projects add-iam-policy-binding PROJECT_B_ID \ --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/bigquery.user gcloud projects add-iam-policy-binding PROJECT_B_ID \ --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/bigquery.dataEditor
Ao fazer solicitações do Inventário de recursos do Cloud, especifique
PROJECT_A
como o projeto que você quer usar. Para fazer isso para
a CLI gcloud, defina a sinalização --billing-project
como
PROJECT_A_ID
. Para REST, defina o cabeçalho X-Goog-User-Project
como PROJECT_A_ID
.
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 estejam 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. Depois que a
operação 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
.
Por que minha credencial da CLI ou do Cloud Shell do Google Cloud foi rejeitada?
Se um projeto de usuário em uma solicitação for enviado para cloudasset.googleapis.com
a partir do
Google Cloud CLI ou Cloud Shell, você vai receber uma mensagem de erro como
seguintes:
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 flag
--billing-project PROJECT_ID
junto com o comando
gcloud asset
ou use o seguinte comando:
gcloud config set billing/quota_project PROJECT_ID
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 ocorre porque há
diferentes programações de ingestão de dados para cada tipo de conteúdo e até que os
processamento for 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 o mesmo projeto, pasta ou
organização de maneira sequencial. Por exemplo, emita a segunda chamada após
a anterior ser concluída. 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 a 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"
.
Como recuperar a representação JSON de um recurso com a API SearchAllResources
?
Por padrão, SearchAllResources
retorna os seguintes campos padrão quando
read_mask
não é especificado:
name
assetType
project
folders
organization
displayName
description
location
labels
networkTags
kmsKeys
createTime
updateTime
state
additionalAttributes
parentFullResourceName
parentAssetType
Se você quiser recuperar todos os campos nos metadados do recurso, além dos
campos listados acima, especifique a flag read_mask
(--read-mask
em
gcloud
) na solicitação de pesquisa.
Uma read_mask
é uma lista de campos, separados por vírgulas, que você quer retornar
nos resultados. Alguns campos são muito grandes, como versionedResources
e
attachedResources
. Portanto, elas não são incluídas nos resultados por padrão. Para
incluir esses campos, especifique-os em read_mask
ou use "*"
para
incluir todos os campos disponíveis.
Exemplos de valores de read_mask
incluem: "name,location"
,
"name,versionedResources"
e "*"
.
Confira um exemplo de gcloud
:
gcloud asset search-all-resources \
--scope=organizations/123456 \
--query="state=RUNNING" \
--asset-types=compute.googleapis.com/Instance \
--read-mask="name,versionedResources"