BigQuery SQL 호환 언어를 사용하여 프로젝트, 폴더 또는 조직의 애셋을 쿼리할 수 있습니다.
시작하기 전에
Cloud 애셋 인벤토리 명령어를 실행할 프로젝트에서 Cloud 애셋 인벤토리 API를 사용 설정하세요.
계정에 Cloud 애셋 인벤토리 API를 호출할 수 있는 올바른 역할이 있는지 확인합니다. 각 호출 유형에 대한 개별 권한은 권한을 참고하세요.
제한사항
애셋 유형 이름에서는
.
및/
가_
로 대체되었습니다. 예를 들어compute.googleapis.com/Instance
는compute_googleapis_com_Instance
가 됩니다.요청은
SELECT
쿼리여야 합니다.기존 BigQuery SQL은 지원되지 않습니다.
쿼리 결과가 10MB 또는 1,000행을 초과하면 항상 페이지로 나뉩니다.
쿼리 결과는
US
멀티 리전의 BigQuery 데이터 세트로만 내보낼 수 있습니다.
쿼리할 수 있는 테이블
다음 테이블을 쿼리할 수 있습니다.
RESOURCE
콘텐츠 유형의 경우, 애셋 유형이 존재한다고 가정할 때 데이터 세트의 테이블 이름은 애셋 유형 이름에 해당합니다. 예를 들어compute_googleapis_com_Instance
테이블에는 Compute Engine 인스턴스 메타데이터가 포함됩니다.RESOURCE
가 아닌 콘텐츠 유형의 경우 데이터 세트의 테이블 이름은 RPC/REST 콘텐츠 유형 이름에 해당합니다. 예를 들면ACCESS_POLICY
입니다.리소스 유형에서 리소스 표준 메타데이터를 쿼리하려면 테이블 이름
STANDARD_METADATA
를 사용하세요. 여기에는 각 리소스 유형에 고유한resource.DATA
를 제외한 모든 필드가 포함됩니다.
애셋 메타데이터 쿼리
콘솔
프로젝트, 폴더, 조직의 애셋 메타데이터를 쿼리하려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔의 Security Command Center에서 애셋 페이지로 이동합니다.
- 쿼리할 프로젝트, 폴더 또는 조직으로 변경합니다.
- 애셋 쿼리 탭을 클릭합니다.
-
애셋 메타데이터를 쿼리하려면 샘플 쿼리를 사용하거나 직접 빌드합니다.
- 샘플을 사용하려면 쿼리 라이브러리 탭에서 항목을 클릭하여 쿼리를 미리 봅니다. *적용*을 클릭하여 샘플을 쿼리 수정 상자에 복사한 후 쿼리를 수정하거나 실행을 클릭하여 실행합니다.
- 고유한 쿼리를 빌드하려면 쿼리 수정 상자에 쿼리 텍스트를 직접 입력한 후 실행을 클릭하여 실행합니다. 고유한 쿼리를 작성하려면 테이블 선택 창에서 테이블을 클릭하여 스키마와 콘텐츠를 미리 보면 됩니다. 쿼리를 구성하는 방법은 쿼리 문법을 참고하세요.
쿼리와 일치하는 애셋 메타데이터가 쿼리 결과 탭에 표시됩니다.
-
선택사항: 쿼리 결과 집합을 CSV 형식으로 다운로드하려면 내보내기를 클릭합니다.
CSV 파일의 최대 크기는 2MB입니다. 파일 크기가 이 한도를 초과하기 때문에 다운로드 요청이 실패하면 전체 결과를 내보내기 위한 안내와 함께 메시지가 표시됩니다.
gcloud
gcloud asset query \ --SCOPE \ --statement="SQL_SELECT_QUERY" \ --timeout="TIMEOUTs"
다음 값을 제공합니다.
-
SCOPE
: 다음 중 한 가지 값을 사용합니다.-
project=PROJECT_ID
: 여기서PROJECT_ID
는 쿼리할 애셋이 있는 프로젝트의 ID입니다. -
folder=FOLDER_ID
: 여기서FOLDER_ID
는 쿼리하려는 애셋이 있는 폴더의 ID입니다.Google Cloud 폴더의 ID를 찾는 방법
Google Cloud 콘솔
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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
: 여기서ORGANIZATION_ID
는 쿼리하려는 애셋이 있는 조직의 ID입니다.Google Cloud 조직의 ID를 찾는 방법
Google Cloud 콘솔
Google Cloud 조직의 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 목록 상자를 클릭합니다.
- 목록 상자에서 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직의 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
SQL_SELECT_QUERY
: SQLSELECT
쿼리입니다. -
TIMEOUT
: 선택사항. 클라이언트가 계속하기 전에 쿼리가 완료될 때까지 기다려야 하는 최대 시간(초)입니다. 제한 시간을 사용하여 쿼리를 비동기식으로 실행하고 작업 참조를 사용하여 나중에 결과를 검색합니다.
모든 옵션은 gcloud CLI 참조를 확인하세요.
예
다음 명령어를 실행하여 my-project
프로젝트의 처음 두 Compute Engine 인스턴스의 이름과 애셋 유형을 가져옵니다.
gcloud asset query \ --project=my-project \ --statement=" SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2"
완료된 작업 응답
다음 샘플은 이전 예시 쿼리에 대한 응답을 보여줍니다. 응답에는 작업 참조가 포함되며 작업이 완료되었는지 여부를(done: true
) 알려줍니다. 작업이 완료되면 queryResult
객체가 적절한 데이터로 채워지고 그 후에 결과가 표시됩니다.
done: true jobReference: 0000000000000000000000000000000000000000000000000000000000000000 queryResult: nextPageToken: '' totalRows: '2' name: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1 assetType: compute.googleapis.com/Instance name: //compute.googleapis.com/projects/my-project/zones/us-central1-c/instances/instance-2 assetType: compute.googleapis.com/Instance
완료되지 않은 작업 응답
요청에 제한 시간을 설정하면 쿼리가 비동기식으로 실행되고 작업이 완료되지 않았음을 나타내는 응답(done: false
)이 전송됩니다. 이러한 유형의 응답에는 작업 참조와 채워지지 않은 queryResult
객체가 포함됩니다.
done: false jobReference: 0000000000000000000000000000000000000000000000000000000000000000 queryResult: nextPageToken: '' totalRows: '0'
작업이 완료되고 데이터를 사용할 수 있게 되면 jobReference
값을 사용하여 나중에 쿼리 결과를 검색할 수 있습니다.
REST
HTTP 메서드 및 URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets
JSON 요청 본문:
{ "statement": "SQL_SELECT_QUERY", "timeout": "TIMEOUTs", "pageSize": "PAGE_SIZE", "pageToken": "PAGE_TOKEN" }
다음 값을 제공합니다.
-
SCOPE_PATH
: 다음 중 한 가지 값을 사용합니다.허용되는 값은 다음과 같습니다.
-
projects/PROJECT_ID
: 여기서PROJECT_ID
는 쿼리할 애셋이 있는 프로젝트의 ID입니다. -
projects/PROJECT_NUMBER
: 여기서PROJECT_NUMBER
는 쿼리할 애셋이 있는 프로젝트의 번호입니다.Google Cloud 프로젝트 번호를 찾는 방법
Google Cloud 콘솔
Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
: 여기서FOLDER_ID
는 쿼리하려는 애셋이 있는 폴더의 ID입니다.Google Cloud 폴더의 ID를 찾는 방법
Google Cloud 콘솔
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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
: 여기서ORGANIZATION_ID
는 쿼리하려는 애셋이 있는 조직의 ID입니다.Google Cloud 조직의 ID를 찾는 방법
Google Cloud 콘솔
Google Cloud 조직의 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 목록 상자를 클릭합니다.
- 목록 상자에서 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직의 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
SQL_SELECT_QUERY
: SQLSELECT
쿼리입니다. -
TIMEOUT
: 선택사항. 클라이언트가 계속하기 전에 쿼리가 완료될 때까지 기다려야 하는 최대 시간(초)입니다. 제한 시간을 사용하여 쿼리를 비동기식으로 실행하고 작업 참조를 사용하여 나중에 결과를 검색합니다. -
PAGE_SIZE
: 선택사항. 페이지당 반환할 결과 수입니다. 최댓값은 500입니다. 값을0
또는 음수 값으로 설정하면 적합한 기본값이 선택됩니다.nextPageToken
이 반환되어 후속 결과를 검색합니다. -
PAGE_TOKEN
: 선택사항. 긴 요청 응답은 여러 페이지로 구분됩니다.pageToken
이 지정되지 않으면 첫 번째 페이지가 반환됩니다. 이전 응답의nextPageToken
을pageToken
값으로 사용하여 후속 페이지를 호출할 수 있습니다.
모든 옵션은 REST 참조를 참고하세요.
명령어 예시
다음 명령어 중 하나를 실행하여 my-project
프로젝트의 처음 두 Compute Engine 인스턴스의 이름과 애셋 유형을 가져옵니다.
cURL(Linux, macOS, Cloud Shell)
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2" }' \ https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets
PowerShell(Windows)
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } $body = @" { "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2" } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content
완료된 작업 응답
다음 샘플은 이전 예시 쿼리에 대한 응답을 보여줍니다. 응답에는 작업 참조가 포함되며 작업이 완료되었는지 여부를("done": true
) 알려줍니다. 작업이 완료되면 queryResult
객체에 적절한 데이터가 채워집니다.
쿼리 결과는 애셋 메타데이터가 포함된 배열인 rows
와 rows
배열의 각 애셋에 대한 스키마를 설명하는 객체인 schema
로 나뉩니다. 이는 대규모 응답에서 필드 이름과 유형의 중복을 최소화하기 위함입니다.
마찬가지로 f
및 v
는 응답을 최대한 작게 유지하기 위해 fields
및 value
대신 rows
배열에 사용됩니다.
{ "jobReference": "0000000000000000000000000000000000000000000000000000000000000000", "done": true, "queryResult": { "rows": [ { "f": [ { "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1" }, { "v": "compute.googleapis.com/Instance" } ] }, { "f": [ { "v": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-2" }, { "v": "compute.googleapis.com/Instance" } ] } ], "schema": { "fields": [ { "field": "name", "type": "STRING", "mode": "NULLABLE", "fields": [] }, { "field": "assetType", "type": "STRING", "mode": "NULLABLE", "fields": [] } ] }, "nextPageToken": "", "totalRows": "1" } }
완료되지 않은 작업 응답
요청에 제한 시간을 설정하면 쿼리가 비동기식으로 실행되고 작업이 완료되지 않았음을 나타내는 응답("done": false
)이 전송됩니다. 이러한 유형의 응답에는 작업 참조와 채워지지 않은 queryResult
객체가 포함됩니다.
{ "jobReference": "0000000000000000000000000000000000000000000000000000000000000000", "done": false, "queryResult": { "rows": [], "schema": { "fields": [] }, "nextPageToken": "", "totalRows": "0" } }
작업이 완료되고 데이터를 사용할 수 있게 되면 jobReference
값을 사용하여 나중에 쿼리 결과를 검색할 수 있습니다.
나중에 쿼리 결과 검색
완료하는 데 시간이 걸린 요청을 나중에 검색하려면 다음 요청 중 하나를 실행합니다.
gcloud
gcloud asset query \ --SCOPE \ --job-reference="JOB_REFERENCE"
다음 값을 제공합니다.
-
SCOPE
: 다음 중 한 가지 값을 사용합니다.-
project=PROJECT_ID
: 여기서PROJECT_ID
는 쿼리할 애셋이 있는 프로젝트의 ID입니다. -
folder=FOLDER_ID
: 여기서FOLDER_ID
는 쿼리하려는 애셋이 있는 폴더의 ID입니다.Google Cloud 폴더의 ID를 찾는 방법
Google Cloud 콘솔
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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
: 여기서ORGANIZATION_ID
는 쿼리하려는 애셋이 있는 조직의 ID입니다.Google Cloud 조직의 ID를 찾는 방법
Google Cloud 콘솔
Google Cloud 조직의 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 목록 상자를 클릭합니다.
- 목록 상자에서 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직의 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
JOB_REFERENCE
: 이전 응답에서 반환된 작업 참조 값입니다.
예
다음 명령어를 실행하여 my-project
프로젝트에서 이전에 실행한 쿼리의 결과를 가져옵니다.
gcloud asset query \ --project=my-project \ --job-reference="0000000000000000000000000000000000000000000000000000000000000000"
REST
HTTP 메서드 및 URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets
JSON 요청 본문:
{ "jobReference": "JOB_REFERENCE", "pageToken": "PAGE_TOKEN" }
다음 값을 제공합니다.
-
SCOPE_PATH
: 다음 중 한 가지 값을 사용합니다.허용되는 값은 다음과 같습니다.
-
projects/PROJECT_ID
: 여기서PROJECT_ID
는 쿼리할 애셋이 있는 프로젝트의 ID입니다. -
projects/PROJECT_NUMBER
: 여기서PROJECT_NUMBER
는 쿼리할 애셋이 있는 프로젝트의 번호입니다.Google Cloud 프로젝트 번호를 찾는 방법
Google Cloud 콘솔
Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
: 여기서FOLDER_ID
는 쿼리하려는 애셋이 있는 폴더의 ID입니다.Google Cloud 폴더의 ID를 찾는 방법
Google Cloud 콘솔
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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
: 여기서ORGANIZATION_ID
는 쿼리하려는 애셋이 있는 조직의 ID입니다.Google Cloud 조직의 ID를 찾는 방법
Google Cloud 콘솔
Google Cloud 조직의 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 목록 상자를 클릭합니다.
- 목록 상자에서 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직의 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
JOB_REFERENCE
: 이전 응답에서 반환된 작업 참조 값입니다. -
PAGE_TOKEN
: 선택사항. 긴 요청 응답은 여러 페이지로 구분됩니다.pageToken
이 지정되지 않으면 첫 번째 페이지가 반환됩니다. 이전 응답의nextPageToken
을pageToken
값으로 사용하여 후속 페이지를 호출할 수 있습니다.
명령어 예시
다음 명령어 중 하나를 실행하여 이전에 실행한 쿼리의 결과를 가져옵니다.
cURL(Linux, macOS, Cloud Shell)
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "jobReference": "0000000000000000000000000000000000000000000000000000000000000000" }' \ https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets
PowerShell(Windows)
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } $body = @" { "jobReference": "0000000000000000000000000000000000000000000000000000000000000000" } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content
BigQuery로 쿼리 결과 내보내기
쿼리 결과는 Query Assets API 응답으로 반환됩니다. 결과를 자체 BigQuery 테이블로 내보내려면 요청에 BigQuery 대상을 지정합니다. 아직 없으면 요청을 수행하기 전에 BigQuery 데이터 세트를 만들어야 합니다.
gcloud
gcloud asset query \ --SCOPE \ --billing-project=BILLING_PROJECT_ID \ --statement="SQL_SELECT_QUERY" \ --bigquery-table=projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME \ --write-disposition="WRITE_METHOD"
다음 값을 제공합니다.
-
SCOPE
: 다음 중 한 가지 값을 사용합니다.-
project=PROJECT_ID
: 여기서PROJECT_ID
는 SQL 쿼리로 내보내려는 애셋 메타데이터가 있는 프로젝트의 ID입니다. -
folder=FOLDER_ID
: 여기서FOLDER_ID
는 SQL 쿼리로 내보내려는 애셋 메타데이터가 있는 폴더의 ID입니다.Google Cloud 폴더의 ID를 찾는 방법
Google Cloud 콘솔
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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organization=ORGANIZATION_ID
: 여기서ORGANIZATION_ID
는 SQL 쿼리로 내보내려는 애셋 메타데이터가 있는 조직의 ID입니다.Google Cloud 조직의 ID를 찾는 방법
Google Cloud 콘솔
Google Cloud 조직의 ID를 찾으려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔로 이동합니다.
- 메뉴 바에서 전환 목록 상자를 클릭합니다.
- 목록 상자에서 조직을 선택합니다.
- 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 조직의 ID를 검색할 수 있습니다.
gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
-
-
-
SQL_SELECT_QUERY
: SQLSELECT
쿼리입니다. -
BIGQUERY_PROJECT_ID
: 내보내려는 BigQuery 테이블이 있는 프로젝트의 ID입니다. DATASET_ID
: BigQuery 데이터 세트의 ID입니다.-
TABLE_NAME
: 메타데이터를 내보내는 BigQuery 테이블. 테이블이 없으면 생성됩니다. -
WRITE_METHOD
: BigQuery 대상 테이블 또는 파티션이 이미 있는 경우의 동작을 지정합니다. 다음 값이 지원됩니다.-
write-empty
: 기본값입니다. 기존 테이블에 데이터가 포함되어 있으면 작업 결과에 중복 오류가 반환됩니다. write-append
: 테이블 또는 최신 파티션에 데이터를 추가합니다.-
write-truncate
: 전체 테이블 또는 모든 파티션 데이터를 덮어씁니다.
-
예
다음 명령어를 실행하여 my-project
프로젝트의 처음 두 Compute Engine 인스턴스의 이름과 애셋 유형을 가져오고 결과를 my-project
프로젝트의 my-table
BigQuery 테이블로 내보내고, 테이블이 이미 있는 경우 전체 테이블을 덮어씁니다.
gcloud asset query \ --project=my-project \ --statement=" SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2" \ --bigquery-table=projects/my-project/datasets/my-dataset/tables/my-table \ --write-disposition="write-truncate"
REST
HTTP 메서드 및 URL:
POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:queryAssets
헤더:
X-Goog-User-Project: BILLING_PROJECT_ID
JSON 요청 본문:
{ "statement": "SQL_SELECT_QUERY", "outputConfig": { "bigqueryDestination": { "dataset": "projects/BIGQUERY_PROJECT_ID/datasets/DATASET_ID", "table": "TABLE_NAME", "writeDisposition": "WRITE_METHOD" } }, "pageSize": "PAGE_SIZE" }
다음 값을 제공합니다.
-
SCOPE_PATH
: 다음 중 한 가지 값을 사용합니다.허용되는 값은 다음과 같습니다.
-
projects/PROJECT_ID
: 여기서PROJECT_ID
는 SQL 쿼리로 내보내려는 애셋 메타데이터가 있는 프로젝트의 ID입니다. -
projects/PROJECT_NUMBER
: 여기서PROJECT_NUMBER
는 SQL 쿼리로 내보내려는 애셋 메타데이터가 있는 프로젝트의 번호입니다.Google Cloud 프로젝트 번호를 찾는 방법
Google Cloud 콘솔
Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.
gcloud CLI
다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
-
folders/FOLDER_ID
: 여기서FOLDER_ID
는 SQL 쿼리로 내보내려는 애셋 메타데이터가 있는 폴더의 ID입니다.Google Cloud 폴더의 ID를 찾는 방법
Google Cloud 콘솔
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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.
gcloud resource-manager folders list --folder=FOLDER_ID
-
-
organizations/ORGANIZATION_ID
: 여기서ORGANIZATION_ID
는 SQL 쿼리로 내보내려는 애셋 메타데이터가 있는 조직의 ID입니다.Google Cloud 조직의 ID를 찾는 방법
Google Cloud 콘솔
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입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요. -
SQL_SELECT_QUERY
: SQLSELECT
쿼리입니다. -
BIGQUERY_PROJECT_ID
: 내보내려는 BigQuery 테이블이 있는 프로젝트의 ID입니다. DATASET_ID
: BigQuery 데이터 세트의 ID입니다.-
TABLE_NAME
: 메타데이터를 내보내는 BigQuery 테이블. 테이블이 없으면 생성됩니다. -
WRITE_METHOD
: BigQuery 대상 테이블 또는 파티션이 이미 있는 경우의 동작을 지정합니다. 다음 값이 지원됩니다.-
WRITE_EMPTY
: 기본값입니다. 기존 테이블에 데이터가 포함되어 있으면 작업 결과에 중복 오류가 반환됩니다. WRITE_APPEND
: 테이블 또는 최신 파티션에 데이터를 추가합니다.-
WRITE_TRUNCATE
: 전체 테이블 또는 모든 파티션 데이터를 덮어씁니다.
-
-
PAGE_SIZE
: 선택사항. 페이지당 반환할 결과 수입니다. 최댓값은 500입니다. 값을0
또는 음수 값으로 설정하면 적합한 기본값이 선택됩니다.nextPageToken
이 반환되어 후속 결과를 검색합니다.
명령어 예시
다음 명령어 중 하나를 실행하여 my-project
프로젝트의 처음 두 Compute Engine 인스턴스의 이름과 애셋 유형을 가져오고 결과를 my-project
프로젝트의 my-table
BigQuery 테이블로 내보내고, 테이블이 이미 있는 경우 전체 테이블을 덮어씁니다.
cURL(Linux, macOS, Cloud Shell)
curl -X POST \ -H "X-Goog-User-Project: BILLING_PROJECT_ID" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "writeDisposition": "WRITE_TRUNCATE" } } }' \ https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets
PowerShell(Windows)
$cred = gcloud auth print-access-token $headers = @{ "X-Goog-User-Project" = "BILLING_PROJECT_ID"; "Authorization" = "Bearer $cred" } $body = @" { "statement": " SELECT name, assetType FROM compute_googleapis_com_Instance LIMIT 2", "outputConfig": { "bigqueryDestination": { "dataset": "projects/my-project/datasets/my-dataset", "table": "my-table", "writeDisposition": "WRITE_TRUNCATE" } } } "@ Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body $body ` -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:queryAssets" | Select-Object -Expand Content
추가 SQL 쿼리 예시
다음 코드 샘플은 애셋을 검색하는 데 사용할 수 있는 특정 SQL 쿼리를 보여주므로 자체 쿼리를 구성할 수 있습니다.
특정 리전의 Compute Engine VM 인스턴스
또한 name
및 생성 시점을 반환합니다.
SELECT
name,
resource.DATA.creationTimestamp
FROM
compute_googleapis_com_Instance
WHERE
resource.location LIKE '%asia%'
각 프로젝트의 BigQuery 데이터 세트 수
SELECT
ancestor AS project,
COUNT(*)
FROM
bigquery_googleapis_com_Dataset
CROSS JOIN
UNNEST (ancestors) AS ancestor
WHERE
ancestor LIKE '%project%'
GROUP BY
ancestor
ORDER BY
2 DESC
각 리전에 있는 Compute Engine VM 인스턴스 수
SELECT
resource.location,
COUNT(*)
FROM
compute_googleapis_com_Instance
GROUP BY
resource.location
리전의 모든 리소스의 이름 및 assetType
SELECT
name,
assetType
FROM
STANDARD_METADATA
WHERE
resource.location LIKE '%asia%'
공개적으로 사용 가능한 Cloud Storage 버킷
또한 name
을 반환합니다.
SELECT
name
FROM
IAM_POLICY
CROSS JOIN
UNNEST(iamPolicy.bindings) AS binding
WHERE
('allUsers' IN UNNEST(binding.members)
OR 'allAuthenticatedUsers' IN UNNEST(binding.members))
AND assetType = 'storage.googleapis.com/Bucket'
연결된 VM 인스턴스가 없는 서브네트워크
SELECT
subnetwork_table.name
FROM
compute_googleapis_com_Subnetwork AS subnetwork_table
LEFT JOIN (
SELECT
interface.subnetwork AS subnetwork
FROM
compute_googleapis_com_Instance
CROSS JOIN
UNNEST(resource.DATA.networkInterfaces) AS interface) AS instance_table
ON
SUBSTR(subnetwork_table.name, 25) = SUBSTR(instance_table.subnetwork,38)
WHERE
instance_table.subnetwork IS NULL
AND NOT subnetwork_table.name LIKE '%default%'