Cloud Storage로 애셋 메타데이터 내보내기

이 문서에서는 프로젝트의 애셋 메타데이터를 Cloud Storage 버킷으로 내보내는 방법을 보여줍니다.

시작하기 전에

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

    Cloud Asset Inventory API 사용 설정

  2. 계정에 Cloud 애셋 인벤토리 API를 호출할 수 있는 올바른 역할이 있는지 확인합니다. 각 호출 유형에 대한 개별 권한은 권한을 참조하세요.

  3. 내보낼 Cloud Storage 버킷이 없으면 Cloud Storage 버킷을 만듭니다.

제한사항

  • 커스텀 Cloud Key Management Service(Cloud KMS) 키로 암호화된 Cloud Storage 버킷은 지원되지 않습니다.

  • Cloud Storage 버킷에 보관 정책을 설정할 수 없습니다.

  • 내보내기 중에 작업이 출력 폴더에 임시 파일을 만들 수 있습니다. 작업이 진행되는 동안 이 임시 파일을 삭제하지 마세요. 작업이 완료되면 임시 파일이 자동으로 삭제됩니다.

  • ACCESS_POLICY 콘텐츠 유형을 조직 수준에서만 내보낼 수 있습니다.

  • 내보낼 파일이 이미 있고 내보내기 중인 경우에는 400 오류가 반환됩니다.

  • 권한을 테스트하기 위해 Cloud 애셋 인벤토리는 데이터를 내보내기 전에 빈 파일을 만들고 google.cloud.storage.object.v1.finalized의 추가 Cloud Storage 트리거 이벤트를 전송합니다.

Cloud Storage로 애셋 스냅샷 내보내기

gcloud

gcloud asset export \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --snapshot-time="SNAPSHOT_TIME" \
    --OUTPUT_TYPE

다음 값을 제공합니다.

  • SCOPE: 다음 값 중 하나를 사용합니다.

    • project=PROJECT_ID: 여기서 PROJECT_ID는 내보내려는 애셋 메타데이터가 있는 프로젝트의 ID입니다.
    • folder=FOLDER_ID: 여기서 FOLDER_ID는 내보내려는 애셋 메타데이터가 포함된 폴더의 ID입니다.

      Google Cloud 폴더의 ID를 찾는 방법

      Google Cloud 콘솔

      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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organization=ORGANIZATION_ID: 여기서 ORGANIZATION_ID는 내보내려는 애셋 메타데이터가 있는 조직의 ID입니다.

      Google Cloud 조직의 ID를 찾는 방법

      Google Cloud 콘솔

      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입니다. 결제 프로젝트 설정 자세히 알아보기

  • ASSET_TYPE_#: 선택사항. 쉼표로 구분된 검색 가능한 애셋 유형 목록입니다. RE2 호환 정규 표현식이 지원됩니다. 정규 표현식이 지원되는 애셋 유형과 일치하지 않으면 INVALID_ARGUMENT 오류가 반환됩니다. --asset-types를 지정하지 않으면 모든 애셋 유형이 반환됩니다.
  • CONTENT_TYPE: 선택사항. 검색하려는 메타데이터의 콘텐츠 유형입니다. --content-type을 지정하지 않으면 애셋 이름, 애셋이 마지막으로 업데이트된 시간, 애셋이 속한 프로젝트, 폴더, 조직과 같은 기본 정보만 반환됩니다.
  • RELATIONSHIP_TYPE_#: 선택사항. Security Command Center Premium 또는 Enterprise 등급 또는 Gemini Cloud Assist에 대한 액세스 권한이 필요합니다. 검색하려는 애셋 관계 유형의 쉼표로 구분된 목록입니다. 이렇게 하려면 CONTENT_TYPERELATIONSHIP로 설정해야 합니다.
  • SNAPSHOT_TIME: 선택사항. 애셋 스냅샷을 만들려는 시간(gcloud 주제 날짜/시간 형식)입니다. 값은 과거 35일 이내여야 합니다. --snapshot-time을 지정하지 않으면 현재 시간의 스냅샷이 생성됩니다.
  • OUTPUT_TYPE: 다음 값 중 하나를 사용합니다.

    • --output-path="gs://BUCKET_NAME/FILE_NAME": 출력을 파일에 씁니다. 여기서

      • BUCKET_NAME은 쓰기 작업을 실행할 Cloud Storage 버킷의 이름입니다.
      • FILE_NAME는 Cloud Storage 버킷에 쓸 파일입니다.
    • --output-path-prefix="gs://BUCKET_NAME/FOLDER_NAME": 출력을 폴더에 씁니다. 여기서

      • BUCKET_NAME은 쓰기 작업을 실행할 Cloud Storage 버킷의 이름입니다.
      • FOLDER_NAME는 Cloud Storage 버킷에 쓸 폴더입니다. 출력은 애셋 유형의 이름을 따서 하위 폴더로 분할됩니다. 지정된 폴더에 하위 폴더가 이미 있어서는 안 됩니다.

