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 Inventário de recursos do Cloud 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 probabilidade na prática, é possível 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 a conta de serviço é criada na primeira vez que você chama a API Cloud Asset Inventory de um projeto e, por padrão, tem permissão para gerenciar esses recursos, desde que estejam localizados no mesmo projeto.
Você pode receber erros de permissão negada nas seguintes situações:
Ao usar a API REST, que não define um projeto ativo, o Cloud Asset Inventory não sabe qual conta de serviço usar.
Ao usar a CLI gcloud de um projeto diferente daquele Tópico do Pub/Sub, bucket do Cloud Storage ou BigQuery está localizada. Isso significa que a conta de serviço padrão do Cloud Asset Inventory do projeto ativo é usada para executar a tarefa (se ela existir) e pode não ter 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, é possível 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
Na API REST, adicione o cabeçalho X-Goog-User-Project
para especificar o projeto
ID 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 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.
Exportar metadados de recursos de um projeto para outro
Para exportar metadados de recursos de um projeto, PROJECT_A
,
para outro, PROJECT_B
, é necessário conceder à conta de serviço padrão
do inventário de recursos do Cloud em PROJECT_A
acesso aos
recursos 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 do recurso dePROJECT_B
em um tópico do Pub/Sub, do bucket do Cloud Storage ou tabela do BigQuery localizada emPROJECT_B
.
Para exportar metadados de recursos de um projeto para outro, siga estas 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. Como alternativa, é possível criá-lo 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 do seletor na barra de menus.
- Escolha sua organização na caixa Selecionar de e pesquise as nome do projeto.
- Clique no nome do projeto para alternar para ele. O número do projeto é mostrado 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
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 o papel
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 a Papéis
roles/bigquery.dataEditor
eroles/bigquery.user
ao 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 na
CLI gcloud, defina a flag --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 todos atualizações de recursos são disponibilizadas aos clientes em questão de minutos. Em casos raros, o resultado dos métodos da API Cloud Asset não incluirá o recurso mais recente atualizações.
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. Após 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 da
CLI do Google Cloud ou do Cloud Shell, você vai receber 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 endereço de e-mail do usuário
ID do projeto. Isso pode ser feito ao especificar o cabeçalho HTTP X-Goog-User-Project
no
a solicitação HTTP.
Se você estiver usando curl
, isso poderá 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. Consulte a
update_time
para garantir que o recurso tenha a versão mais atualizada
informações imprecisas ou inadequadas.
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 repetir a 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?
Quando encerra 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. Monitorar projetos pendentes
exclusão, é possível definir 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 foi especificado:
name
assetType
project
folders
organization
displayName
description
location
labels
networkTags
kmsKeys
createTime
updateTime
state
additionalAttributes
parentFullResourceName
parentAssetType
Se você deseja recuperar todos os campos nos metadados do recurso, além dos
campos listados acima, é possível especificar a sinalização 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, não são incluídas nos resultados por padrão. Para
incluir esses campos, é possível especificá-los no read_mask
; ou use "*"
para
inclua 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"