BigQuery로 내보내기

이 주제에서는 조직, 폴더 또는 프로젝트의 애셋 메타데이터를 BigQuery 테이블로 내보낸 다음 인벤토리에서 데이터 분석을 실행하는 방법을 보여줍니다. BigQuery는 사용자가 커스텀 스크립트를 사용하지 않고도 데이터를 분석하고 의미 있는 정보를 생성할 수 있는 SQL과 유사한 환경을 제공합니다.

시작하기 전에

시작하기 전에 다음 단계를 완료하세요.

  1. API 명령어를 실행할 프로젝트에서 Cloud 애셋 인벤토리 API를 사용 설정합니다.

    Cloud Asset Inventory API 사용 설정

  2. gcloud CLI 또는 API를 사용하여 Cloud 애셋 인벤토리 API를 호출하는 데 필요한 권한을 구성하세요.

  3. 다음 단계에 따라 환경 설정을 완료합니다.

    gcloud CLI

    gcloud CLI를 사용하여 Cloud Asset Inventory API를 호출하는 환경을 설정하려면 로컬 클라이언트에 Google Cloud CLI를 설치하세요.

    REST

    curl 명령어로 Cloud Asset Inventory API를 호출하도록 환경을 설정하려면 다음 단계를 완료합니다.

    1. curl 명령어에 대한 액세스 권한이 있는지 확인합니다.

    2. 프로젝트, 폴더 또는 조직에서 다음 역할 중 하나를 계정에 부여했는지 확인합니다.

      • Cloud 애셋 뷰어 역할(roles/cloudasset.viewer)

      • 소유자 기본 역할(roles/owner)

  4. 한 프로젝트에서 다른 프로젝트로 메타데이터를 내보내는 경우 내보내는 프로젝트의 기본 Cloud 애셋 인벤토리 서비스 계정이 존재하고 권한이 올바른지 확인하세요.

  5. BigQuery 데이터세트 만들기

제한사항

애셋 스냅샷을 내보낼 때는 다음 사항에 유의하세요.

  • 커스텀 Cloud Key Management Service(Cloud KMS) 키로 암호화된 BigQuery 테이블은 지원되지 않습니다.

  • 파티션을 나눈 테이블로 내보내지 않으면 기존 테이블에 내보내기 출력을 추가할 수 없습니다. 대상 테이블은 비어 있거나 덮어써야 합니다. 덮어쓰려면 gcloud CLI로 --output-bigquery-force 플래그를 사용하거나 REST API로 force를 사용합니다.

  • 리소스 유형별 개별 테이블로 내보내는 경우 container.googleapis.com/Clustercontainer.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를 찾으려면 다음 단계를 완료합니다.

    1. Google Cloud 콘솔로 이동합니다.

      Google Cloud 콘솔로 이동

    2. 메뉴 바에서 전환 상자를 클릭합니다.
    3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
    4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 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를 찾으려면 다음 단계를 완료합니다.

    1. Google Cloud 콘솔로 이동합니다.

      Google Cloud 콘솔로 이동

    2. 메뉴 바에서 전환 상자를 클릭합니다.
    3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
    4. 모두 탭을 클릭합니다. 조직 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 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔의 대시보드 페이지로 이동합니다.

        대시보드로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다.
      4. 프로젝트 이름을 클릭하여 해당 프로젝트로 전환합니다. 프로젝트 번호가 프로젝트 정보 카드에 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      Google Cloud 폴더 ID를 찾는 방법

      콘솔

      Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
      4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 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를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
      4. 모두 탭을 클릭합니다. 조직 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/Clustercontainer.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를 찾으려면 다음 단계를 완료합니다.

    1. Google Cloud 콘솔로 이동합니다.

      Google Cloud 콘솔로 이동

    2. 메뉴 바에서 전환 상자를 클릭합니다.
    3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
    4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 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를 찾으려면 다음 단계를 완료합니다.

    1. Google Cloud 콘솔로 이동합니다.

      Google Cloud 콘솔로 이동

    2. 메뉴 바에서 전환 상자를 클릭합니다.
    3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
    4. 모두 탭을 클릭합니다. 조직 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 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔의 대시보드 페이지로 이동합니다.

        대시보드로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다.
      4. 프로젝트 이름을 클릭하여 해당 프로젝트로 전환합니다. 프로젝트 번호가 프로젝트 정보 카드에 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      Google Cloud 폴더 ID를 찾는 방법

      콘솔

      Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
      4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 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를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
      4. 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