모든 옵션은 gcloud CLI 참조를 확인하세요.

다음 명령어를 실행하여 my-project 프로젝트에서 2024년 1월 30일의 resource 메타데이터를 Cloud Storage 버킷 my-bucketmy-file.txt 파일로 내보냅니다.

gcloud asset export \
    --project=my-project \
    --billing-project=my-project \
    --content-type=resource \
    --snapshot-time="2024-01-30" \
    --output-path="gs://my-bucket/my-file.txt"

응답 예시

Export in progress for root asset [projects/my-project].
Use [gcloud asset operations describe projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000] to check the status of the operation.

REST

HTTP 메서드 및 URL:

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH:exportAssets

헤더:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON 요청 본문:

{
  "assetTypes": [
    "ASSET_TYPE_1",
    "ASSET_TYPE_2",
    "..."
  ],
  "contentType": "CONTENT_TYPE",
  "relationshipTypes": [
    "RELATIONSHIP_TYPE_1",
    "RELATIONSHIP_TYPE_2",
    "..."
  ],
  "readTime": "SNAPSHOT_TIME",
  "outputConfig": {
    "gcsDestination": {
      OUTPUT_TYPE
    }
  }
}

다음 값을 제공합니다.

  • SCOPE_PATH: 다음 값 중 하나를 사용합니다.

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

    • projects/PROJECT_ID: 여기서 PROJECT_ID는 내보내려는 애셋 메타데이터가 있는 프로젝트의 ID입니다.
    • projects/PROJECT_NUMBER: 여기서 PROJECT_NUMBER는 내보내려는 애셋 메타데이터가 있는 프로젝트의 번호입니다.

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

      Google Cloud 콘솔

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

      1. Google Cloud 콘솔에서 시작하기 페이지로 이동합니다.

        시작하기로 이동

      2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
      3. 목록 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다. 프로젝트 이름, 프로젝트 번호, 프로젝트 ID가 시작하기 제목 근처에 표시됩니다.

        리소스가 최대 4,000개까지 표시됩니다. 원하는 프로젝트가 표시되지 않으면 리소스 관리 페이지로 이동하여 해당 프로젝트 이름을 사용하여 목록을 필터링합니다.

      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를 찾으려면 다음 단계를 완료하세요.

      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를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID: 여기서 ORGANIZATION_ID는 내보내려는 애셋 메타데이터가 있는 조직의 ID입니다.

      Google Cloud 조직의 ID를 찾는 방법

      Google Cloud 콘솔

      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입니다. 결제 프로젝트 설정 자세히 알아보기

  • ASSET_TYPE_#: 선택사항. 검색 가능한 애셋 유형 배열입니다. RE2 호환 정규 표현식이 지원됩니다. 정규 표현식이 지원되는 애셋 유형과 일치하지 않으면 INVALID_ARGUMENT 오류가 반환됩니다. assetTypes를 지정하지 않으면 모든 애셋 유형이 반환됩니다.
  • CONTENT_TYPE: 선택사항. 검색하려는 메타데이터의 콘텐츠 유형입니다. contentType을 지정하지 않으면 애셋 이름, 애셋이 마지막으로 업데이트된 시간, 애셋이 속한 프로젝트, 폴더, 조직과 같은 기본 정보만 반환됩니다.
  • RELATIONSHIP_TYPE_#: 선택사항. Security Command Center Premium 또는 Enterprise 등급 또는 Gemini Cloud Assist에 대한 액세스 권한이 필요합니다. 검색하려는 애셋 관계 유형의 쉼표로 구분된 목록입니다. 이렇게 하려면 CONTENT_TYPERELATIONSHIP로 설정해야 합니다.
  • SNAPSHOT_TIME: 선택사항. 애셋 스냅샷을 만들려는 시간입니다(RFC 3339 형식). 값은 과거 35일 이내여야 합니다. readTime을 지정하지 않으면 현재 시간의 스냅샷이 생성됩니다.
  • OUTPUT_TYPE: 다음 값 중 하나를 사용합니다.

    • "uri": "gs://BUCKET_NAME/FILE_NAME": 출력을 파일에 쓰는 데 사용합니다. 여기서

      • BUCKET_NAME은 쓰기 작업을 실행할 Cloud Storage 버킷의 이름입니다.
      • FILE_NAME는 Cloud Storage 버킷에 쓸 파일입니다.
    • "uriPrefix": "gs://BUCKET_NAME/FOLDER_NAME": 출력을 폴더에 씁니다. 여기서

      • BUCKET_NAME은 쓰기 작업을 실행할 Cloud Storage 버킷의 이름입니다.
      • FOLDER_NAME는 Cloud Storage 버킷에 쓸 폴더입니다. 출력은 애셋 유형의 이름을 따서 하위 폴더로 분할됩니다. 지정된 폴더에 하위 폴더가 이미 있어서는 안 됩니다.

