La section ci-après répertorie certains des problèmes courants qui peuvent survenir lors des interactions avec l'API Cloud Asset, ainsi que leurs solutions respectives.
Cloud Asset Inventory est-il un service mondial ?
Oui. L'API Cloud Asset fonctionne indépendamment de l'emplacement. Elle dispose d'un point de terminaison mondial, qui diffuse les métadonnées de tous les éléments régionaux et mondiaux compatibles avec Cloud Asset Inventory. L'API Cloud Asset est accessible dans n'importe quelle zone.
Pourquoi ma requête contient-elle des identifiants d'authentification non valides ?
Si vous n'avez pas configuré correctement l'en-tête OAuth, les appels génèrent l'erreur suivante :
{
"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"
}
]
}
}
Pour résoudre ce problème, appliquez la procédure permettant de vérifier la configuration initiale.
Pourquoi n'ai-je pas l'autorisation d'utiliser l'API Cloud Asset ?
Une erreur est renvoyée si vous n'êtes pas autorisé à exporter des éléments ou à obtenir l'historique d'une organisation, d'un projet ou d'un dossier.
Par exemple, si vous exécutez la commande suivante sans posséder l'autorisation requise :
gcurl -d '{"outputConfig":{"gcsDestination": \ {"uri":gs://YOUR_BUCKET/NEW_FILE}}}' \ https://cloudasset.googleapis.com/v1/projects/PROJECT_NUMBER:exportAssets
L'erreur suivante est renvoyée :
{ "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." } ] } }
Pour résoudre ce problème, demandez l'accès à l'administrateur du projet, du dossier ou de l'organisation. Selon les éléments que vous essayez d'exporter ou dont vous souhaitez obtenir l'historique, vous aurez besoin de l'un des rôles suivants, ou d'autres rôles qui incluent les autorisations de l'API Cloud Asset requises :
cloudasset.viewer
cloudasset.owner
Pour plus d'informations sur les rôles et les autorisations, consultez la page Comprendre les rôles.
Pour en savoir plus sur les options de contrôle des accès pour les API Cloud Asset, consultez la section Contrôle des accès.
Pourquoi mes commandes d'exportation vers Cloud Storage échouent-elles ?
Si le bucket Cloud Storage que vous utilisez pour stocker les données exportées ne fait pas partie du projet compatible avec l'API Cloud Asset depuis lequel vous exécutez l'exportation, l'exécution de la requête entraîne l'erreur de refus d'autorisation suivante :
{ "error": { "code": 7, "message": "Failed to write to: YOUR_BUCKET/FILE", } }
Pour résoudre ce problème, utilisez un bucket Cloud Storage appartenant au projet compatible avec l'API Cloud Asset depuis lequel vous effectuez l'exportation, ou accordez le rôle roles/storage.admin
au compte de service service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com
. PROJECT_NUMBER correspond au numéro du projet compatible avec l'API Cloud Asset depuis lequel vous effectuez l'exportation.
Pourquoi le résultat de l'API Cloud Asset n'est-il pas actualisé ?
La fraîcheur des données dans l'API Cloud Asset répond à un objectif d'optimisation. Presque toutes les mises à jour d'éléments sont disponibles au niveau des clients en quelques minutes. Il est toutefois possible, dans de rares cas, que le résultat des méthodes de l'API Cloud Asset n'incluent pas les mises à jour les plus récentes.
Pourquoi les fichiers temporaires sont-ils générés après l'exécution de ExportAssets
?
L'opération ExportAssets
peut créer des fichiers temporaires dans le dossier de sortie.
Ne supprimez pas ces fichiers temporaires lorsque l'opération est en cours.
Une fois l'opération terminée, les fichiers temporaires sont automatiquement supprimés.
Si les fichiers temporaires subsistent, vous pouvez les supprimer en toute sécurité une fois l'opération ExportAssets
terminée.
Que se passe-t-il si l'URL de ma requête est trop longue pour BatchGetAssetsHistory
?
La méthode BatchGetAssetsHistory
est une action HTTP GET qui envoie toutes les données de la requête dans une URL dont la longueur est limitée. En conséquence, une erreur est générée si la requête est trop longue.
Pour éviter ce problème, le code client doit utiliser HTTP POST pour envoyer une requête avec le type de Content-Type
défini sur application/x-www-form-urlencoded
avec un en-tête HTTP X-HTTP-Method-Override: GET
. Pour en savoir plus, consultez la section URL de requêtes longues.
Voici un exemple de requête pour BatchGetAssetsHistory
utilisant 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
Pourquoi mes identifiants CLI Google Cloud ou Cloud Shell sont-ils refusés ?
Si un projet utilisateur inclus dans une requête est envoyé à cloudasset.googleapis.com
à partir de la CLI Google Cloud ou de Cloud Shell, un message d'erreur semblable à celui-ci s'affiche:
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/.
Pour résoudre ce problème, définissez le projet utilisateur sur l'ID de projet de l'utilisateur compatible avec l'API Cloud Asset. Pour ce faire, spécifiez l'en-tête HTTP X-Goog-User-Project
dans la requête HTTP.
Si vous utilisez curl, vous pouvez pour cela ajouter le paramètre suivant :
-H 'X-Goog-User-Project: PROJECT_ID'
Si vous utilisez la CLI gcloud, spécifiez l'option --billing-project <var>PROJECT_ID</var>
avec la commande gcloud asset
ou utilisez la commande suivante:
gcloud config set billing/quota_project PROJECT_ID
Comment exporter des éléments vers des tables BigQuery n'appartenant pas au projet actuel ?
Lorsque vous appelez l'API ExportAssets
à partir du projet compatible avec l'API Cloud Asset (A), il utilise le compte de service service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com
pour écrire dans la table BigQuery de destination. Pour diriger la sortie vers une table BigQuery d'un autre projet (B) :
Dans la stratégie IAM (Identity and Access Management) du projet B, attribuez au compte de service (service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com
) les rôles roles/bigquery.user
et roles/bigquery.dataEditor
.
Pourquoi les ancêtres sont-ils différents pour les mêmes éléments ?
Lorsque vous appelez l'API Cloud Asset pour obtenir différents types de métadonnées, tels que les métadonnées RESOURCE
et IAM POLICY
pour le même élément, il est possible que le champ ancestors
soit incohérent entre les types de contenus. Cela est dû au fait qu'il existe des programmations d'ingestion de données différentes pour chaque type de contenu, et tant que le processus d'ingestion n'est pas terminé, ils peuvent être incohérents. Vérifiez le champ update_time
pour vous assurer que l'élément dispose des informations les plus récentes.
Veuillez nous contacter si ces incohérences durent plus de 24 heures.
À quelle fréquence dois-je appeler l'API ExportAssets
?
Nous vous recommandons d'appeler l'API ExportAssets
pour la même organisation/dossier/projet de façon séquentielle. Par exemple, effectuez le deuxième appel une fois l'appel précédent terminé. Si vous souhaitez capturer les mises à jour des éléments en temps réel, vous pouvez envisager d'utiliser des notifications en temps réel.
Recevoir des mises à jour concernant des éléments en double
Après avoir configuré les notifications en temps réel, vous pouvez recevoir des mises à jour d'éléments en double dans votre sujet Pub/Sub. Cela est dû à une relance automatique de la tentative de distribution, car Pub/Sub ne garantit pas la distribution de type "au moins une fois".
Pourquoi n'ai-je pas reçu de notifications pour la suppression de projets ?
Lorsque vous arrêtez un projet, vous disposez de 30 jours pour annuler l'opération. Le champ deleted
de la notification n'est pas défini tant que le projet n'est pas définitivement supprimé. Pour surveiller les projets en attente de suppression, vous pouvez définir un flux avec une condition sur la valeur lifecycleState
du projet, par exemple temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED"
.