Pub/Sub로 애셋 변경사항 모니터링

피드를 만들고 구독하여 리소스 및 정책 변경사항에 대한 실시간 알림을 받을 수 있습니다.

피드를 만들 때 조직, 폴더, 프로젝트 내에서 지원되는 리소스 유형, IAM 정책, 액세스 정책, 조직 정책의 변경사항을 모니터링하도록 지정할 수 있습니다. 또한 애셋에 대한 특정 유형의 변경사항 알림만 받도록 피드에 조건을 추가할 수 있습니다.

피드를 만든 후 지정된 애셋이 변경될 때마다 Pub/Sub를 통해 알림을 받습니다. Pub/Sub 주제에 게시되는 첫 번째 메시지는 문자열 형식의 환영 메시지이며 다음 모든 메시지는 TemporalAsset 형식입니다.

다음은 RESOURCE 콘텐츠 유형의 샘플 Pub/Sub 메시지입니다.

{
  "asset":{
    "ancestors":[
      "projects/000000000000",
      "folders/000000000000",
      "organizations/000000000000"
    ],
    "assetType":"storage.googleapis.com/Bucket",
    "name":"//storage.googleapis.com/my-bucket",
    "resource":{
      "data":{
        LATEST_ASSET_METADATA
      },
      "discoveryDocumentUri":"https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
      "discoveryName":"Bucket",
      "location":"us",
      "parent":"//cloudresourcemanager.googleapis.com/projects/000000000000",
      "version":"v1"
    },
    "updateTime":"2024-01-30T00:00:00.000000Z"
  },
  "priorAsset":{
    "ancestors":[
      "projects/000000000000",
      "folders/000000000000",
      "organizations/000000000000"
    ],
    "assetType":"storage.googleapis.com/Bucket",
    "name":"//storage.googleapis.com/my-bucket",
    "resource":{
      "data":{
        PREVIOUS_ASSET_METADATA
      },
      "discoveryDocumentUri":"https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
      "discoveryName":"Bucket",
      "location":"us",
      "parent":"//cloudresourcemanager.googleapis.com/projects/000000000000",
      "version":"v1"
    },
    "updateTime":"2024-01-29T00:00:00.000000Z"
  },
  "priorAssetState":"PRESENT",
  "window":{
    "startTime":"2024-01-30T00:00:00.000000Z"
  }
}

Pub/Sub 또는 구독 설정 방법에 대한 자세한 내용은 Pub/Sub 문서를 참조하세요.

시작하기 전에

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

    Cloud Asset Inventory API 사용 설정

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

  3. 아직 Pub/Sub 주제가 없는 경우 Pub/Sub 주제를 만듭니다.

제한사항

  • 피드 만들기, 업데이트, 삭제를 수행하려면 최대 10분까지 걸릴 수 있습니다.

  • 피드가 생성된 프로젝트는 피드보다 오래 지속되어야 합니다. 대상 Pub/Sub 주제에 게시하는 데 사용되는 서비스 계정이 해당 프로젝트에 있기 때문입니다. 피드가 더 이상 작동하지 않고 프로젝트가 영구적으로 삭제되는 즉시 삭제됩니다.

  • 상위 요소에 피드를 최대 200개까지 만들 수 있습니다. 이 한도는 해당 상위 요소 바로 뒤에 있는 피드에만 적용되며 하위 요소의 피드를 계산하지 않습니다. 예를 들어 조직에 프로젝트가 10개 있는 경우 각 프로젝트에는 최대 200개의 피드를 포함할 수 있으며, 조직 역시 최대 200개의 피드를 가질 수 있습니다.

피드 만들기

gcloud

gcloud asset feeds create FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --pubsub-topic=projects/TOPIC_PROJECT_ID/topics/TOPIC_ID \
    --asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --content-type=CONTENT_TYPE \
    --relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --condition-title="CONDITION_TITLE" \
    --condition-description="CONDITION_DESCRIPTION" \
    --condition-expression="CONDITION_EXPRESSION"

다음 값을 제공합니다.

  • 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))"
  • FEED_ID: 고유한 애셋 피드 식별자입니다.
  • BILLING_PROJECT_ID: 선택사항. Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

  • TOPIC_PROJECT_ID: Pub/Sub 주제가 있는 프로젝트 ID입니다.
  • TOPIC_ID: 알림을 게시할 Pub/Sub 주제의 ID입니다.
  • 다음 애셋 정의 중 하나 이상:
    • ASSET_NAME_#: 선택사항. 쉼표로 구분된 애셋 전체 이름 목록입니다.
    • ASSET_TYPE_#: 선택사항. 검색 가능한 애셋 유형의 쉼표로 구분된 목록입니다. RE2 호환 정규 표현식이 지원됩니다. 정규 표현식이 지원되는 애셋 유형과 일치하지 않으면 INVALID_ARGUMENT 오류가 반환됩니다. --asset-types를 지정하지 않으면 모든 애셋 유형이 반환됩니다.
  • CONTENT_TYPE: 선택사항. 검색하려는 메타데이터의 콘텐츠 유형입니다. --content-type이 지정되지 않으면 애셋 이름, 애셋이 마지막으로 업데이트된 시간, 애셋이 속한 프로젝트, 폴더, 조직과 같은 기본 정보만 반환됩니다.
  • RELATIONSHIP_TYPE_#: 선택사항. Security Command Center 프리미엄 및 엔터프라이즈 등급 구독자만 사용할 수 있습니다. 검색하려는 애셋 관계 유형의 쉼표로 구분된 목록입니다. 이렇게 하려면 CONTENT_TYPERELATIONSHIP으로 설정해야 합니다.
  • 선택적 피드 조건을 추가하는 경우 명령어에 다음 세부정보를 포함합니다.
    • CONDITION_TITLE: 피드 조건에 할당할 제목입니다.
    • CONDITION_DESCRIPTION: 피드 조건에 할당할 설명입니다.
    • CONDITION_EXPRESSION: 피드에 적용할 조건 표현식입니다.

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

다음 명령어를 실행하여 my-project 프로젝트에서 다음 리소스가 변경될 때 알려주는 피드를 my-topic Pub/Sub 주제에 만듭니다.

  • my-bucket Cloud Storage 버킷
  • 모든 BigQuery 테이블
