이 문서에서는 애셋 스냅샷을 조직, 폴더 또는 프로젝트에서 BigQuery 테이블로 내보낸 후 인벤토리에 대한 데이터 분석을 실행하는 방법을 보여줍니다. BigQuery는 사용자가 커스텀 스크립트를 사용하지 않고도 데이터를 분석하고 의미 있는 통계를 생성할 수 있는 SQL과 유사한 환경을 제공합니다.
시작하기 전에
Cloud 애셋 인벤토리 명령어를 실행할 프로젝트에서 Cloud 애셋 인벤토리 API를 사용 설정합니다.
계정에 Cloud 애셋 인벤토리 API를 호출할 수 있는 올바른 역할이 있는지 확인합니다. 각 호출 유형에 대한 개별 권한은 권한을 참조하세요.
내보낼 BigQuery 데이터 세트가 없으면 BigQuery 데이터 세트를 만듭니다.
제한사항
BigQuery 테이블 데이터를 내보낼 때 Cloud 애셋 인벤토리에서 모든 필드가 지원되는 것은 아닙니다.
numBytes,numLongTermBytes,numPhysicalBytes,numRows와 같은 자주 변경되는 애셋 필드를null값으로 내보낼 수 있습니다.BigQuery 클러스터링된 테이블로 내보내기는 지원되지 않습니다.
파티션을 나눈 테이블로 내보내지 않으면 기존 테이블에 내보내기 출력을 추가할 수 없습니다. 대상 테이블은 비어 있거나 대상 테이블을 덮어써야 합니다. 덮어쓰려면 gcloud CLI로
--output-bigquery-force플래그를 사용하거나 REST API로"force": true를 사용합니다.리소스 유형별 개별 테이블로 내보내는 경우
container.googleapis.com/Cluster및container.googleapis.com/NodePool을 제외한 Google Kubernetes Engine(GKE) 리소스 유형은 지원되지 않습니다.같은 대상에 대한 이전 요청이 15분 이전에 시작되어 계속 실행 중이면 Cloud 애셋 인벤토리는 내보내기 요청을 거부합니다. 하지만 내보내기가 완료되는 데 15분이 넘게 걸린 경우에는 완료로 표시되며 같은 대상에 대한 새 내보내기 요청이 허용됩니다.
ACCESS_POLICY콘텐츠 유형을 조직 수준에서만 내보낼 수 있습니다.내보낼 테이블이 이미 있고 내보내기 중인 경우에는
400오류가 반환됩니다.
표기법
필드 이름은 요청된 콘텐츠 유형과 내보내기 설정에 따라 다른 케이싱 규칙을 사용합니다.
애셋 유형별로 애셋을 테이블로 내보낼 때
RESOURCE콘텐츠 유형의 경우 단어 사이에 공백이 없고 첫 번째 단어 이후의 각 새 단어의 첫 글자가 대문자로 표시됩니다. 예를 들면assetType입니다.다른 모든 콘텐츠 유형의 경우 필드 이름은 소문자이며 공백은 밑줄로 대체됩니다. 예를 들면
asset_type입니다.
내보내기에 사용되는 BigQuery 스키마
모든 BigQuery 테이블은 열 이름, 데이터 유형, 기타 정보를 설명하는 스키마로 정의됩니다. 내보내기 콘텐츠 유형을 설정하면 테이블 스키마가 결정됩니다.
리소스 또는 지정되지 않음: 콘텐츠 유형을
RESOURCE로 설정하거나 지정하지 않고per-asset-type플래그를false로 설정하거나 사용하지 않으면 다음 스키마가 있는 BigQuery 테이블을 만듭니다.리소스 스키마
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "version", "type": "STRING" }, { "mode": "NULLABLE", "name": "discovery_document_uri", "type": "STRING" }, { "mode": "NULLABLE", "name": "discovery_name", "type": "STRING" }, { "mode": "NULLABLE", "name": "resource_url", "type": "STRING" }, { "mode": "NULLABLE", "name": "parent", "type": "STRING" }, { "mode": "NULLABLE", "name": "data", "type": "STRING" }, { "mode": "NULLABLE", "name": "location", "type": "STRING" } ], "mode": "NULLABLE", "name": "resource", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
resource.data열은 JSON 문자열로 표시되는 리소스 메타데이터입니다.콘텐츠 유형을
RESOURCE로 설정하거나 콘텐츠 유형을 설정하지 않고per-asset-type플래그를true로 설정하면 애셋 유형별로 개별 테이블을 만듭니다. 각 테이블의 스키마에는 애셋 유형의Resource.data필드에 있는 중첩 필드에 매핑된 RECORD 유형 열이 포함됩니다(BigQuery에서 지원하는 중첩 수준 최대 15개까지). 테이블 예시는 Google Cloud 콘솔의 export-assets-examples를 참고하세요.IAM 정책: REST API에서 콘텐츠 유형을
IAM_POLICY로 설정하거나 gcloud CLI에서iam-policy로 설정하는 경우 다음 스키마가 있는 BigQuery 테이블을 만듭니다.IAM 정책 스키마
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "version", "type": "INTEGER" }, { "fields": [ { "mode": "NULLABLE", "name": "role", "type": "STRING" }, { "mode": "REPEATED", "name": "members", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "expression", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "mode": "NULLABLE", "name": "location", "type": "STRING" } ], "mode": "NULLABLE", "name": "condition", "type": "RECORD" } ], "mode": "REPEATED", "name": "bindings", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "service", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "log_type", "type": "INTEGER" }, { "mode": "REPEATED", "name": "exempted_members", "type": "STRING" } ], "mode": "REPEATED", "name": "audit_log_configs", "type": "RECORD" } ], "mode": "REPEATED", "name": "audit_configs", "type": "RECORD" }, { "mode": "NULLABLE", "name": "etag", "type": "STRING" } ], "mode": "NULLABLE", "name": "iam_policy", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
조직 정책: REST API에서 콘텐츠 유형을
ORG_POLICY로 설정하거나 gcloud CLI에서org-policy로 설정하는 경우 다음 스키마가 있는 BigQuery 테이블을 만듭니다.조직 정책 스키마
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "version", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "constraint", "type": "STRING" }, { "mode": "NULLABLE", "name": "etag", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" }, { "fields": [ { "mode": "REPEATED", "name": "allowed_values", "type": "STRING" }, { "mode": "REPEATED", "name": "denied_values", "type": "STRING" }, { "mode": "NULLABLE", "name": "all_values", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "suggested_value", "type": "STRING" }, { "mode": "NULLABLE", "name": "inherit_from_parent", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "list_policy", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "enforced", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "boolean_policy", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "_present", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "restore_default", "type": "RECORD" } ], "mode": "REPEATED", "name": "org_policy", "type": "RECORD" }, { "mode": "REPEATED", "name": "ancestors", "type": "STRING" }, { "mode": "NULLABLE", "name": "update_time", "type": "TIMESTAMP" } ]
VPCSC 정책: REST API에서 콘텐츠 유형을
ACCESS_POLICY로 설정하거나 gcloud CLI에서access-policy로 설정하는 경우 다음 스키마가 있는 BigQuery 테이블을 만듭니다.VPCSC 정책 스키마
[ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "asset_type", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "parent", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "REPEATED", "name": "scopes", "type": "STRING" }, { "mode": "NULLABLE", "name": "etag", "type": "STRING" } ], "mode": "NULLABLE", "name": "access_policy", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "fields": [ { "fields": [ { "mode": "REPEATED", "name": "ip_subnetworks", "type": "STRING" }, { "fields": [ { "mode": "NULLABLE", "name": "require_screenlock", "type": "BOOLEAN" }, { "mode": "REPEATED", "name": "allowed_encryption_statuses", "type": "INTEGER" }, { "fields": [ { "mode": "NULLABLE", "name": "os_type", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "minimum_version", "type": "STRING" }, { "mode": "NULLABLE", "name": "require_verified_chrome_os", "type": "BOOLEAN" } ], "mode": "REPEATED", "name": "os_constraints", "type": "RECORD" }, { "mode": "REPEATED", "name": "allowed_device_management_levels", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "require_admin_approval", "type": "BOOLEAN" }, { "mode": "NULLABLE", "name": "require_corp_owned", "type": "BOOLEAN" } ], "mode": "NULLABLE", "name": "device_policy", "type": "RECORD" }, { "mode": "REPEATED", "name": "required_access_levels", "type": "STRING" }, { "mode": "NULLABLE", "name": "negate", "type": "BOOLEAN" }, { "mode": "REPEATED", "name": "members", "type": "STRING" }, { "mode": "REPEATED", "name": "regions", "type": "STRING" }, { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "network", "type": "STRING" }, { "mode": "REPEATED", "name": "vpc_ip_subnetworks", "type": "STRING" } ], "mode": "NULLABLE", "name": "vpc_subnetwork", "type": "RECORD" } ], "mode": "REPEATED", "name": "vpc_network_sources", "type": "RECORD" } ], "mode": "REPEATED", "name": "conditions", "type": "RECORD" }, { "mode": "NULLABLE", "name": "combining_function", "type": "INTEGER" } ], "mode": "NULLABLE", "name": "basic", "type": "RECORD" }, { "fields": [ { "fields": [ { "mode": "NULLABLE", "name": "expression", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "mode": "NULLABLE", "name": "location", "type": "STRING" } ], "mode": "NULLABLE", "name": "expr", "type": "RECORD" } ], "mode": "NULLABLE", "name": "custom", "type": "RECORD" } ], "mode": "NULLABLE", "name": "access_level", "type": "RECORD" }, { "fields": [ { "mode": "NULLABLE", "name": "name", "type": "STRING" }, { "mode": "NULLABLE", "name": "title", "type": "STRING" }, { "mode": "NULLABLE", "name": "description", "type": "STRING" }, { "mode": "NULLABLE", "name": "perimeter_type",