다음은 Cloud Asset API를 사용할 때 발생할 수 있는 일반적인 문제와 그 처리 방법입니다.
요청에 잘못된 사용자 인증 정보가 있는 이유는 무엇인가요?
OAuth 헤더를 제대로 설정하지 않은 경우 호출하면 다음 오류가 반환됩니다.
{
"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"
}
]
}
}
이 문제를 해결하려면 단계를 반복하여 초기 설정을 확인하세요.
Cloud Asset API를 사용할 권한이 없는 이유는 무엇인가요?
애셋을 내보내거나 조직, 프로젝트 또는 폴더에서 기록을 가져올 수 있는 권한이 없으면 오류가 반환됩니다.
예를 들어 권한이 없는 상태에서 다음 명령어를 실행할 경우
gcurl -d '{"outputConfig":{"gcsDestination": \ {"uri":gs://YOUR_BUCKET/NEW_FILE}}}' \ https://cloudasset.googleapis.com/v1/projects/PROJECT_NUMBER:exportAssets
다음과 같은 오류가 반환됩니다.
{ "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." } ] } }
이 문제를 해결하려면 프로젝트, 폴더 또는 조직 관리자에게 액세스 권한을 요청하세요. 내보내거나 기록을 가져오려는 애셋에 따라 다음 역할 또는 필수 Cloud Asset API 권한이 포함된 다른 역할 중 하나가 필요합니다.
cloudasset.viewer
cloudasset.owner
역할 및 권한에 대한 자세한 내용은 역할 이해를 참조하세요.
Cloud Asset API의 액세스 제어 옵션에 대한 자세한 내용은 액세스 제어를 참조하세요.
Cloud Storage로 내보내기 명령이 실패하는 이유는 무엇인가요?
내보낸 파일을 저장하는 데 사용하는 Cloud Storage 버킷이 내보내기를 실행 중인 Cloud Asset API 지원 프로젝트에 없는 경우 요청을 수행하면 다음 권한 거부 오류가 발생합니다.
{ "error": { "code": 7, "message": "Failed to write to: YOUR_BUCKET/FILE", } }
이 문제를 해결하려면 내보내기를 실행 중인 Cloud Asset API 지원 프로젝트에 속하는 Cloud Storage 버킷을 사용하거나 service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com
서비스 계정에 roles/storage.admin
역할을 부여합니다. 여기에서 PROJECT_NUMBER는 내보내기를 실행 중인 Cloud Asset API 지원 프로젝트의 프로젝트 번호입니다.
Cloud Asset API 결과가 비활성화된 이유는 무엇인가요?
Cloud Asset API의 데이터는 최선의 노력을 통해 최신 상태로 유지됩니다. 거의 모든 애셋 업데이트가 몇 분 안에 클라이언트에 제공되지만 간혹 Cloud 애셋 API 메서드의 결과에 최신 애셋 업데이트가 포함되지 않을 수 있습니다.
ExportAssets
실행 후 임시 파일이 출력되는 이유는 무엇인가요?
ExportAssets
작업은 출력 폴더에 임시 파일을 만들 수 있습니다.
작업이 진행되는 동안 이 임시 파일을 삭제하지 마세요.
작업이 완료되면 임시 파일이 자동으로 삭제됩니다.
임시 파일이 그대로 남아 있는 경우 ExportAssets
작업이 완료된 후에 안전하게 삭제할 수 있습니다.
BatchGetAssetsHistory
에 대한 요청 URL이 너무 긴 경우 어떻게 해야 하나요?
BatchGetAssetsHistory
메서드는 길이가 제한된 URL에서 모든 요청 데이터를 전송하는 HTTP GET 작업입니다. 따라서 요청이 너무 길면 오류가 발생합니다.
이 문제를 피하기 위해 클라이언트 코드는 HTTP POST를 사용하여 Content-Type
으로 설정된 요청을 X-HTTP-Method-Override: GET
HTTP 헤더와 함께 application/x-www-form-urlencoded
로 보내야 합니다. 자세한 내용은 긴 요청 URL을 참조하세요.
다음은 HTTP POST를 사용하는 BatchGetAssetsHistory
에 대한 요청 예시입니다.
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
Cloud SDK 또는 Cloud Shell 사용자 인증 정보가 거부된 이유는 무엇인가요?
요청에서 사용자 프로젝트가 Cloud SDK 또는 Cloud Shell에서 cloudasset.googleapis.com
로 전송되는 경우 다음과 같은 오류 메시지가 표시됩니다.
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/.
이 문제를 해결하려면 사용자 프로젝트를 Cloud Asset API가 사용 설정된 사용자의 프로젝트 ID로 설정합니다. HTTP 요청에서 HTTP 헤더 X-Goog-User-Project
를 지정하면 됩니다.
curl을 사용하는 경우 다음 매개변수를 추가하면 됩니다.
-H 'X-Goog-User-Project: PROJECT_ID'
gcloud
도구를 사용하는 경우 gcloud asset
명령어와 함께 --billing-project <var>PROJECT_ID</var>
플래그를 지정하거나 다음 명령어를 사용하세요.
gcloud config set billing/quota_project PROJECT_ID
현재 프로젝트에 속하지 않은 BigQuery 테이블로 애셋을 내보내려면 어떻게 해야 하나요?
Cloud Asset API가 사용 설정된 프로젝트(A)로부터 ExportAssets
API를 호출하면 service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com
서비스 계정을 사용하여 대상 BigQuery 테이블에 기록합니다. 다른 프로젝트 (B)에서 BigQuery 테이블로 출력하려면 다음 안내를 따르세요.
프로젝트 B의 ID 및 액세스 관리 (IAM) 정책에서 서비스 계정(service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com
)에 roles/bigquery.user
및 roles/bigquery.dataEditor
역할을 부여합니다.
동일한 애셋에 대해 다른 상위 항목이 표시되는 이유는 무엇인가요?
Cloud Asset API를 호출하여 동일한 애셋의 RESOURCE
메타데이터 및 IAM POLICY
메타데이터와 같은 서로 다른 메타데이터 유형을 가져올 때 ancestors
필드가 콘텐츠 유형 간에 일관되지 않을 수 있습니다. 이는 콘텐츠 유형마다 데이터 수집 일정이 다르기 때문에 수집 프로세스가 완료될 때까지 일관되지 않기 때문입니다. update_time
필드를 확인하여 애셋에 가장 최신 정보가 있는지 확인합니다.
불일치가 24시간 이상 계속되면 Google에 문의하세요.
ExportAssets
API를 얼마나 자주 호출해야 하나요?
동일한 조직/폴더/프로젝트에 대해 ExportAssets
API를 순차적으로 호출하는 것이 좋습니다. 예를 들어 이전 호출이 완료된 후에 두 번째 호출을 실행합니다. 애셋 업데이트를 실시간으로 캡처하려면 실시간 알림을 사용하는 것이 좋습니다.
중복 애셋 업데이트 받기
실시간 알림을 설정한 후 Pub/Sub 주제에서 중복 애셋 업데이트를 받을 수 있습니다. Pub/Sub는 최소 1회 전송을 보장하지 않으므로 전송 시도가 자동으로 재시도됩니다.
프로젝트 삭제 알림을 받지 못한 이유는 무엇인가요?
프로젝트를 종료할 때, 30일 이내에 작업을 실행취소할 수 있습니다. 알림의 deleted
필드는 프로젝트가 영구적으로 삭제될 때까지 설정되지 않습니다. 삭제 보류 중인 프로젝트를 모니터링하려면 프로젝트의 lifecycleState
에서 조건으로 피드를 설정하면 됩니다(예: temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED"
).