모든 옵션은 REST 참조를 확인하세요.

명령어 예시

다음 명령어 중 하나를 실행하여 my-project 프로젝트에서 2024년 1월 30일의 resource 메타데이터를 Cloud Storage 버킷 my-bucketmy-file.txt 파일로 내보냅니다.

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 '{
            "contentType": "RESOURCE",
            "readTime": "2024-01-30T00:00:00Z",
            "outputConfig": {
              "gcsDestination": {
                "uri": "gs://my-bucket/my-file"
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-Goog-User-Project" = "BILLING_PROJECT_ID";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "contentType": "RESOURCE",
  "readTime": "2024-01-30T00:00:00Z",
  "outputConfig": {
    "gcsDestination": {
      "uri": "gs://my-bucket/my-file"
    }
  }
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project:exportAssets" | Select-Object -Expand Content

응답 예시

{
  "name": "projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.asset.v1.ExportAssetsRequest",
    "parent": "projects/000000000000",
    "readTime": "2024-01-30T00:00:00Z",
    "contentType": "RESOURCE",
    "outputConfig": {
      "gcsDestination": {
        "uri": "gs://my-bucket/export.txt"
      }
    }
  }
}

C#

Cloud 애셋 인벤토리용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud 애셋 인벤토리 클라이언트 라이브러리를 참조하세요.

Cloud 애셋 인벤토리에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


using Google.Api.Gax.ResourceNames;
using Google.Cloud.Asset.V1;

public class ExportAssetsSample
{
    public ExportAssetsResponse ExportAssets(string bucketName, string projectId)
    {
        string assetDumpFile = $"gs://{bucketName}/my-assets.txt";
        // Create the client
        AssetServiceClient client = AssetServiceClient.Create();
        // Build the request
        ExportAssetsRequest request = new ExportAssetsRequest
        {
            ParentAsResourceName = ProjectName.FromProject(projectId),
            OutputConfig = new OutputConfig
            {
                GcsDestination = new GcsDestination { Uri = assetDumpFile }
            }
        };
        // Start the long-running export operation
        var operation = client.ExportAssets(request);
        // Wait for it to complete (or fail)
        operation = operation.PollUntilCompleted();
        // Return the result
        return operation.Result;
    }
}

Go

Cloud 애셋 인벤토리용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud 애셋 인벤토리 클라이언트 라이브러리를 참조하세요.

Cloud 애셋 인벤토리에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


// Sample asset-quickstart exports assets to given path.
package main

import (
	"context"
	"fmt"
	"log"
	"os"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
)

func main() {
	ctx := context.Background()
	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()
	bucketName := fmt.Sprintf("%s-for-assets", projectID)
	assetDumpFile := fmt.Sprintf("gs://%s/my-assets.txt", bucketName)
	req := &assetpb.ExportAssetsRequest{
		Parent: fmt.Sprintf("projects/%s", projectID),
		OutputConfig: &assetpb.OutputConfig{
			Destination: &assetpb.OutputConfig_GcsDestination{
				GcsDestination: &assetpb.GcsDestination{
					ObjectUri: &assetpb.GcsDestination_Uri{
						Uri: string(assetDumpFile),
					},
				},
			},
		},
	}
	operation, err := client.ExportAssets(ctx, req)
	if err != nil {
		log.Fatal(err)
	}
	response, err := operation.Wait(ctx)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response)
}

자바

Cloud 애셋 인벤토리용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud 애셋 인벤토리 클라이언트 라이브러리를 참조하세요.

Cloud 애셋 인벤토리에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

// Imports the Google Cloud client library

