이 주제에서는 조직, 폴더 또는 프로젝트의 애셋 메타데이터를 BigQuery 테이블로 내보낸 다음 인벤토리에서 데이터 분석을 실행하는 방법을 보여줍니다. BigQuery는 사용자가 커스텀 스크립트를 사용하지 않고도 데이터를 분석하고 의미 있는 정보를 생성할 수 있는 SQL과 유사한 환경을 제공합니다.
시작하기 전에
시작하기 전에 다음 단계를 완료하세요.
API 명령어를 실행할 프로젝트에서 Cloud 애셋 인벤토리 API를 사용 설정합니다.
gcloud CLI 또는 API를 사용하여 Cloud 애셋 인벤토리 API를 호출하는 데 필요한 권한을 구성하세요.
다음 단계에 따라 환경 설정을 완료합니다.
gcloud CLI
gcloud CLI를 사용하여 Cloud Asset Inventory API를 호출하는 환경을 설정하려면 로컬 클라이언트에 Google Cloud CLI를 설치하세요.
REST
curl
명령어로 Cloud Asset Inventory API를 호출하도록 환경을 설정하려면 다음 단계를 완료합니다.curl
명령어에 대한 액세스 권한이 있는지 확인합니다.프로젝트, 폴더 또는 조직에서 다음 역할 중 하나를 계정에 부여했는지 확인합니다.
Cloud 애셋 뷰어 역할(
roles/cloudasset.viewer
)소유자 기본 역할(
roles/owner
)
한 프로젝트에서 다른 프로젝트로 메타데이터를 내보내는 경우 내보내는 프로젝트의 기본 Cloud 애셋 인벤토리 서비스 계정이 존재하고 권한이 올바른지 확인하세요.
제한사항
애셋 스냅샷을 내보낼 때는 다음 사항에 유의하세요.
커스텀 Cloud Key Management Service(Cloud KMS) 키로 암호화된 BigQuery 테이블은 지원되지 않습니다.
파티션을 나눈 테이블로 내보내지 않으면 기존 테이블에 내보내기 출력을 추가할 수 없습니다. 대상 테이블은 비어 있거나 덮어써야 합니다. 덮어쓰려면 gcloud CLI로
--output-bigquery-force
플래그를 사용하거나 REST API로force
를 사용합니다.리소스 유형별 개별 테이블로 내보내는 경우
container.googleapis.com/Cluster
및container.googleapis.com/NodePool
을 제외한 Google Kubernetes Engine(GKE) 리소스 유형은 지원되지 않습니다.내보낼 테이블이 이미 있고 이미 이 테이블을 내보내고 있으면
400
오류가 반환됩니다.
내보내기에 사용될 BigQuery 스키마 설정
모든 BigQuery 테이블은 열 이름, 데이터 유형, 기타 정보를 설명하는 스키마로 정의됩니다. 내보내기 중에 콘텐츠 유형을 설정하면 테이블의 스키마가 결정됩니다.
리소스 또는 지정되지 않음: 콘텐츠 유형을
RESOURCE
로 설정하거나 지정하지 않고per-asset-type
플래그를false
로 설정하거나 사용하지 않는 경우 다음 스키마가 있는 BigQuery 테이블을 만듭니다.리소스 스키마
[ { "name": "name", "type": "STRING", "mode": "NULLABLE" }, { "name": "asset_type", "type": "STRING", "mode": "NULLABLE" }, { "name": "resource", "type": "RECORD", "mode": "NULLABLE", "fields": [ { "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": "ancestors", "type": "STRING", "mode": "REPEATED" }, { "name": "update_time", "type": "TIMESTAMP", "mode": "NULLABLE" } ]
resource.data
열은 JSON 문자열로 표시되는 리소스 메타데이터입니다.콘텐츠 유형을
RESOURCE
로 설정하지 않거나 콘텐츠 유형을 설정하지 않고per-asset-type
플래그를true
로 설정하면 애셋 유형별로 개별 테이블을 만듭니다. 각 테이블의 스키마에는 애셋 유형의Resource.data
필드에 있는 중첩 필드에 매핑된 레코드 유형 열이 포함됩니다(BigQuery에서 지원하는 중첩 수준 최대 15개까지). 유형별 BigQuery의 예시 테이블은 projects/export-assets-examples/datasets/structured_export를 참조하세요.IAM 정책: REST API에서 콘텐츠 유형을
IAM_POLICY
로 설정하거나 gcloud CLI에서iam-policy
로 설정하는 경우 다음 스키마가 있는 BigQuery 테이블을 만듭니다.IAM 정책 스키마
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "version", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "name": "role", "mode": "NULLABLE", "type": "STRING" }, { "name": "members", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "expression", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "location", "mode": "NULLABLE", "type": "STRING" } ], "name": "condition", "mode": "NULLABLE", "type": "RECORD" } ], "name": "bindings", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "name": "service", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "log_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "exempted_members", "mode": "REPEATED", "type": "STRING" } ], "name": "audit_log_configs", "mode": "REPEATED", "type": "RECORD" } ], "name": "audit_configs", "mode": "REPEATED", "type": "RECORD" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" } ], "name": "iam_policy", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
조직 정책: REST API에서 콘텐츠 유형을
ORG_POLICY
로 설정하거나 gcloud CLI에서org-policy
로 설정하는 경우 다음 스키마가 있는 BigQuery 테이블을 만듭니다.조직 정책 스키마
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "version", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "constraint", "mode": "NULLABLE", "type": "STRING" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "fields": [ { "name": "allowed_values", "mode": "REPEATED", "type": "STRING" }, { "name": "denied_values", "mode": "REPEATED", "type": "STRING" }, { "name": "all_values", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "suggested_value", "mode": "NULLABLE", "type": "STRING" }, { "name": "inherit_from_parent", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "list_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "enforced", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "boolean_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "_present", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "restore_default", "mode": "NULLABLE", "type": "RECORD" } ], "name": "org_policy", "mode": "REPEATED", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
VPCSC 정책: REST API에서 콘텐츠 유형을
ACCESS_POLICY
로 설정하거나 gcloud CLI에서access-policy
로 설정하는 경우 다음 스키마가 있는 BigQuery 테이블을 만듭니다.VPCSC 정책 스키마
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "parent", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "scopes", "mode": "REPEATED", "type": "STRING" }, { "name": "etag", "mode": "NULLABLE", "type": "STRING" } ], "name": "access_policy", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "fields": [ { "name": "ip_subnetworks", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "require_screenlock", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_encryption_statuses", "mode": "REPEATED", "type": "INTEGER" }, { "fields": [ { "name": "os_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "minimum_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "require_verified_chrome_os", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "os_constraints", "mode": "REPEATED", "type": "RECORD" }, { "name": "allowed_device_management_levels", "mode": "REPEATED", "type": "INTEGER" }, { "name": "require_admin_approval", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "require_corp_owned", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "device_policy", "mode": "NULLABLE", "type": "RECORD" }, { "name": "required_access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "negate", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "members", "mode": "REPEATED", "type": "STRING" }, { "name": "regions", "mode": "REPEATED", "type": "STRING" } ], "name": "conditions", "mode": "REPEATED", "type": "RECORD" }, { "name": "combining_function", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "basic", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "expression", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "location", "mode": "NULLABLE", "type": "STRING" } ], "name": "expr", "mode": "NULLABLE", "type": "RECORD" } ], "name": "custom", "mode": "NULLABLE", "type": "RECORD" } ], "name": "access_level", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "perimeter_type", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "name": "access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "restricted_services", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "enable_restriction", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_services", "mode": "REPEATED", "type": "STRING" } ], "name": "vpc_accessible_services", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "name": "access_level", "mode": "NULLABLE", "type": "STRING" }, { "name": "resource", "mode": "NULLABLE", "type": "STRING" } ], "name": "sources", "mode": "REPEATED", "type": "RECORD" }, { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "ingress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "resources", "mode": "REPEATED", "type": "STRING" } ], "name": "ingress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "ingress_policies", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "egress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "external_resources", "mode": "REPEATED", "type": "STRING" } ], "name": "egress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "egress_policies", "mode": "REPEATED", "type": "RECORD" } ], "name": "status", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "name": "access_levels", "mode": "REPEATED", "type": "STRING" }, { "name": "restricted_services", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "enable_restriction", "mode": "NULLABLE", "type": "BOOLEAN" }, { "name": "allowed_services", "mode": "REPEATED", "type": "STRING" } ], "name": "vpc_accessible_services", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "fields": [ { "name": "access_level", "mode": "NULLABLE", "type": "STRING" }, { "name": "resource", "mode": "NULLABLE", "type": "STRING" } ], "name": "sources", "mode": "REPEATED", "type": "RECORD" }, { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "ingress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "resources", "mode": "REPEATED", "type": "STRING" } ], "name": "ingress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "ingress_policies", "mode": "REPEATED", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "identities", "mode": "REPEATED", "type": "STRING" }, { "name": "identity_type", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "egress_from", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "resources", "mode": "REPEATED", "type": "STRING" }, { "fields": [ { "name": "service_name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "method", "mode": "NULLABLE", "type": "STRING" }, { "name": "permission", "mode": "NULLABLE", "type": "STRING" } ], "name": "method_selectors", "mode": "REPEATED", "type": "RECORD" } ], "name": "operations", "mode": "REPEATED", "type": "RECORD" }, { "name": "external_resources", "mode": "REPEATED", "type": "STRING" } ], "name": "egress_to", "mode": "NULLABLE", "type": "RECORD" } ], "name": "egress_policies", "mode": "REPEATED", "type": "RECORD" } ], "name": "spec", "mode": "NULLABLE", "type": "RECORD" }, { "name": "use_explicit_dry_run_spec", "mode": "NULLABLE", "type": "BOOLEAN" } ], "name": "service_perimeter", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
OSConfig 인스턴스 인벤토리: REST API에서
OS_INVENTORY
로 콘텐츠 유형을 설정하거나 gcloud CLI에서os-inventory
를 설정할 때 다음 스키마가 있는 BigQuery 테이블을 만듭니다.OS 인벤토리 스키마
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "hostname", "mode": "NULLABLE", "type": "STRING" }, { "name": "long_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "short_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "kernel_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "kernel_release", "mode": "NULLABLE", "type": "STRING" }, { "name": "osconfig_agent_version", "mode": "NULLABLE", "type": "STRING" } ], "name": "os_info", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "key", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "origin_type", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "create_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" }, { "name": "type", "mode": "NULLABLE", "type": "INTEGER" }, { "fields": [ { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "yum_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "apt_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "googet_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "patch_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "category", "mode": "NULLABLE", "type": "STRING" }, { "name": "severity", "mode": "NULLABLE", "type": "STRING" }, { "name": "summary", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_patch", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "name", "mode": "NULLABLE", "type": "STRING" } ], "name": "categories", "mode": "REPEATED", "type": "RECORD" }, { "name": "kb_article_ids", "mode": "REPEATED", "type": "STRING" }, { "name": "support_url", "mode": "NULLABLE", "type": "STRING" }, { "name": "more_info_urls", "mode": "REPEATED", "type": "STRING" }, { "name": "update_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "revision_number", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "last_deployment_change_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "wua_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "caption", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "hot_fix_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "install_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "qfe_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "cos_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "display_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "display_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "publisher", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "year", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "month", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "day", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "install_date", "mode": "NULLABLE", "type": "RECORD" }, { "name": "help_link", "mode": "NULLABLE", "type": "STRING" } ], "name": "windows_application", "mode": "NULLABLE", "type": "RECORD" } ], "name": "installed_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "yum_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "apt_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "googet_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "patch_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "category", "mode": "NULLABLE", "type": "STRING" }, { "name": "severity", "mode": "NULLABLE", "type": "STRING" }, { "name": "summary", "mode": "NULLABLE", "type": "STRING" } ], "name": "zypper_patch", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "title", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "id", "mode": "NULLABLE", "type": "STRING" }, { "name": "name", "mode": "NULLABLE", "type": "STRING" } ], "name": "categories", "mode": "REPEATED", "type": "RECORD" }, { "name": "kb_article_ids", "mode": "REPEATED", "type": "STRING" }, { "name": "support_url", "mode": "NULLABLE", "type": "STRING" }, { "name": "more_info_urls", "mode": "REPEATED", "type": "STRING" }, { "name": "update_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "revision_number", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "last_deployment_change_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "wua_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "caption", "mode": "NULLABLE", "type": "STRING" }, { "name": "description", "mode": "NULLABLE", "type": "STRING" }, { "name": "hot_fix_id", "mode": "NULLABLE", "type": "STRING" }, { "name": "install_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "qfe_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "package_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "architecture", "mode": "NULLABLE", "type": "STRING" }, { "name": "version", "mode": "NULLABLE", "type": "STRING" } ], "name": "cos_package", "mode": "NULLABLE", "type": "RECORD" }, { "fields": [ { "name": "display_name", "mode": "NULLABLE", "type": "STRING" }, { "name": "display_version", "mode": "NULLABLE", "type": "STRING" }, { "name": "publisher", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "year", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "month", "mode": "NULLABLE", "type": "INTEGER" }, { "name": "day", "mode": "NULLABLE", "type": "INTEGER" } ], "name": "install_date", "mode": "NULLABLE", "type": "RECORD" }, { "name": "help_link", "mode": "NULLABLE", "type": "STRING" } ], "name": "windows_application", "mode": "NULLABLE", "type": "RECORD" } ], "name": "available_package", "mode": "NULLABLE", "type": "RECORD" } ], "name": "value", "mode": "NULLABLE", "type": "RECORD" } ], "name": "items", "mode": "REPEATED", "type": "RECORD" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ], "name": "os_inventory", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
관계: REST API에서 콘텐츠 유형을
RELATIONSHIP
으로 설정하거나 gcloud CLI에서relationship
으로 설정하는 경우 다음 스키마가 포함된 BigQuery 테이블을 만듭니다.관계 스키마
[ { "name": "name", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "fields": [ { "name": "asset", "mode": "NULLABLE", "type": "STRING" }, { "name": "asset_type", "mode": "NULLABLE", "type": "STRING" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "relationship_type", "mode": "NULLABLE", "type": "STRING" } ], "name": "related_asset", "mode": "NULLABLE", "type": "RECORD" }, { "name": "ancestors", "mode": "REPEATED", "type": "STRING" }, { "name": "update_time", "mode": "NULLABLE", "type": "TIMESTAMP" } ]
BigQuery로 애셋 스냅샷 내보내기
특정 타임스탬프에 애셋 내보내기
지정된 타임스탬프의 애셋 스냅샷을 TABLE_NAME
이라는 이름의 BigQuery 테이블로 내보내려면 다음 요청 중 하나를 수행하세요.
gcloud
프로젝트
gcloud asset export \
--project=PROJECT_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--output-bigquery-force
다음 값을 제공합니다.
PROJECT_ID
: 내보내려는 메타데이터가 포함된 프로젝트의 ID입니다.BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만access-policy
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.
폴더
gcloud asset export \
--folder=FOLDER_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--output-bigquery-force
다음 값을 제공합니다.
FOLDER_ID
: 내보내려는 메타데이터가 포함된 폴더의 ID입니다.Google Cloud 폴더 ID를 찾는 방법
콘솔
Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
여기서 TOP_LEVEL_FOLDER_NAME은 전체 또는 일부 문자열 일치일 수 있습니다. 발견된 폴더에 대한 추가 정보를 보려면
--format
옵션을 삭제합니다.다른 폴더 내에서 폴더 ID를 가져오려면 하위 폴더를 나열합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만access-policy
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.
조직
gcloud asset export \
--organization=ORGANIZATION_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--output-bigquery-force
다음 값을 제공합니다.
ORGANIZATION_ID
: 내보내려는 메타데이터가 포함된 조직의 ID입니다.Google Cloud 조직 ID를 찾는 방법
콘솔
Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.
REST
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 '{
"contentType": "CONTENT_TYPE",
"readTime": "SNAPSHOT_TIME",
"outputConfig": {
"bigqueryDestination": {
"dataset": "projects/PROJECT_ID/datasets/DATASET_ID",
"table": "TABLE_NAME",
"force": true
}
}
}' \
https://cloudasset.googleapis.com/v1/SCOPE:exportAssets
다음 값을 제공합니다.
BILLING_PROJECT_ID
: BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만ACCESS_POLICY
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다(RFC 3339 형식). 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.SCOPE
: 범위는 프로젝트, 폴더 또는 조직이 될 수 있습니다.허용되는 값은 다음과 같습니다.
projects/PROJECT_ID
projects/PROJECT_NUMBER
Google Cloud 프로젝트 번호를 찾는 방법
콘솔
Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔의 대시보드 페이지로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다.
- 프로젝트 이름을 클릭하여 해당 프로젝트로 전환합니다. 프로젝트 번호가 프로젝트 정보 카드에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
Google Cloud 폴더 ID를 찾는 방법
콘솔
Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
여기서 TOP_LEVEL_FOLDER_NAME은 전체 또는 일부 문자열 일치일 수 있습니다. 발견된 폴더에 대한 추가 정보를 보려면
--format
옵션을 삭제합니다.다른 폴더 내에서 폴더 ID를 가져오려면 하위 폴더를 나열합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
organizations/ORGANIZATION_ID
Google Cloud 조직 ID를 찾는 방법
콘솔
Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
기타 매개변수:
"force": true
: 대상 테이블이 있으면 덮어씁니다.
리소스 유형마다 별도의 테이블 내보내기
애셋을 내보내 각 리소스 유형의 BigQuery 테이블을 구분하려면 --per-asset-type
플래그를 사용합니다. 각 테이블의 이름은 _
(밑줄) 및 애셋 유형 이름과 연결된 TABLE_NAME
입니다. 영숫자가 아닌 문자는 _
로 대체됩니다.
GKE 리소스 유형은 이 내보내기 유형에 지원되지 않습니다(container.googleapis.com/Cluster
및 container.googleapis.com/NodePool
제외).
gcloud
프로젝트
gcloud asset export \
--project=PROJECT_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--output-bigquery-force \
--per-asset-type
다음 값을 제공합니다.
PROJECT_ID
: 내보내려는 메타데이터가 포함된 프로젝트의 ID입니다.BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만access-policy
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.--per-asset-type
: 리소스 유형별로 여러 BigQuery 테이블로 내보냅니다.
폴더
gcloud asset export \
--folder=FOLDER_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--output-bigquery-force \
--per-asset-type
다음 값을 제공합니다.
FOLDER_ID
: 내보내려는 메타데이터가 포함된 폴더의 ID입니다.Google Cloud 폴더 ID를 찾는 방법
콘솔
Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
여기서 TOP_LEVEL_FOLDER_NAME은 전체 또는 일부 문자열 일치일 수 있습니다. 발견된 폴더에 대한 추가 정보를 보려면
--format
옵션을 삭제합니다.다른 폴더 내에서 폴더 ID를 가져오려면 하위 폴더를 나열합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만access-policy
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.--per-asset-type
: 리소스 유형별로 여러 BigQuery 테이블로 내보냅니다.
조직
gcloud asset export \
--organization=ORGANIZATION_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--output-bigquery-force \
--per-asset-type
다음 값을 제공합니다.
ORGANIZATION_ID
: 통계를 확인할 조직의 ID입니다.Google Cloud 조직 ID를 찾는 방법
콘솔
Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.--per-asset-type
: 리소스 유형별로 여러 BigQuery 테이블로 내보냅니다.
REST
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 '{
"contentType": "CONTENT_TYPE",
"readTime": "SNAPSHOT_TIME",
"outputConfig": {
"bigqueryDestination": {
"dataset": "projects/PROJECT_ID/datasets/DATASET_ID",
"table": "TABLE_NAME",
"force": true,
"separateTablesPerAssetType": true
}
}
}' \
https://cloudasset.googleapis.com/v1/SCOPE:exportAssets
다음 값을 제공합니다.
BILLING_PROJECT_ID
: BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만ACCESS_POLICY
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다(RFC 3339 형식). 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.SCOPE
: 범위는 프로젝트, 폴더 또는 조직이 될 수 있습니다.허용되는 값은 다음과 같습니다.
projects/PROJECT_ID
projects/PROJECT_NUMBER
Google Cloud 프로젝트 번호를 찾는 방법
콘솔
Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔의 대시보드 페이지로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다.
- 프로젝트 이름을 클릭하여 해당 프로젝트로 전환합니다. 프로젝트 번호가 프로젝트 정보 카드에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
Google Cloud 폴더 ID를 찾는 방법
콘솔
Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
여기서 TOP_LEVEL_FOLDER_NAME은 전체 또는 일부 문자열 일치일 수 있습니다. 발견된 폴더에 대한 추가 정보를 보려면
--format
옵션을 삭제합니다.다른 폴더 내에서 폴더 ID를 가져오려면 하위 폴더를 나열합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
organizations/ORGANIZATION_ID
Google Cloud 조직 ID를 찾는 방법
콘솔
Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
기타 매개변수:
"force": true
: 대상 테이블이 있으면 덮어씁니다.
테이블로 내보내지 못하면 전체 내보내기 작업이 실패하고 첫 번째 오류를 반환합니다. 이전의 성공적인 내보내기 결과는 유지됩니다.
JSON3 및 BigQuery 유형 사이의 호환성 문제가 해결되도록 다음 유형이 JSON 문자열에 포함합니다.
google.protobuf.Timestamp
google.protobuf.Duration
google.protobuf.FieldMask
google.protobuf.ListValue
google.protobuf.Value
google.protobuf.Struct
google.api.*
파티션을 나눈 테이블로 내보내기
프로젝트의 애셋을 파티션을 나눈 테이블로 내보내려면 내보내기 요청에서 파티션 키를 정의하세요. 내보낸 스냅샷은 일일 세부사항이 있는 TABLE_NAME
이라는 BigQuery 테이블과 readTime
및 requestTime
이라는 두 개의 추가 타임스탬프 열에 저장되는데, 둘 중 하나는 PARTITION_KEY
값에 의해 지정됩니다.
프로젝트의 애셋을 파티션을 나눈 테이블로 내보내려면 다음 요청 중 하나를 수행합니다.
gcloud
프로젝트
gcloud asset export \
--project=PROJECT_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--partition-key=PARTITION_KEY \
--output-bigquery-force
다음 값을 제공합니다.
PROJECT_ID
: 내보내려는 메타데이터가 포함된 프로젝트의 ID입니다.BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만access-policy
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.PARTITION_KEY
: 파티션을 나눈 BigQuery 테이블로 내보낼 때의 파티션 키 열입니다. 유효한 값은read-time
,request-time
입니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.
폴더
gcloud asset export \
--folder=FOLDER_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--partition-key=PARTITION_KEY \
--output-bigquery-force
다음 값을 제공합니다.
FOLDER_ID
: 내보내려는 메타데이터가 포함된 폴더의 ID입니다.Google Cloud 폴더 ID를 찾는 방법
콘솔
Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
여기서 TOP_LEVEL_FOLDER_NAME은 전체 또는 일부 문자열 일치일 수 있습니다. 발견된 폴더에 대한 추가 정보를 보려면
--format
옵션을 삭제합니다.다른 폴더 내에서 폴더 ID를 가져오려면 하위 폴더를 나열합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만access-policy
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.PARTITION_KEY
: 파티션을 나눈 BigQuery 테이블로 내보낼 때의 파티션 키 열입니다. 유효한 값은read-time
,request-time
입니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.
조직
gcloud asset export \
--organization=ORGANIZATION_ID \
--billing-project=BILLING_PROJECT_ID \
--content-type=CONTENT_TYPE \
--snapshot-time="SNAPSHOT_TIME" \
--bigquery-table=projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \
--partition-key=PARTITION_KEY \
--output-bigquery-force
다음 값을 제공합니다.
ORGANIZATION_ID
: 통계를 확인할 조직의 ID입니다.Google Cloud 조직 ID를 찾는 방법
콘솔
Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
BILLING_PROJECT_ID
: (선택사항) BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 이미gcloud config set project
로 결제 프로젝트로 전환한 경우에는 필요하지 않습니다. 결제 프로젝트에 대해 자세히 알아보세요.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다. 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다. 시간 형식에 대한 자세한 내용은 gcloud topic datetimes를 참조하세요.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.PARTITION_KEY
: 파티션을 나눈 BigQuery 테이블로 내보낼 때의 파티션 키 열입니다. 유효한 값은read-time
,request-time
입니다.
기타 플래그:
--output-bigquery-force
: 대상 테이블이 있으면 덮어씁니다.
output-bigquery-force
플래그를 true
로 설정하면 스냅샷 결과에서 해당 파티션을 덮어쓰지만 다른 파티션 하나 이상에 있는 데이터는 그대로 유지됩니다. output-bigquery-force
가 설정되지 않았거나 false
이면 해당 파티션에 데이터를 추가합니다.
스키마 업데이트나 데이터 추가에 실패하면 내보내기 작업이 실패합니다. 여기에는 대상 테이블이 이미 있고 내보내기에 필요한 스키마가 없는 경우가 포함됩니다.
REST
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 '{
"contentType": "CONTENT_TYPE",
"readTime": "SNAPSHOT_TIME",
"outputConfig": {
"bigqueryDestination": {
"dataset": "projects/PROJECT_ID/datasets/DATASET_ID",
"table": "TABLE_NAME",
"force": true,
"partitionSpec": {
"partitionKey": "PARTITION_KEY"
}
}
}
}' \
https://cloudasset.googleapis.com/v1/SCOPE:exportAssets
다음 값을 제공합니다.
BILLING_PROJECT_ID
: BigQuery 데이터 세트 및 테이블 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트에 대해 자세히 알아보세요.PROJECT_ID
: BigQuery 테이블이 있는 프로젝트의 ID입니다.CONTENT_TYPE
: 애셋 콘텐츠 유형입니다. 조직에만ACCESS_POLICY
콘텐츠 유형을 내보낼 수 있습니다. 프로젝트나 폴더에 내보내면 빈 테이블이 생성됩니다.SNAPSHOT_TIME
: (선택사항) 애셋의 스냅샷을 만들려는 시간입니다(RFC 3339 형식). 값은 현재 시간 또는 35일 이내의 과거 시간이어야 합니다. 제공하지 않으면 스냅샷이 현재 시간으로 작성됩니다.DATASET_ID
: BigQuery 데이터 세트의 ID입니다.TABLE_NAME
: 메타데이터를 내보내는 테이블입니다. 테이블이 없으면 생성됩니다.PARTITION_KEY
: 파티션을 나눈 BigQuery 테이블로 내보낼 때의 파티션 키 열입니다. 유효한 값은read-time
및request-time
입니다.SCOPE
: 범위는 프로젝트, 폴더 또는 조직이 될 수 있습니다.허용되는 값은 다음과 같습니다.
projects/PROJECT_ID
projects/PROJECT_NUMBER
Google Cloud 프로젝트 번호를 찾는 방법
콘솔
Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔의 대시보드 페이지로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다.
- 프로젝트 이름을 클릭하여 해당 프로젝트로 전환합니다. 프로젝트 번호가 프로젝트 정보 카드에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
Google Cloud 폴더 ID를 찾는 방법
콘솔
Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.
gcloud resource-manager folders list \ --organization=$(gcloud organizations describe ORGANIZATION_NAME \ --format="value(name.segment(1))") \ --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \ --format="value(ID)"
여기서 TOP_LEVEL_FOLDER_NAME은 전체 또는 일부 문자열 일치일 수 있습니다. 발견된 폴더에 대한 추가 정보를 보려면
--format
옵션을 삭제합니다.다른 폴더 내에서 폴더 ID를 가져오려면 하위 폴더를 나열합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
organizations/ORGANIZATION_ID
Google Cloud 조직 ID를 찾는 방법
콘솔
Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 상자를 클릭합니다.
- 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
기타 매개변수:
"force": true
: 대상 테이블이 있으면 덮어씁니다. 테이블에 내보내기에서 예상하는 것과 동일한 파티션 구조가 있는 경우에만 작동합니다.force
가true
로 설정되면 해당 파티션이 스냅샷 결과로 덮어쓰기되고 다른 파티션의 데이터는 그대로 유지됩니다.force
가 설정되지 않았거나false
로 설정되면 데이터가 해당 파티션에 추가됩니다.
스키마 업데이트나 데이터 추가에 실패하면 내보내기 작업이 실패합니다. 여기에는 대상 테이블이 이미 있고 내보내기에 필요한 스키마가 없는 경우가 포함됩니다.
내보내기 상태 확인
작업은 UUID인 작업 ID와 연결됩니다.
gcloud asset operations describe
명령어를 성공적으로 실행하는 데 추가 권한이 필요하지 않으므로 이 값은 잠재적으로 민감할 수 있습니다. 신뢰할 수 있는 사용자와 작업 ID를 공유해야 합니다.
같은 대상에 대한 이전 요청이 15분 이내에 시작되어 계속 실행 중이면 서버에서 요청을 거부합니다. 내보내기 시간이 15분보다 길고 동일한 대상에 대한 연속 요청이 첫 번째 요청이 성공하기 전에 실행되면 정의되지 않은 결과가 발생할 수 있습니다.
내보내기 상태를 확인하려면 다음 명령어를 실행하세요.
gcloud CLI
내보내기 상태를 확인하려면 다음 명령어를 실행합니다. 내보내기 명령어를 실행한 후 응답에 OPERATION_PATH
가 표시됩니다.
gcloud asset operations describe OPERATION_PATH
REST
내보내기 상태를 보려면 내보내기 응답에 반환된 작업 ID를 사용하여 다음 명령어를 실행합니다.
내보내기에 대한 응답의
name
필드에서OPERATION_PATH
를 찾을 수 있으며, 응답 형식은 다음과 같습니다."name": "projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID"
내보내기 상태를 확인하려면
OPERATION_PATH
와 함께 다음 명령어를 실행합니다.curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://cloudasset.googleapis.com/v1/OPERATION_PATH
애셋 스냅샷 보기
애셋 스냅샷 메타데이터가 포함된 테이블을 보려면 다음 단계를 완료합니다.
콘솔
Google Cloud 콘솔에서 BigQuery Studio 페이지로 이동합니다.
데이터 세트의 테이블과 뷰를 표시하려면 탐색 패널을 엽니다. 리소스 섹션에서 프로젝트를 선택하여 펼친 다음 데이터 세트를 선택합니다.
목록에서 테이블을 선택합니다.
세부정보를 선택하고 행 개수 값을 확인합니다. gcloud CLI 또는 REST API를 사용하여 결과의 시작점을 제어하려면 이 값이 필요할 수 있습니다.
샘플 데이터 세트를 보려면 미리보기를 선택합니다.
REST
테이블 데이터를 찾아보려면 tabledata.list
를 호출하세요.
tableId
매개변수에 테이블 이름을 지정합니다.
다음과 같은 선택적 매개변수를 구성하여 출력을 제어할 수 있습니다.
maxResults
는 반환할 최대 결과 수입니다.selectedFields
는 반환할 열을 쉼표로 구분한 목록입니다. 지정하지 않으면 모든 열이 반환됩니다.startIndex
는 읽기를 시작할 행의 0부터 시작하는 색인입니다.
반환되는 값은 JSON 객체에 래핑되므로 tabledata.list
참조 문서의 설명에 따라 객체를 파싱해야 합니다.
내보내기에 애셋과 애셋의 리소스 이름이 나열됩니다.
애셋 스냅샷 쿼리
스냅샷을 BigQuery로 내보낸 후 애셋 메타데이터에서 쿼리를 실행할 수 있습니다. 몇 가지 일반적인 사용 사례에 대한 자세한 내용은 BigQuery 샘플 쿼리로 내보내기를 참조하세요.
기본적으로 BigQuery는 대화형 또는 주문형 쿼리 작업을 실행합니다. 따라서 쿼리가 최대한 빠르게 실행됩니다. 대화형 쿼리는 동시 비율 한도와 일일 한도에 반영됩니다.
쿼리 결과는 임시 또는 영구 테이블에 저장됩니다. 데이터를 기존 테이블에 추가하거나 덮어쓸지, 혹은 동일한 이름의 테이블이 존재하지 않을 경우 새 테이블을 만들지 선택할 수 있습니다.
임시 테이블에 출력을 작성하는 대화형 쿼리를 실행하려면 다음 단계를 완료합니다.
콘솔
Google Cloud 콘솔에서 BigQuery Studio 페이지로 이동합니다.
새 쿼리 작성을 선택합니다.
쿼리 편집기 텍스트 영역에 유효한 BigQuery SQL 쿼리를 입력합니다.
(선택사항) 데이터 처리 위치를 변경하려면 다음 단계를 완료합니다.
더보기를 선택한 다음 쿼리 설정을 선택합니다.
처리 위치에서 자동 선택을 선택한 후 데이터의 위치를 선택합니다.
쿼리 설정을 업데이트하려면 저장을 선택합니다.
Run(실행)을 선택합니다.
REST
새 작업을 시작하려면
jobs.insert
메서드를 호출합니다. 작업 리소스에서 다음 매개변수를 설정합니다.configuration
필드에서query
필드를 BigQuery 쿼리 작업을 설명하는 JobConfigurationQuery로 설정합니다.jobReference
필드에서location
필드를 작업에 적합하도록 설정합니다.
결과를 폴링하려면
getQueryResults
을 호출합니다.jobComplete
가true
가 될 때까지 폴링해야 합니다.errors
목록에서 오류 및 경고를 확인할 수 있습니다.