gcloud asset feeds create my-feed \
    --project=my-project \
    --pubsub-topic=projects/my-project/topics/my-topic \
    --asset-names=//storage.googleapis.com/my-bucket \
    --asset-types=bigquery.googleapis.com/Table \
    --content-type=resource

응답 예시

assetNames:
- //storage.googleapis.com/my-bucket
assetTypes:
- bigquery.googleapis.com/Table
condition: {}
contentType: RESOURCE
feedOutputConfig:
  pubsubDestination:
    topic: projects/my-project/topics/my-topic
name: projects/000000000000/feeds/my-feed

REST

HTTP 메서드 및 URL:

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

헤더:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON 요청 본문:

{
  "feedId": "FEED_ID",
  "feed": {
    "assetNames": [
      "ASSET_NAME_1",
      "ASSET_NAME_2",
      "..."
    ],
    "assetTypes": [
      "ASSET_TYPE_1",
      "ASSET_TYPE_2",
      "..."
    ],
    "contentType": "CONTENT_TYPE",
    "relationshipTypes": [
      "RELATIONSHIP_TYPE_1",
      "RELATIONSHIP_TYPE_2",
      "..."
    ],
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/TOPIC_PROJECT_ID/topics/TOPIC_ID"
      }
    },
    "condition": {
      "title": "CONDITION_TITLE",
      "description": "CONDITION_DESCRIPTION",
      "expression": "CONDITION_EXPRESSION"
    }
  }
}

다음 값을 제공합니다.

  • 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: Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

  • FEED_ID: 고유한 애셋 피드 식별자입니다.
  • 다음 애셋 정의 중 하나 이상:
    • ASSET_NAME_#: 선택사항. 애셋 전체 이름 배열입니다.
    • ASSET_TYPE_#: 선택사항. 검색 가능한 애셋 유형의 배열입니다. RE2 호환 정규 표현식이 지원됩니다. 정규 표현식이 지원되는 애셋 유형과 일치하지 않으면 INVALID_ARGUMENT 오류가 반환됩니다. assetTypes를 지정하지 않으면 모든 애셋 유형이 반환됩니다.
  • CONTENT_TYPE: 선택사항. 검색하려는 메타데이터의 콘텐츠 유형입니다. contentType이 지정되지 않으면 애셋 이름, 애셋이 마지막으로 업데이트된 시간, 애셋이 속한 프로젝트, 폴더, 조직과 같은 기본 정보만 반환됩니다.
  • RELATIONSHIP_TYPE_#: 선택사항. Security Command Center 프리미엄 및 엔터프라이즈 등급 구독자만 사용할 수 있습니다. 검색하려는 애셋 관계 유형의 쉼표로 구분된 목록입니다. 이렇게 하려면 CONTENT_TYPERELATIONSHIP으로 설정해야 합니다.
  • TOPIC_PROJECT_ID: Pub/Sub 주제가 있는 프로젝트 ID입니다.
  • TOPIC_ID: 알림을 게시할 Pub/Sub 주제의 ID입니다.
  • 선택적 피드 조건을 추가하는 경우 명령어에 다음 세부정보를 포함합니다.
    • CONDITION_TITLE: 피드 조건에 할당할 제목입니다.
    • CONDITION_DESCRIPTION: 피드 조건에 할당할 설명입니다.
    • CONDITION_EXPRESSION: 피드에 적용할 조건 표현식입니다.

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

명령어 예시

다음 명령어 중 하나를 실행하여 my-project 프로젝트에서 다음 리소스가 변경될 때 알려주는 피드를 my-topic Pub/Sub 주제에 만듭니다.

  • my-bucket Cloud Storage 버킷
  • 모든 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 '{
            "feedId": "my-feed",
            "feed": {
              "assetNames": [
                "//storage.googleapis.com/my-bucket"
              ],
              "assetTypes": [
                "bigquery.googleapis.com/Table"
              ],
              "contentType": "RESOURCE",
              "feedOutputConfig": {
                "pubsubDestination": {
                  "topic": "projects/my-project/topics/my-topic"
                }
              }
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds

PowerShell(Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "feedId": "my-feed",
  "feed": {
    "assetNames": [
      "//storage.googleapis.com/my-bucket"
    ],
    "assetTypes": [
      "bigquery.googleapis.com/Table"
    ],
    "contentType": "RESOURCE",
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/my-project/topics/my-topic"
      }
    }
  }
}
"@

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

응답 예시

{
  "name": "projects/000000000000/feeds/my-feed",
  "assetNames": [
    "//storage.googleapis.com/my-bucket"
  ],
  "assetTypes": [
    "bigquery.googleapis.com/Table"
  ],
  "contentType": "RESOURCE",
  "feedOutputConfig": {
    "pubsubDestination": {
      "topic": "projects/my-project/topics/my-topic"
    }
  }
}

Go

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

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


// Sample create-feed create feed.
package main

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

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

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	feedParent := fmt.Sprintf("projects/%s", projectID)
	assetNames := []string{"YOUR_ASSET_NAME"}
	topic := fmt.Sprintf("projects/%s/topics/%s", projectID, "YOUR_TOPIC_NAME")

	req := &assetpb.CreateFeedRequest{
		Parent: feedParent,
		FeedId: *feedID,
		Feed: &assetpb.Feed{
			AssetNames: assetNames,
			FeedOutputConfig: &assetpb.FeedOutputConfig{
				Destination: &assetpb.FeedOutputConfig_PubsubDestination{
					PubsubDestination: &assetpb.PubsubDestination{
						Topic: topic,
					},
				},
			},
		}}
	response, err := client.CreateFeed(ctx, req)
	if err != nil {
		log.Fatalf("client.CreateFeed: %v", err)
	}
	fmt.Print(response)
}

자바

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.ContentType;
import com.google.cloud.asset.v1.CreateFeedRequest;
import com.google.cloud.asset.v1.Feed;
import com.google.cloud.asset.v1.FeedOutputConfig;
import com.google.cloud.asset.v1.ProjectName;
import com.google.cloud.asset.v1.PubsubDestination;
import java.io.IOException;
import java.util.Arrays;