import com.google.cloud.ServiceOptions;
import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.ContentType;
import com.google.cloud.asset.v1.ExportAssetsRequest;
import com.google.cloud.asset.v1.ExportAssetsRequest.Builder;
import com.google.cloud.asset.v1.ExportAssetsResponse;
import com.google.cloud.asset.v1.GcsDestination;
import com.google.cloud.asset.v1.OutputConfig;
import com.google.cloud.asset.v1.ProjectName;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ExportAssetsExample {

  // Use the default project Id.
  private static final String projectId = ServiceOptions.getDefaultProjectId();

  /**
   * Export assets for a project.
   *
   * @param exportPath where the results will be exported to
   * @param contentType determines the schema for the table
   * @param assetTypes a list of asset types to export. if empty, export all.
   */
  public static void exportAssets(String exportPath, ContentType contentType, String[] assetTypes)
      throws IOException,
          IllegalArgumentException,
          InterruptedException,
          ExecutionException,
          TimeoutException {
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      OutputConfig outputConfig =
          OutputConfig.newBuilder()
              .setGcsDestination(GcsDestination.newBuilder().setUri(exportPath).build())
              .build();
      Builder exportAssetsRequestBuilder =
          ExportAssetsRequest.newBuilder()
              .setParent(parent.toString())
              .setContentType(contentType)
              .setOutputConfig(outputConfig);
      if (assetTypes.length > 0) {
        exportAssetsRequestBuilder.addAllAssetTypes(Arrays.asList(assetTypes));
      }
      ExportAssetsRequest request = exportAssetsRequestBuilder.build();
      ExportAssetsResponse response = client.exportAssetsAsync(request).get(5, TimeUnit.MINUTES);
      System.out.println(response);
    }
  }
}

Node.js

Cloud 애셋 인벤토리용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud 애셋 인벤토리 클라이언트 라이브러리를 참조하세요.

Cloud 애셋 인벤토리에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const dumpFilePath = 'gs://my-bucket/my-assets.txt';
// const contentType = 'RESOURCE';

const {AssetServiceClient} = require('@google-cloud/asset');
const client = new AssetServiceClient();

async function exportAssets() {
  const projectId = await client.getProjectId();
  const projectResource = `projects/${projectId}`;

  // TODO(developer): choose the dump file path
  // const dumpFilePath = 'Dump file path, e.g.: gs://<my_bucket>/<my_asset_file>'
  const request = {
    parent: projectResource,
    contentType: contentType,
    outputConfig: {
      gcsDestination: {
        uri: dumpFilePath,
      },
    },
  };

  // Handle the operation using the promise pattern.
  const [operation] = await client.exportAssets(request);

  // Operation#promise starts polling for the completion of the operation.
  const [result] = await operation.promise();

  // Do things with with the response.
  console.log(result);
}
exportAssets().catch(err => {
  throw err;
});

PHP

Cloud 애셋 인벤토리용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud 애셋 인벤토리 클라이언트 라이브러리를 참조하세요.

Cloud 애셋 인벤토리에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

use Google\Cloud\Asset\V1\Client\AssetServiceClient;
use Google\Cloud\Asset\V1\ExportAssetsRequest;
use Google\Cloud\Asset\V1\GcsDestination;
use Google\Cloud\Asset\V1\OutputConfig;

/**
 * Export assets for given project to specified dump file path.
 *
 * @param string $projectId the project Id for export assets.
 * @param string $dumpFilePath the file path where the assets will be dumped to.
 *        e.g.: gs://[bucket-name]/[asset-file-name].
 */
function export_assets(string $projectId, string $dumpFilePath)
{
    $client = new AssetServiceClient();

    $gcsDestination = new GcsDestination(['uri' => $dumpFilePath]);
    $outputConfig = new OutputConfig(['gcs_destination' => $gcsDestination]);
    $request = (new ExportAssetsRequest())
        ->setParent("projects/$projectId")
        ->setOutputConfig($outputConfig);

    $resp = $client->exportAssets($request);

    $resp->pollUntilComplete();

    if ($resp->operationSucceeded()) {
        print('The result is dumped to $dumpFilePath successfully.' . PHP_EOL);
    } else {
        $error = $resp->getError();
        printf('There was an error: "%s".' . PHP_EOL, $error?->getMessage());
        // handleError($error)
    }
}

Python

Cloud 애셋 인벤토리용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud 애셋 인벤토리 클라이언트 라이브러리를 참조하세요.

Cloud 애셋 인벤토리에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

from google.cloud import asset_v1

# TODO project_id = 'Your Google Cloud Project ID'
# TODO dump_file_path = 'Your asset dump file path'

