애셋 통계 사용

이 주제에서는 애셋 통계를 사용하여 애셋 구성의 잠재적 위험을 감지하고 보안 상태를 개선하는 방법을 설명합니다.

개요

Cloud 애셋 통계는 조직의 리소스와 관련된 IAM 정책을 기반으로 통계를 제공합니다. 이는 Recommender 서비스의 일부이며 google.cloudasset.asset.Insight 통계 유형으로 제공됩니다. 통계는 적절한 조치를 결정하기 위해 추가 분석이 필요한 특정 이상치입니다. Cloud 애셋 인벤토리에 저장된 데이터의 스냅샷을 기반으로 매일 생성됩니다.

시작하기 전에

애셋 통계를 사용하려면 먼저 다음 단계를 완료해야 합니다.

  1. Recommender API를 사용 설정합니다.

  2. 계정에 다음 권한이 있는지 확인합니다.

    • recommender.cloudAssetInsights.get
    • recommender.cloudAssetInsights.list
    • recommender.cloudAssetInsights.update

    이러한 권한을 개별적으로 부여하거나 다음 역할 중 하나를 부여할 수 있습니다.

    • Cloud 애셋 통계 뷰어(roles/recommender.cloudAssetInsightsViewer) 역할
    • Cloud 애셋 통계 관리자(roles/recommender.cloudAssetInsightsAdmin) 역할

애셋 통계 요청

애셋 통계를 요청하는 가장 쉬운 방법은 다음 단계를 따라 통계를 나열하는 것입니다. 다른 유형의 통계 상호작용은 Recommender API 통계 가이드를 참조하세요.

프로젝트 통계 요청

프로젝트에 대한 통계를 요청하려면 다음 단계를 완료하세요.

gcloud

다음 gcloud 도구 명령어를 실행하세요.

gcloud recommender insights list \
  --project=PROJECT \
  --billing-project=BILLING_PROJECT \
  --location=global \
  --insight-type=google.cloudasset.asset.Insight \
  --filter="insightSubtype:SUBTYPE" \
  --format=FORMAT

각 항목의 의미는 다음과 같습니다.

  • BILLING_PROJECT는 Recommender API를 사용 설정한 프로젝트입니다. 또는 gcloud 도구 구성에서 프로젝트를 billing/quota_project로 설정하면 이 매개변수가 필요하지 않습니다.
  • --filter는 선택사항이지만 통계 하위유형별로 결과를 필터링하는 데 사용할 수 있습니다.
  • FORMATgcloud 도구에서 지원되는 출력 형식입니다. 예를 들어 통계 콘텐츠를 평면화된 테이블로 나열하려면 다음을 실행합니다.
gcloud recommender insights list \
    --project=PROJECT \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
    --format="table(insightSubtype, name,
    content.matchedPolicies.matchedBindings.matchedMembers,
    content.matchedPolicies.matchedBindings.role,
    content.matchedPolicies.resource)"

API

다음 curl 명령을 실행합니다.

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
  -H "x-goog-user-project: WHITELISTED_PROJECT" \
  "https://recommender.googleapis.com/v1/projects/PROJECT/locations/global/insightTypes/google.cloudasset.asset.Insight/insights"

폴더 통계 요청

폴더에 대한 통계를 요청하려면 다음 단계를 완료하세요.

gcloud

다음 gcloud 도구 명령어를 실행하세요.

gcloud recommender insights list \
  --folder=FOLDER_NUMBER \
  --billing-project=BILLING_PROJECT \
  --location=global \
  --insight-type=google.cloudasset.asset.Insight \
  --filter="insightSubtype:SUBTYPE" \
  --format=FORMAT

각 항목의 의미는 다음과 같습니다.

  • BILLING_PROJECT는 Recommender API를 사용 설정한 프로젝트입니다. 또는 gcloud 도구 구성에서 프로젝트를 billing/quota_project로 설정하면 이 매개변수가 필요하지 않습니다.
  • --filter는 선택사항이지만 통계 하위유형별로 결과를 필터링하는 데 사용할 수 있습니다.
  • FORMATgcloud 도구에서 지원되는 출력 형식입니다. 예를 들어 통계 콘텐츠를 평면화된 테이블로 나열하려면 다음을 실행하세요.
gcloud recommender insights list \
    --folder=FOLDER_NUMBER \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
    --format="table(insightSubtype, name,
    content.matchedPolicies.matchedBindings.matchedMembers,
    content.matchedPolicies.matchedBindings.role,
    content.matchedPolicies.resource)"

API

다음 curl 명령을 실행합니다.

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
  -H "x-goog-user-project: PROJECT" \
  "https://recommender.googleapis.com/v1/folders/FOLDER_NUMBER/locations/global/insightTypes/google.cloudasset.asset.Insight/insights"

조직 통계 요청

조직에 대한 통계를 요청하려면 다음 단계를 완료하세요.

gcloud

다음 gcloud 도구 명령어를 실행하세요.

gcloud recommender insights list \
  --organization=ORGANIZATION \
  --billing-project=BILLING_PROJECT \
  --location=global \
  --insight-type=google.cloudasset.asset.Insight \
  --filter="insightSubtype:SUBTYPE" \
  --format=FORMAT

각 항목의 의미는 다음과 같습니다.

  • BILLING_PROJECT는 Recommender API를 사용 설정한 프로젝트입니다. 또는 gcloud 도구 구성에서 프로젝트를 billing/quota_project로 설정하면 이 매개변수가 필요하지 않습니다.
  • --filter는 선택사항이지만 통계 하위유형별로 결과를 필터링하는 데 사용할 수 있습니다.
  • FORMATgcloud 도구에서 지원되는 출력 형식입니다. 예를 들어 통계 콘텐츠를 평면화된 테이블로 나열하려면 다음을 실행하세요.