public class CreateFeedExample {
  // Create a feed
  public static void createFeed(
      String[] assetNames, String feedId, String topic, String projectId, ContentType contentType)
      throws IOException, IllegalArgumentException {
    // String[] assetNames = {"MY_ASSET_NAME"}
    // ContentType contentType = contentType
    // String FeedId = "MY_FEED_ID"
    // String topic = "projects/[PROJECT_ID]/topics/[TOPIC_NAME]"
    // String projectID = "MY_PROJECT_ID"
    Feed feed =
        Feed.newBuilder()
            .addAllAssetNames(Arrays.asList(assetNames))
            .setContentType(contentType)
            .setFeedOutputConfig(
                FeedOutputConfig.newBuilder()
                    .setPubsubDestination(PubsubDestination.newBuilder().setTopic(topic).build())
                    .build())
            .build();
    CreateFeedRequest request =
        CreateFeedRequest.newBuilder()
            .setParent(String.format(ProjectName.of(projectId).toString()))
            .setFeedId(feedId)
            .setFeed(feed)
            .build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      Feed response = client.createFeed(request);
      System.out.println("Feed created successfully: " + response.getName());
    } catch (IOException | IllegalArgumentException e) {
      System.out.println("Error during CreateFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const feedId = 'my feed';
// const assetNames = '//storage.googleapis.com/<BUCKET_NAME1>,//storage.googleapis.com/<BUCKET_NAME2>';
// const topicName = 'projects/<PROJECT_ID>/topics/<TOPIC_ID>'
// const contentType = 'RESOURCE';

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

const client = new AssetServiceClient();

async function createFeed() {
  const projectId = await client.getProjectId();
  // TODO(developer): Choose asset names, such as //storage.googleapis.com/[YOUR_BUCKET_NAME].
  // const assetNames = ['ASSET_NAME1', 'ASSET_NAME2', ...];

  const request = {
    parent: `projects/${projectId}`,
    feedId: feedId,
    feed: {
      assetNames: assetNames.split(','),
      contentType: contentType,
      feedOutputConfig: {
        pubsubDestination: {
          topic: topicName,
        },
      },
    },
  };

  // Handle the operation using the promise pattern.
  const result = await client.createFeed(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));

Python

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

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

from google.cloud import asset_v1

# TODO project_id = 'Your Google Cloud Project ID'
# TODO feed_id = 'Feed ID you want to create'
# TODO asset_names = 'List of asset names the feed listen to'
# TODO topic = "Topic name of the feed"
# TODO content_type ="Content type of the feed"

client = asset_v1.AssetServiceClient()
parent = f"projects/{project_id}"
feed = asset_v1.Feed()
feed.asset_names.extend(asset_names)
feed.feed_output_config.pubsub_destination.topic = topic
feed.content_type = content_type
response = client.create_feed(
    request={"parent": parent, "feed_id": feed_id, "feed": feed}
)
print(f"feed: {response}")

Ruby

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

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

require "google/cloud/asset"

# project_id = 'YOUR_PROJECT_ID'
# feed_id = 'NAME_OF_FEED'
# pubsub_topic = 'YOUR_PUBSUB_TOPIC'
# asset names, e.g.: //storage.googleapis.com/[YOUR_BUCKET_NAME]
# asset_names = [ASSET_NAMES, COMMMA_DELIMTTED]
asset_service = Google::Cloud::Asset.asset_service

formatted_parent = asset_service.project_path project: project_id

feed = {
  asset_names:        asset_names,
  feed_output_config: {
    pubsub_destination: {
      topic: pubsub_topic
    }
  }
}
response = asset_service.create_feed(
  parent:  formatted_parent,
  feed_id: feed_id,
  feed:    feed
)
puts "Created feed: #{response.name}"

피드 가져오기

gcloud

gcloud asset feeds describe FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID

다음 값을 제공합니다.

  • 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: Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

  • FEED_ID: 고유한 애셋 피드 식별자입니다.

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

응답 예시

assetNames:
- //storage.googleapis.com/my-bucket
assetTypes:
- bigquery.googleapis.com/Table
condition: {}
contentType: RESOURCE
feedOutputConfig:
  pubsubDestination:
    topic: projects/my-project/topics/my-topic
name: projects/000000000000/feeds/my-feed

REST

HTTP 메서드 및 URL:

GET https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID

헤더:

X-Goog-User-Project: BILLING_PROJECT_ID

다음 값을 제공합니다.

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

  • FEED_ID: 고유한 애셋 피드 식별자입니다.

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

명령어 예시

다음 명령어 중 하나를 실행하여 특정 피드를 가져옵니다.

cURL(Linux, macOS, Cloud Shell)

curl -X GET \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed

PowerShell(Windows)

$cred = gcloud auth print-access-token

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


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed" | Select-Object -Expand Content

응답 예시

{
  "name": "projects/000000000000/feeds/my-feed",
  "assetNames": [
    "//storage.googleapis.com/my-bucket"
  ],
  "assetTypes": [
    "bigquery.googleapis.com/Table"
  ],
  "contentType": "RESOURCE",
  "feedOutputConfig": {
    "pubsubDestination": {
      "topic": "projects/my-project/topics/my-topic"
    }
  }
}

Go

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

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


// Sample get-feed get feed.
package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"strconv"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
)

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	feedName := fmt.Sprintf("projects/%s/feeds/%s", projectNumber, *feedID)
	req := &assetpb.GetFeedRequest{
		Name: feedName}
	response, err := client.GetFeed(ctx, req)
	if err != nil {
		log.Fatalf("client.GetFeed: %v", err)
	}
	fmt.Print(response)
}

자바

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.Feed;

public class GetFeedExample {