client = asset_v1.AssetServiceClient()
parent = f"projects/{project_id}"
output_config = asset_v1.OutputConfig()
output_config.gcs_destination.uri = dump_file_path
request_options = {"parent": parent, "output_config": output_config}

if content_type is not None:
    request_options["content_type"] = content_type

response = client.export_assets(request=request_options)
print(response.result())

Ruby

Cloud 애셋 인벤토리용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud 애셋 인벤토리 클라이언트 라이브러리를 참조하세요.

Cloud 애셋 인벤토리에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

require "google/cloud/asset"

asset_service = Google::Cloud::Asset.asset_service
# project_id = 'YOUR_PROJECT_ID'
formatted_parent = asset_service.project_path project: project_id
# Assets dump file path, e.g.: gs://[YOUR_BUCKET]/[YOUR_ASSETS_FILE]
# dump_file_path = 'YOUR_ASSET_DUMP_FILE_PATH'
output_config = {
  gcs_destination: {
    uri: dump_file_path
  }
}

operation = asset_service.export_assets(
  parent: formatted_parent, output_config: output_config
) do |op|
  # Handle the error.
  raise op.results.message if op.error?
end

operation.wait_until_done!
response = operation.response
puts "Exported assets to: #{response.output_config.gcs_destination.uri}"
# Do things with the result

내보내기 상태 확인

내보내기가 완료되는 데 시간이 걸립니다. 내보내기가 완료되었는지 확인하려면 해당 작업 ID를 사용하여 작업을 쿼리하면 됩니다.

내보내기가 완료되더라도 다른 사용자가 내보내기 요청을 다른 작업으로 같은 대상에 보낼 수 있습니다. 이전 요청이 완료된 후 또는 15분 이상 경과한 후에 새로운 내보내기 요청을 같은 대상에 보낼 수 있습니다. Cloud 애셋 인벤토리에서는 이러한 조건을 벗어난 내보내기 요청을 거부합니다.

gcloud

내보내기 상태를 보려면 다음 안내를 완료합니다.

  1. 내보내기 요청에 대한 응답에서 작업 ID가 포함된 OPERATION_PATH를 가져옵니다. OPERATION_PATH는 내보내기에 대한 응답에 표시되며 형식은 다음과 같습니다.

    projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
    
  2. 내보내기 상태를 확인하려면 OPERATION_PATH와 함께 다음 명령어를 실행합니다.

    gcloud asset operations describe OPERATION_PATH
    

REST

내보내기 상태를 보려면 다음 안내를 완료합니다.

  1. 내보내기 요청에 대한 응답에서 작업 ID가 포함된 OPERATION_PATH를 가져옵니다. OPERATION_PATH는 내보내기에 대한 응답의 name 필드 값으로 표시되며 형식은 다음과 같습니다.

    projects/PROJECT_NUMBER/operations/ExportAssets/CONTENT_TYPE/OPERATION_ID
    
  2. 내보내기 상태를 확인하려면 다음 요청을 수행합니다.

    REST

    HTTP 메서드 및 URL:

    GET https://cloudasset.googleapis.com/v1/OPERATION_PATH
    

    명령어 예시

    cURL(Linux, macOS, Cloud Shell)

    curl -X GET \
         -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         https://cloudasset.googleapis.com/v1/OPERATION_PATH

    PowerShell(Windows)

    $cred = gcloud auth print-access-token
    
    $headers = @{ 
      "Authorization" = "Bearer $cred"
    }
    
    
    Invoke-WebRequest `
      -Method GET `
      -Headers $headers `
      -Uri "https://cloudasset.googleapis.com/v1/OPERATION_PATH" | Select-Object -Expand Content

    응답 예시

    {
      "name": "projects/000000000000/operations/ExportAssets/RESOURCE/00000000000000000000000000000000",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.asset.v1.ExportAssetsRequest",
        "parent": "projects/000000000000",
        "readTime": "2024-01-30T00:00:00Z",
        "contentType": "RESOURCE",
        "outputConfig": {
          "gcsDestination": {
            "uri": "gs://my-bucket/export.txt"
          }
        }
      }
    }

애셋 스냅샷 보기

애셋 스냅샷을 보려면:

  1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

    버킷으로 이동

  2. 애셋 스냅샷을 내보낸 버킷의 이름을 클릭한 후 내보내기 파일 이름을 클릭합니다.

  3. 다운로드를 클릭하여 애셋 스냅샷을 다운로드하고 원하는 텍스트 편집기에서 엽니다.