gcloud recommender insights list \
    --organization=ORGANIZATION \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --flatten="content.matchedPolicies[].matchedBindings[].matchedMembers[]" \
    --format="table(insightSubtype, name,
    content.matchedPolicies.matchedBindings.matchedMembers,
    content.matchedPolicies.matchedBindings.role,
    content.matchedPolicies.resource)"

API

다음 curl 명령을 실행합니다.

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)"  \
-H "x-goog-user-project: PROJECT" \
"https://recommender.googleapis.com/v1/organizations/ORGANIZATION

통계 응답 해석

애셋 통계는 표준 통계 속성 외에 몇 가지 특수 하위유형 및 필드를 제공합니다.

통계 하위유형

7개의 서로 다른 애셋 통계 하위유형이 있습니다.

  • EXTERNAL_MEMBER: 조직 도메인 외부의 도메인에 속하는 사용자 또는 그룹이 포함된 IAM 정책을 감지합니다.
  • EXTERNAL_POLICY_EDITOR: IAM 정책을 수정할 수 있는 권한이 있는 조직 도메인 외부의 사용자 또는 그룹이 포함된 IAM 정책을 감지합니다.
  • EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER: 스토리지 객체(storage.objects.list 또는 storage.objects.get permission)를 가져오거나 나열할 수 있는 권한이 부여된 조직 도메인 외부의 사용자 또는 그룹이 포함된 IAM 정책을 감지합니다.
  • EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR: 서비스 계정을 가장할 수 있는 권한이 부여된 조직 도메인 외부의 사용자 또는 그룹이 포함된 IAM 정책을 감지합니다.
  • TERMINATED_MEMBER: 비활성 계정 또는 해지된 계정이 있는 사용자 또는 그룹이 포함된 IAM 정책을 감지합니다.
  • PUBLIC_IAM_POLICY: 모든 사용자 또는 인증된 사용자가 포함된 IAM 정책을 감지합니다.
  • OWNER_TERMINATED_PROJECT: 프로젝트의 IAM 정책에 활성 사용자 또는 그룹이 포함되어 있지 않은 프로젝트를 감지합니다.

추가 content 필드

애셋 통계는 응답의 표준 필드 외에 content 필드에 여러 가지 특수화된 필드를 제공합니다.

  • user: 이 특정 통계의 정책 binding 구성원 내에서 감지된 특정 사용자 이메일 주소입니다. 이 필드는 TERMINATED_MEMBER 하위유형에 포함됩니다.
  • domain: 이 특정 통계의 정책 binding 구성원 내에서 감지된 특정 도메인입니다. 이 필드는 EXTERNAL_MEMBER, EXTERNAL_POLICY_EDITOR, EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER, EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR 하위유형에 포함되어 있습니다.
  • assetName: 이 특정 통계에서 액세스가 감지된 애셋 이름입니다. 이 필드는 OWNER_TERMINATED_PROJECTPUBLIC_IAM_POLICY 하위유형에 포함됩니다.
  • policyCount: 이 특정 통계에서 일치하는 구성원이 감지된 고유한 IAM 정책의 총 개수입니다. 이 필드는 모든 애셋 통계 하위유형에 포함됩니다.
  • matchedPolicies: 감지된 통계와 일치하는 IAM 정책의 샘플링입니다. 일치하는 정책에는 감지된 통계와 일치하는 binding 및 binding 구성원의 하위 집합만 포함됩니다. 이 필드는 모든 애셋 통계 하위유형에 포함됩니다.
  • policySearchQuery: 모든 관련 정책을 실시간으로 검색하기 위해 Cloud 애셋 인벤토리 IAM 정책 검색 API와 함께 사용할 수 있는 쿼리입니다.

샘플 응답

다음 스니펫은 샘플 응답의 형식을 보여줍니다.

[{
   "name":"organizations/1234567/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/0ab35ae7-afa8-42a3-a173-92da8771a489",
   "description":"Domain example.com detected in 1 IAM policies",
   "content":{
      "domain":"example.com",
      "policyCount":1,
      "policySearchQuery":"policy: example.com",
      "matchedPolicies":[
         {
            "resource":"//cloudresourcemanager.googleapis.com/projects/5678910",
            "project":"projects/5678910",
            "matchedBindings":[
               {
                  "role":"roles/viewer",
                  "matchedMembers":[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime":"2020-12-04T06:59:04Z",
   "observationPeriod":"0s",
   "stateInfo":{
      "state":"ACTIVE"
   },
   "category":"SECURITY",
   "targetResources":[
      "//cloudresourcemanager.googleapis.com/organizations/1234567"
   ],
   "insightSubtype":"EXTERNAL_MEMBER",
   "etag":"\"00000000000\"",
   "initialRefreshTime":"2020-12-01T06:58:03Z"
}]

제한사항

  • 이러한 통계는 그룹 멤버십을 발견 항목의 일부로 고려하지 않으며 일치하는 취약점의 전체 목록으로 간주해서는 안 됩니다.
  • 개별 통계에는 최대 100개의 고유 정책에 해당하는 일치하는 IAM 정책 샘플링이 포함됩니다. Cloud 애셋 인벤토리 정책 검색을 호출하여 일치하는 모든 정책을 검색할 수 있습니다.
  • 애셋 통계는 통계 생성의 목적으로 서비스 계정을 고려하지 않습니다.