  // Get a feed with full feed name
  public static void getFeed(String feedName) throws Exception {
    // String feedName = "MY_FEED_NAME"

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      Feed feed = client.getFeed(feedName);
      System.out.println("Get a feed: " + feedName);
    } catch (Exception e) {
      System.out.println("Error during GetFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

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

const client = new AssetServiceClient();

async function getFeed() {
  const request = {
    name: feedName,
  };

  // Handle the operation using the promise pattern.
  const result = await client.getFeed(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));
}
getFeed();

Python

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

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

from google.cloud import asset_v1

# TODO feed_name = 'Feed Name you want to get'

client = asset_v1.AssetServiceClient()
response = client.get_feed(request={"name": feed_name})
print(f"gotten_feed: {response}")

피드 나열

프로젝트, 폴더, 조직의 모든 피드를 나열하려면 다음 요청 중 하나를 수행합니다.

gcloud

gcloud asset feeds list \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID

다음 값을 제공합니다.

  • 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: Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

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

응답 예시

- assetNames:
  - //storage.googleapis.com/my-bucket
  assetTypes:
  - bigquery.googleapis.com/Table
  condition: {}
  contentType: RESOURCE
  feedOutputConfig:
    pubsubDestination:
      topic: projects/my-project/topics/my-topic
  name: projects/000000000000/feeds/my-feed

REST

HTTP 메서드 및 URL:

GET https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds

헤더:

X-Goog-User-Project: BILLING_PROJECT_ID

다음 값을 제공합니다.

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

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

명령어 예시

다음 명령어 중 하나를 실행하여 my-project 프로젝트의 모든 피드를 나열합니다.

cURL(Linux, macOS, Cloud Shell)

curl -X GET \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds

PowerShell(Windows)

$cred = gcloud auth print-access-token

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


Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://cloudasset.googleapis.com/v1/projects/my-project/feeds" | Select-Object -Expand Content

응답 예시

{
  "feeds": [
    {
      "name": "projects/000000000000/feeds/my-feed",
      "assetNames": [
        "//storage.googleapis.com/my-bucket"
      ],
      "assetTypes": [
        "bigquery.googleapis.com/Table"
      ],
      "contentType": "RESOURCE",
      "feedOutputConfig": {
        "pubsubDestination": {
          "topic": "projects/my-project/topics/my-topic"
        }
      }
    }
  ]
}

Go

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

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


// Sample list-feeds list feeds.
package main

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

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
)

func main() {
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	parent := fmt.Sprintf("projects/%s", projectNumber)
	req := &assetpb.ListFeedsRequest{
		Parent: parent}
	response, err := client.ListFeeds(ctx, req)
	if err != nil {
		log.Fatalf("client.ListFeeds: %v", err)
	}
	fmt.Print(response)
}

자바

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.ListFeedsResponse;
import com.google.cloud.asset.v1.ProjectName;

public class ListFeedsExample {
  // List feeds in a project.
  public static void listFeeds(String projectId) throws Exception {
    // String projectId = "MY_PROJECT_ID"
    // String topic = "projects/[PROJECT_ID]/topics/[TOPIC_NAME]"

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      ListFeedsResponse response = client.listFeeds(ProjectName.of(projectId).toString());
      System.out.println("Listed feeds under: " + projectId);
    } catch (Exception e) {
      System.out.println("Error during ListFeeds: \n" + e.toString());
    }
  }
}

Node.js

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

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

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

const client = new AssetServiceClient();

async function listFeeds() {
  const projectId = await client.getProjectId();

  const request = {
    parent: `projects/${projectId}`,
  };

  // Handle the operation using the promise pattern.
  const result = await client.listFeeds(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));

Python

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

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

from google.cloud import asset_v1

# TODO parent_resource = 'Parent resource you want to list all feeds'

client = asset_v1.AssetServiceClient()
response = client.list_feeds(request={"parent": parent_resource})
print(f"feeds: {response.feeds}")

피드 업데이트

다음과 같은 방법으로 기존 피드의 속성을 업데이트할 수 있습니다.

  • 특정 확장 애셋 이름을 추가 및 삭제하거나 피드에서 모두 삭제합니다.

  • 특정 확장 애셋 유형을 추가 및 삭제하거나 피드에서 모두 삭제합니다.

  • 조건을 덮어쓰거나 피드에서 삭제합니다.

gcloud

gcloud asset feeds update FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID \
    --pubsub-topic=projects/TOPIC_PROJECT_ID/topics/TOPIC_ID \
    --clear-asset-names \
    --add-asset-names=ASSET_NAME_1,ASSET_NAME_2,... \
    --remove-asset-names=ASSET_NAME_3,ASSET_NAME_4,... \
    --clear-asset-types \
    --add-asset-types=ASSET_TYPE_1,ASSET_TYPE_2,... \
    --remove-asset-types=ASSET_TYPE_3,ASSET_TYPE_4,... \
    --clear-content-type \
    --content-type=CONTENT_TYPE \
    --clear-relationship-types \
    --remove-relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --add-relationship-types=RELATIONSHIP_TYPE_1,RELATIONSHIP_TYPE_2,... \
    --clear-condition-title \
    --condition-title="CONDITION_TITLE" \
    --clear-condition-description \
    --condition-description="CONDITION_DESCRIPTION" \
    --clear-condition-expression
    --condition-expression="CONDITION_EXPRESSION"

다음 값을 제공합니다.

  • 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))"
  • FEED_ID: 고유한 애셋 피드 식별자입니다.
  • BILLING_PROJECT_ID: 선택사항. Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

  • TOPIC_PROJECT_ID: Pub/Sub 주제가 있는 프로젝트 ID입니다.
  • TOPIC_ID: 알림을 게시할 Pub/Sub 주제의 ID입니다.
  • 다음 애셋 정의 중 하나 이상:
    • ASSET_NAME_#: 선택사항. 쉼표로 구분된 애셋 전체 이름 목록입니다.
    • ASSET_TYPE_#: 선택사항. 검색 가능한 애셋 유형의 쉼표로 구분된 목록입니다. RE2 호환 정규 표현식이 지원됩니다. 정규 표현식이 지원되는 애셋 유형과 일치하지 않으면 INVALID_ARGUMENT 오류가 반환됩니다. --asset-types를 지정하지 않으면 모든 애셋 유형이 반환됩니다.
  • CONTENT_TYPE: 선택사항. 검색하려는 메타데이터의 콘텐츠 유형입니다. --content-type이 지정되지 않으면 애셋 이름, 애셋이 마지막으로 업데이트된 시간, 애셋이 속한 프로젝트, 폴더, 조직과 같은 기본 정보만 반환됩니다.
  • RELATIONSHIP_TYPE_#: 선택사항. Security Command Center 프리미엄 및 엔터프라이즈 등급 구독자만 사용할 수 있습니다. 검색하려는 애셋 관계 유형의 쉼표로 구분된 목록입니다. 이렇게 하려면 CONTENT_TYPERELATIONSHIP으로 설정해야 합니다.
  • 선택적 피드 조건을 추가하는 경우 명령어에 다음 세부정보를 포함합니다.
    • CONDITION_TITLE: 피드 조건에 할당할 제목입니다.
    • CONDITION_DESCRIPTION: 피드 조건에 할당할 설명입니다.
    • CONDITION_EXPRESSION: 피드에 적용할 조건 표현식입니다.

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

