자주 묻는 질문(FAQ) 및 문제해결

다음은 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.userroles/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").