기타 매개변수:

  • "force": true: 대상 테이블이 있으면 덮어씁니다.

테이블로 내보내지 못하면 전체 내보내기 작업이 실패하고 첫 번째 오류를 반환합니다. 이전의 성공적인 내보내기 결과는 유지됩니다.

JSON3BigQuery 유형 사이의 호환성 문제가 해결되도록 다음 유형이 JSON 문자열에 포함합니다.

  • google.protobuf.Timestamp

  • google.protobuf.Duration

  • google.protobuf.FieldMask

  • google.protobuf.ListValue

  • google.protobuf.Value

  • google.protobuf.Struct

  • google.api.*

파티션을 나눈 테이블로 내보내기

프로젝트의 애셋을 파티션을 나눈 테이블로 내보내려면 내보내기 요청에서 파티션 키를 정의하세요. 내보낸 스냅샷은 일일 세부사항이 있는 TABLE_NAME이라는 BigQuery 테이블과 readTimerequestTime이라는 두 개의 추가 타임스탬프 열에 저장되는데, 둘 중 하나는 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를 찾으려면 다음 단계를 완료합니다.

    1. Google Cloud 콘솔로 이동합니다.

      Google Cloud 콘솔로 이동

    2. 메뉴 바에서 전환 상자를 클릭합니다.
    3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
    4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 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를 찾으려면 다음 단계를 완료합니다.

    1. Google Cloud 콘솔로 이동합니다.

      Google Cloud 콘솔로 이동

    2. 메뉴 바에서 전환 상자를 클릭합니다.
    3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
    4. 모두 탭을 클릭합니다. 조직 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-timerequest-time입니다.

  • SCOPE: 범위는 프로젝트, 폴더 또는 조직이 될 수 있습니다.

    허용되는 값은 다음과 같습니다.

    • projects/PROJECT_ID

    • projects/PROJECT_NUMBER

      Google Cloud 프로젝트 번호를 찾는 방법

      콘솔

      Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔의 대시보드 페이지로 이동합니다.

        대시보드로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다.
      4. 프로젝트 이름을 클릭하여 해당 프로젝트로 전환합니다. 프로젝트 번호가 프로젝트 정보 카드에 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"

    • folders/FOLDER_ID

      Google Cloud 폴더 ID를 찾는 방법

      콘솔

      Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
      4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 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를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 상자를 클릭합니다.
      3. 다음 조직에서 선택 상자를 클릭한 후 조직을 선택합니다.
      4. 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

기타 매개변수:

  • "force": true: 대상 테이블이 있으면 덮어씁니다. 이 작업은 테이블에 내보내기에서 예상한 것과 동일한 파티션 구조가 있는 경우에만 작동합니다.

    forcetrue로 설정되면 해당 파티션이 스냅샷 결과로 덮어쓰기되고 다른 파티션의 데이터는 그대로 유지됩니다. force가 설정되지 않았거나 false로 설정된 경우 데이터가 해당 파티션에 추가됩니다.

스키마 업데이트나 데이터 추가에 실패하면 내보내기 작업이 실패합니다. 여기에는 대상 테이블이 존재하고 내보내기에 필요한 스키마가 없는 경우가 포함됩니다.

내보내기 상태 확인

작업은 UUID인 작업 ID와 연결됩니다. gcloud asset operations describe 명령어를 성공적으로 실행하는 데 추가 권한이 필요하지 않으므로 이 값은 잠재적으로 민감할 수 있습니다. 작업 ID를 신뢰할 수 있는 사용자와만 공유해야 합니다.

동일한 대상에 대한 이전 요청이 15분 이내에 시작되어 여전히 실행 중인 경우 서버에서 요청을 거부합니다. 내보내기 시간이 15분보다 길고 동일한 대상에 대한 연속 요청이 첫 번째 요청이 성공하기 전에 실행되면 정의되지 않은 결과가 발생할 수 있습니다.

내보내기 상태를 확인하려면 다음 명령어를 실행하세요.

gcloud CLI

내보내기 상태를 확인하려면 다음 명령어를 실행합니다. 내보내기 명령어를 실행한 후 응답에 OPERATION_PATH가 표시됩니다.