다음 명령어를 실행하여 my-project 프로젝트의 my-topic Pub/Sub 주제를 업데이트합니다. 이 요청은 모니터링에서 모든 애셋 이름을 삭제하고 애셋 유형 gkemulticloud.googleapis.com/AttachedCluster를 추가합니다.

gcloud asset feeds update my-feed \
    --project=my-project \
    --pubsub-topic=projects/my-project/topics/my-topic \
    --clear-asset-names \
    --add-asset-types=gkemulticloud.googleapis.com/AttachedCluster

응답 예시

assetTypes:
- bigquery.googleapis.com/Table
- gkemulticloud.googleapis.com/AttachedCluster
condition: {}
contentType: RESOURCE
feedOutputConfig:
  pubsubDestination:
    topic: projects/my-project/topics/my-topic
name: projects/000000000000/feeds/my-feed

피드 속성을 업데이트하려면 update_mask의 속성 경로와 해당 속성 값을 지정해야 합니다.

REST

HTTP 메서드 및 URL:

PATCH https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID

헤더:

X-Goog-User-Project: BILLING_PROJECT_ID

JSON 요청 본문:

{
  "feed": {
    "assetNames": [
      "ASSET_NAME_1",
      "ASSET_NAME_2",
      "..."
    ],
    "assetTypes": [
      "ASSET_TYPE_1",
      "ASSET_TYPE_2",
      "..."
    ],
    "contentType": "CONTENT_TYPE",
    "relationshipTypes": [
      "RELATIONSHIP_TYPE_1",
      "RELATIONSHIP_TYPE_2",
      "..."
    ],
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/TOPIC_PROJECT_ID/topics/TOPIC_ID"
      }
    }
  },
  "condition": {
    "title": "CONDITION_TITLE",
    "description": "CONDITION_DESCRIPTION",
    "expression": "CONDITION_EXPRESSION"
  },
  "update_mask": {
    "paths": [
      "feed_output_config.pubsub_destination.topic",
      ATTRIBUTE_PATH_1,
      ATTRIBUTE_PATH_2,
      ...
    ]
  }
}

다음 값을 제공합니다.

  • 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: Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

  • FEED_ID: 고유한 애셋 피드 식별자입니다.
  • 다음 애셋 정의 중 하나 이상:
    • ASSET_NAME_#: 선택사항. 애셋 전체 이름 배열입니다.
    • ASSET_TYPE_#: 선택사항. 검색 가능한 애셋 유형의 배열입니다. RE2 호환 정규 표현식이 지원됩니다. 정규 표현식이 지원되는 애셋 유형과 일치하지 않으면 INVALID_ARGUMENT 오류가 반환됩니다. assetTypes를 지정하지 않으면 모든 애셋 유형이 반환됩니다.
  • CONTENT_TYPE: 선택사항. 검색하려는 메타데이터의 콘텐츠 유형입니다. contentType이 지정되지 않으면 애셋 이름, 애셋이 마지막으로 업데이트된 시간, 애셋이 속한 프로젝트, 폴더, 조직과 같은 기본 정보만 반환됩니다.
  • RELATIONSHIP_TYPE_#: 선택사항. Security Command Center 프리미엄 및 엔터프라이즈 등급 구독자만 사용할 수 있습니다. 검색하려는 애셋 관계 유형의 쉼표로 구분된 목록입니다. 이렇게 하려면 CONTENT_TYPERELATIONSHIP으로 설정해야 합니다.
  • TOPIC_PROJECT_ID: Pub/Sub 주제가 있는 프로젝트 ID입니다.
  • TOPIC_ID: 알림을 게시할 Pub/Sub 주제의 ID입니다.
  • 선택적 피드 조건을 추가하는 경우 명령어에 다음 세부정보를 포함합니다.
    • CONDITION_TITLE: 피드 조건에 할당할 제목입니다.
    • CONDITION_DESCRIPTION: 피드 조건에 할당할 설명입니다.
    • CONDITION_EXPRESSION: 피드에 적용할 조건 표현식입니다.

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

명령어 예시

다음 명령어 중 하나를 실행하여 my-project 프로젝트의 my-topic Pub/Sub 주제를 업데이트합니다. 이 요청은 모니터링에서 모든 애셋 이름을 삭제하고 애셋 유형 gkemulticloud.googleapis.com/AttachedCluster를 추가합니다.

cURL(Linux, macOS, Cloud Shell)

curl -X PATCH \
     -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 '{
            "feed": {
              "assetNames": [],
              "assetTypes": [
                "gkemulticloud.googleapis.com/AttachedCluster"
              ],
              "feedOutputConfig": {
                "pubsubDestination": {
                  "topic": "projects/my-project/topics/my-topic"
                }
              }
            },
            "update_mask": {
              "paths": ["feed_output_config.pubsub_destination.topic", "asset_names", "asset_types"]
            }
          }' \
     https://cloudasset.googleapis.com/v1/projects/my-project/feeds/my-feed

PowerShell(Windows)

$cred = gcloud auth print-access-token

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


$body = @"
{
  "feed": {
    "assetNames": [],
    "assetTypes": [
      "gkemulticloud.googleapis.com/AttachedCluster"
    ],
    "feedOutputConfig": {
      "pubsubDestination": {
        "topic": "projects/my-project/topics/my-topic"
      }
    }
  },
  "update_mask": {
    "paths": ["feed_output_config.pubsub_destination.topic", "asset_names", "asset_types"]
  }
}
"@

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

응답 예시

{
  "feeds": [
    {
      "name": "projects/000000000000/feeds/my-feed",
      "assetTypes": [
        "bigquery.googleapis.com/Table",
        "gkemulticloud.googleapis.com/AttachedCluster"
      ],
      "contentType": "RESOURCE",
      "feedOutputConfig": {
        "pubsubDestination": {
          "topic": "projects/my-project/topics/my-topic"
        }
      }
    }
  ]
}

Go

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

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


// Sample update-feed update feed.
package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"strconv"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
	field_mask "google.golang.org/genproto/protobuf/field_mask"
)

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	feedName := fmt.Sprintf("projects/%s/feeds/%s", projectNumber, *feedID)
	topic := fmt.Sprintf("projects/%s/topics/%s", projectID, "TOPIC_TO_UPDATE")

	req := &assetpb.UpdateFeedRequest{
		Feed: &assetpb.Feed{
			Name: feedName,
			FeedOutputConfig: &assetpb.FeedOutputConfig{
				Destination: &assetpb.FeedOutputConfig_PubsubDestination{
					PubsubDestination: &assetpb.PubsubDestination{
						Topic: topic,
					},
				},
			},
		},
		UpdateMask: &field_mask.FieldMask{
			Paths: []string{"feed_output_config.pubsub_destination.topic"},
		},
	}
	response, err := client.UpdateFeed(ctx, req)
	if err != nil {
		log.Fatalf("client.UpdateFeed: %v", err)
	}
	fmt.Print(response)
}

자바

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

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

import com.google.cloud.asset.v1.AssetServiceClient;
import com.google.cloud.asset.v1.Feed;
import com.google.cloud.asset.v1.FeedOutputConfig;
import com.google.cloud.asset.v1.PubsubDestination;
import com.google.cloud.asset.v1.UpdateFeedRequest;
import com.google.protobuf.FieldMask;

public class UpdateFeedExample {