gcloud asset operations describe OPERATION_PATH

REST

내보내기 상태를 보려면 내보내기 응답에 반환된 작업 ID를 사용하여 다음 명령어를 실행합니다.

  1. 내보내기에 대한 응답의 name 필드에서 OPERATION_PATH를 찾을 수 있으며, 응답 형식은 다음과 같습니다.

    "name": "projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID"
    
  2. 내보내기 상태를 확인하려면 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
    

애셋 스냅샷 보기

애셋 스냅샷 메타데이터가 포함된 테이블을 보려면 다음 단계를 완료합니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery Studio 페이지로 이동합니다.

    BigQuery Studio로 이동

  2. 데이터 세트의 테이블과 뷰를 표시하려면 탐색 패널을 엽니다. 리소스 섹션에서 프로젝트를 선택하여 펼친 다음 데이터 세트를 선택합니다.

  3. 목록에서 테이블을 선택합니다.

  4. 세부정보를 선택하고 행 개수 값을 확인합니다. gcloud CLI 또는 REST API를 사용하여 결과의 시작점을 제어하려면 이 값이 필요할 수 있습니다.

  5. 샘플 데이터 세트를 보려면 미리보기를 선택합니다.

REST

테이블 데이터를 찾아보려면 tabledata.list를 호출하세요. tableId 매개변수에 테이블 이름을 지정합니다.

다음과 같은 선택적 매개변수를 구성하여 출력을 제어할 수 있습니다.

  • maxResults는 반환할 최대 결과 수입니다.

  • selectedFields는 반환할 열을 쉼표로 구분한 목록입니다. 지정하지 않으면 모든 열이 반환됩니다.

  • startIndex는 읽기를 시작할 행의 0부터 시작하는 색인입니다.

반환되는 값은 JSON 객체에 래핑되므로 tabledata.list 참조 문서의 설명에 따라 객체를 파싱해야 합니다.

내보내기에 애셋과 애셋의 리소스 이름이 나열됩니다.

애셋 스냅샷 쿼리

스냅샷을 BigQuery로 내보낸 후 애셋 메타데이터에서 쿼리를 실행할 수 있습니다. 몇 가지 일반적인 사용 사례에 대한 자세한 내용은 BigQuery 샘플 쿼리로 내보내기를 참조하세요.

기본적으로 BigQuery는 대화형 또는 주문형 쿼리 작업을 실행합니다. 따라서 쿼리가 최대한 빠르게 실행됩니다. 대화형 쿼리는 동시 비율 한도와 일일 한도에 반영됩니다.

쿼리 결과는 임시 또는 영구 테이블에 저장됩니다. 데이터를 기존 테이블에 추가하거나 덮어쓸지, 혹은 동일한 이름의 테이블이 존재하지 않을 경우 새 테이블을 만들지 선택할 수 있습니다.

임시 테이블에 출력을 작성하는 대화형 쿼리를 실행하려면 다음 단계를 완료합니다.

콘솔

  1. Google Cloud 콘솔에서 BigQuery Studio 페이지로 이동합니다.

    BigQuery Studio로 이동

  2. 새 쿼리 작성을 선택합니다.

  3. 쿼리 편집기 텍스트 영역에 유효한 BigQuery SQL 쿼리를 입력합니다.

  4. (선택사항) 데이터 처리 위치를 변경하려면 다음 단계를 완료합니다.

    1. 더보기를 선택한 다음 쿼리 설정을 선택합니다.

    2. 처리 위치에서 자동 선택을 선택한 후 데이터의 위치를 선택합니다.

    3. 쿼리 설정을 업데이트하려면 저장을 선택합니다.

  5. Run(실행)을 선택합니다.

REST

  1. 새 작업을 시작하려면 jobs.insert 메서드를 호출합니다. 작업 리소스에서 다음 매개변수를 설정합니다.

    • configuration 필드에서 query 필드를 BigQuery 쿼리 작업을 설명하는 JobConfigurationQuery로 설정합니다.

    • jobReference 필드에서 location 필드를 작업에 적합하도록 설정합니다.

  2. 결과를 폴링하려면 getQueryResults을 호출합니다. jobCompletetrue가 될 때까지 폴링해야 합니다. errors 목록에서 오류 및 경고를 확인할 수 있습니다.