  // Update a feed
  public static void updateFeed(String feedName, String topic) throws Exception {
    // String feedName = "MY_FEED_NAME"
    // String topic = "projects/[PROJECT_ID]/topics/[TOPIC_NAME]"
    Feed feed =
        Feed.newBuilder()
            .setName(feedName)
            .setFeedOutputConfig(
                FeedOutputConfig.newBuilder()
                    .setPubsubDestination(PubsubDestination.newBuilder().setTopic(topic).build())
                    .build())
            .build();
    UpdateFeedRequest request =
        UpdateFeedRequest.newBuilder()
            .setFeed(feed)
            .setUpdateMask(
                FieldMask.newBuilder()
                    .addPaths("feed_output_config.pubsub_destination.topic")
                    .build())
            .build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      Feed response = client.updateFeed(request);
      System.out.println("Feed updated successfully: " + response.getName());
    } catch (Exception e) {
      System.out.println("Error during UpdateFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

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

const client = new AssetServiceClient();
// example inputs:
// const fullQueryName = 'folders/<FOLDER_NUMBER>/savedQueries/<QUERY_ID>';
// const description = 'a new description';
async function updateSavedQuery() {
  const request = {
    savedQuery: {
      name: fullQueryName,
      description: description,
    },
    updateMask: {
      paths: ['description'],
    },
  };

  // Handle the operation using the promise pattern.
  const [query] = await client.updateSavedQuery(request);
  // Do things with with the response.
  console.log('Query name:', query.name);
  console.log('Query description:', query.description);
  console.log('Created time:', query.createTime);
  console.log('Updated time:', query.lastUpdateTime);
  console.log('Query type:', query.content.queryContent);
  console.log('Query content:', JSON.stringify(query.content, null, 4));

Python

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

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

from google.cloud import asset_v1
from google.protobuf import field_mask_pb2

# TODO feed_name = 'Feed Name you want to update'
# TODO topic = "Topic name you want to update with"

client = asset_v1.AssetServiceClient()
feed = asset_v1.Feed()
feed.name = feed_name
feed.feed_output_config.pubsub_destination.topic = topic
update_mask = field_mask_pb2.FieldMask()
# In this example, we update topic of the feed
update_mask.paths.append("feed_output_config.pubsub_destination.topic")
response = client.update_feed(request={"feed": feed, "update_mask": update_mask})
print(f"updated_feed: {response}")

피드 삭제

애셋 변경 알림을 더 이상 받지 않으려면 다음 요청 중 하나를 실행하여 피드를 삭제합니다.

gcloud

gcloud asset feeds delete FEED_ID \
    --SCOPE \
    --billing-project=BILLING_PROJECT_ID

다음 값을 제공합니다.

  • 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: Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

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

응답 예시

삭제에 성공하면 응답이 반환되지 않습니다.

REST

HTTP 메서드 및 URL:

DELETE https://cloudasset.googleapis.com/v1/SCOPE_PATH/feeds/FEED_ID

헤더:

X-Goog-User-Project: BILLING_PROJECT_ID

다음 값을 제공합니다.

  • SCOPE_PATH: 다음 중 한 가지 값을 사용합니다.

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

    • 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: Pub/Sub 주제 관리 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

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

명령어 예시

다음 명령어 중 하나를 실행하여 특정 피드를 삭제합니다.

cURL(Linux, macOS, Cloud Shell)

curl -X DELETE \
     -H "X-Goog-User-Project: BILLING_PROJECT_ID" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudasset.googleapis.com/v1/projects/000000000000/feeds/my-feed

PowerShell(Windows)

$cred = gcloud auth print-access-token

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


Invoke-WebRequest `
  -Method DELETE `
  -Headers $headers `
  -Uri "https://cloudasset.googleapis.com/v1/projects/000000000000/feeds/my-feed" | Select-Object -Expand Content

응답 예시

{}

Go

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

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


// Sample delete-feed delete feed.
package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"os"
	"strconv"

	asset "cloud.google.com/go/asset/apiv1"
	"cloud.google.com/go/asset/apiv1/assetpb"
	cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
)

// Command-line flags.
var (
	feedID = flag.String("feed_id", "YOUR_FEED_ID", "Identifier of Feed.")
)

func main() {
	flag.Parse()
	ctx := context.Background()
	client, err := asset.NewClient(ctx)
	if err != nil {
		log.Fatalf("asset.NewClient: %v", err)
	}
	defer client.Close()

	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	cloudresourcemanagerClient, err := cloudresourcemanager.NewService(ctx)
	if err != nil {
		log.Fatalf("cloudresourcemanager.NewService: %v", err)
	}

	project, err := cloudresourcemanagerClient.Projects.Get(projectID).Do()
	if err != nil {
		log.Fatalf("cloudresourcemanagerClient.Projects.Get.Do: %v", err)
	}
	projectNumber := strconv.FormatInt(project.ProjectNumber, 10)
	feedName := fmt.Sprintf("projects/%s/feeds/%s", projectNumber, *feedID)
	req := &assetpb.DeleteFeedRequest{
		Name: feedName,
	}
	if err = client.DeleteFeed(ctx, req); err != nil {
		log.Fatalf("client.DeleteFeed: %v", err)
	}
	fmt.Print("Deleted Feed")
}

자바

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

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

import com.google.cloud.asset.v1.AssetServiceClient;

public class DeleteFeedExample {

  // Delete a feed with full feed name
  public static void deleteFeed(String feedName) throws Exception {
    // String feedName = "MY_FEED_NAME"

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AssetServiceClient client = AssetServiceClient.create()) {
      client.deleteFeed(feedName);
      System.out.println("Feed deleted");
    } catch (Exception e) {
      System.out.println("Error during DeleteFeed: \n" + e.toString());
    }
  }
}

Node.js

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

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

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

const client = new AssetServiceClient();

async function deleteFeed() {
  const request = {
    name: feedName,
  };

  // Handle the operation using the promise pattern.
  const result = await client.deleteFeed(request);
  // Do things with with the response.
  console.log(util.inspect(result, {depth: null}));

Python

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

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

from google.cloud import asset_v1

# TODO feed_name = 'Feed name you want to delete'

client = asset_v1.AssetServiceClient()
client.delete_feed(request={"name": feed_name})
print("deleted_feed")

피드 조건

특정 애셋에 대한 특정 유형의 변경사항만 보려면 피드에 조건을 추가할 수 있습니다. 조건은 Common Expression Language(CEL)로 작성됩니다.

조건 지원은 제한적입니다. 경우에 따라 조건으로 피드를 만들거나 업데이트하면 지연이 발생할 수 있습니다.

제한사항

  • 조건 표현식의 길이는 영문 3,000자로 제한됩니다.

  • 조건 표현식의 대부분의 변수 이름은 각 단어 사이에 밑줄이 있는 소문자로 표시됩니다. 예를 들면 example_variable입니다.

    예외는 Resource 객체에 있는 data의 하위 필드 변수 이름입니다. 단어 구분자가 없으며 첫 번째 단어 이후 각 단어의 첫 글자는 대문자로 표시됩니다. 예를 들면 exampleVariable입니다.

  • 조건 표현식에 대한 일부 검증은 피드 생성 또는 피드 업데이트 시간 중에 실행됩니다. 그러나 이러한 검증은 특히 동적 유형을 갖는 temporal_asset.asset.resource.data 필드에 설정된 조건에 대해서는 포괄적이지 않습니다. 가능하면 대신 적절한 gcloud CLI 또는 REST API 매개변수를 사용하여 피드를 필터링하세요.

  • 평가 중에 오류가 발생하면 알림은 전송되지 않지만 오류가 로깅됩니다.

  • temporal_asset.asset.resource.data의 동적 유형에서는 누락된 필드에 지정된 조건이 런타임 오류를 트리거하고 알림이 게시되지 않습니다. 예를 들어 조건 temporal_asset.asset.resource.data.name != "my_name"의 경우 업데이트에서 name 필드가 누락되면 평가가 실패하고 알림이 수신되지 않습니다. 특정 필드가 있는 상태에서 조건이 작동하는 경우 조건에 존재 확인을 추가하여 제대로 평가되도록 하세요.

  • 정적 enum 유형은 정규화된 경로 이름 또는 원시 정수로 표현할 수 있습니다. 예를 들어 prior_asset_state에 유효한 표현식은 다음과 같습니다.

    temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
    

    temporal_asset.prior_asset_state == 3
    

    temporal_asset.asset.resource.data의 동적 열거형 유형은 원시 문자열로 표시됩니다. 예를 들어 다음 표현식은 애셋 유형 cloudresourcemanager.googleapis.com/Project에 유효합니다.

    temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"
    

CEL로 조건 표현식 만들기

피드 조건에서 Common Expression Language(CEL)는 속성 데이터를 기반으로 불리언 결정을 내리는 데 사용됩니다. 조건 표현식은 논리 연산자를 사용하여 결합된 하나 이상의 문으로 구성됩니다. 각 문은 알림 전송 여부를 결정하는 TemporalAsset에 적용되는 속성 기반 제어 규칙을 나타냅니다.

다음 CEL 기능은 피드 상태에 가장 중요합니다.

  • 변수: 조건은 변수를 사용하여 주어진 속성을 표현합니다(예: temporal_asset.deleted(Boolean) 또는 temporal_asset.asset.name(String)). 이러한 변수는 런타임에 컨텍스트 기반 값으로 채워집니다.

  • 연산자: String과 같은 모든 데이터 유형은 논리 표현식을 만드는 데 사용할 수 있는 연산자 집합을 지원합니다. 일반적으로 연산자는 변수에 포함된 값을 temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345"과 같은 리터럴 값과 비교하는 데 사용됩니다. 이 예시에서 temporal_asset.asset.name 입력 값이 //cloudresourcemanager.googleapis.com/projects/12345이면 표현식은 true로 평가됩니다.

  • 함수: 함수는 더 복잡한 작업을 지원하는 데이터 유형의 복합 연산자입니다. 조건 표현식에는 지정된 데이터 유형과 함께 사용할 수 있는 사전 정의된 함수가 있습니다. 예를 들어 temporal_asset.asset.name.contains("keyword")contains라는 함수를 사용하여 temporal_asset.asset.name 값에 "keyword"가 포함되어 있는지 확인합니다. 포함된 경우 true로 평가됩니다.

  • 논리 연산자: 조건은 기본 표현식 문에서 복잡한 논리 표현식을 작성하는 데 사용할 수 있는 논리 연산자, 즉 &&(AND) 및 ||(OR)를 지원합니다. 이러한 논리 연산자를 사용하면 조건 표현식에서 여러 입력 변수를 사용할 수 있습니다. 예를 들어 temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020은 두 개의 기본 문을 결합하며, true 평가 결과를 도출하려면 두 문이 모두 조건을 충족해야 합니다.

CEL 기능에 대한 자세한 내용은 언어 정의를 참조하세요.

조건 변수 사용

조건 변수를 사용하면 다른 속성에 대한 조건을 만들 수 있습니다. 지원되는 조건 변수는 다음과 같습니다.

  • temporal_asset: TemporalAsset 형식의 가장 최근 애셋 변경입니다. 조건이 true로 평가되면 TemporalAsset이 구성된 대상으로 전송됩니다.

조건 표현식 예시

다음 조건 표현식은 생성 이벤트에 대한 알림을 보냅니다.

temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST

다음 조건 표현식은 폴더 1234523456에 있는 리소스에 대한 알림을 보냅니다.

"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors

다음 조건 표현식은 피드에서 이미 애셋 유형이 compute.googleapis.com/Firewall로 설정되어 있다고 가정하여 방화벽에 새로 허용되는 규칙이 추가될 때 알림을 보냅니다.

size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)

다음 조건 표현식은 피드에서 이미 애셋 유형이 compute.googleapis.com/Instance로 설정되었다고 가정하여 n1-standard-1 머신 유형의 VM 인스턴스에 대한 알림을 보냅니다.

temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')

다음 조건 표현식은 피드에서 애셋 유형이 storage.googleapis.com/Bucket으로 설정되고 콘텐츠 유형이 IAM_POLICY로 설정되었다고 가정하고 allUsers의 IAM 정책이 있는 스토리지 버킷에 대한 알림을 보냅니다.

temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))

다음 조건 표현식은 라벨에 test 키가 있는 스토리지 버킷이 삭제될 때 알림을 보냅니다.

temporal_asset.deleted == true && temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.PRESENT && "test" in temporal_asset.prior_asset.resource.data.labels

문제 해결

리소스 또는 IAM 정책 업데이트 알림을 받지 못하는 경우 다음 단계에 따라 문제를 해결할 수 있습니다.

  • 저작물의 메타데이터가 변경되었는지 확인합니다. 실시간 피드는 지원되는 리소스 유형의 메타데이터가 변경된 경우에만 업데이트를 전송합니다. Cloud Storage 버킷에 새 파일을 업로드하는 것과 같은 작업은 메타데이터 변경을 트리거하지 않습니다.

  • 애셋이 피드에 지정한 애셋 이름 또는 유형 중 하나와 일치하는지 확인합니다.

  • 프로젝트 삭제의 경우 프로젝트를 종료하면 30일 이내에 작업을 실행취소할 수 있다는 점에 유의하세요. 따라서 프로젝트가 영구적으로 삭제될 때까지 애셋 메타데이터의 deleted 필드는 설정되지 않습니다. 삭제 대기 중인 프로젝트를 모니터링하려면 대신 프로젝트의 lifecycleState 필드에 조건을 설정할 수 있습니다. 예를 들면 다음과 같습니다. temporal_asset.asset.resource.data.lifecycleState == "DELETE_REQUESTED"

  • 로그를 확인하여 주제에 업데이트를 게시할 때 오류가 있는지 확인하세요.

Cloud Logging

실시간 피드가 Pub/Sub를 통해 리소스 또는 IAM 정책 업데이트를 전송하지 못하는 경우 Cloud 애셋 인벤토리는 로깅을 통해 오류 상태 및 메시지를 로깅합니다. 로깅은 기본적으로 사용 설정되어 있으며 Google Cloud Observability에 속합니다. Google Cloud Observability 가격 책정을 알아보세요.

실시간 피드 로그 보기

실시간 피드 로그는 Pub/Sub 주제에 의해 색인이 생성됩니다. 모든 로그를 보려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔의 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 모든 필드 검색 상자 근처에 있는 리소스 목록을 클릭합니다.

  3. Cloud Pub/Sub Topic을 검색한 후 Cloud Pub/Sub 주제 리소스 유형을 클릭합니다.

  4. 보려는 주제 ID를 클릭합니다.

  5. 적용을 클릭합니다.

로그 필드에는 UTF-8 인코딩이 적용됩니다. UTF-8 문자를 제외하고는 모두 물음표로 대체됩니다.

로깅되는 정보

실시간 피드 로그 항목에는 다음과 같은 유형의 정보가 포함됩니다.

  • 심각도, 프로젝트 ID, 프로젝트 번호 또는 타임스탬프와 같은 대부분의 Google Cloud 로그에 표시되는 일반 정보

  • 리소스 또는 IAM 정책 업데이트를 게시할 때 애셋 이름, 피드 출력 구성 및 오류 상태가 포함된 jsonPayload의 실시간 피드 로그 필드

다음 표에서는 각 필드에 포함되는 정보의 종류를 보여줍니다.

필드 유형 및 설명
name

string

피드의 전체 이름입니다. 형식은 다음 중 하나입니다.

  • projects/PROJECT_ID/feeds/FEED_ID
  • folders/FOLDER_ID/feeds/FEED_ID
  • organizations/ORGANIZATION_ID/feeds/FEED_ID
asset_name

string

업데이트를 수신할 애셋의 전체 이름입니다. 예를 들면 다음과 같습니다.

//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1

자세한 내용은 리소스 이름을 참조하세요.

condition

Expr

애셋 업데이트를 게시할지 여부를 결정하는 피드 조건입니다.

error_status

Status

피드에 애셋 업데이트를 게시하지 못한 경우 표시되는 상태입니다.

feed_output_config

FeedOutputConfig

애셋 업데이트가 게시되는 위치를 정의하는 피드 출력 구성입니다.