애셋 통계로 보안 태세 개선

Cloud 애셋 인벤토리 통계는 애셋 구성의 잠재적 위험을 감지하고 보안 상태를 개선하는 데 도움이 됩니다. 이는 Recommender 서비스의 일부이며 google.cloudasset.asset.Insight 통계 유형으로 제공됩니다.

통계는 적절한 조치를 결정하기 위해 추가 분석이 필요한 특정 이상치입니다. 이러한 통계는 Cloud 애셋 인벤토리에 저장된 데이터의 스냅샷을 기반으로 매일 생성됩니다.

Cloud 애셋 인벤토리에서 제공하는 통계는 조직의 리소스와 연결된 IAM 정책을 기반으로 합니다.

시작하기 전에

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

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

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

    • recommender.cloudAssetInsights.get

    • recommender.cloudAssetInsights.list

    • recommender.cloudAssetInsights.update

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

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

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

제한사항

  • 이러한 통계는 그룹 멤버십 또는 서비스 계정을 발견 항목의 일부로 고려하지 않으며 일치하는 취약점의 전체 목록으로 간주해서는 안 됩니다.

  • 개별 통계에는 최대 100개의 고유 정책에 해당하는 일치하는 IAM 정책 샘플링이 포함됩니다. 리소스에서 IAM 허용 정책을 검색하여 일치하는 모든 정책을 검색할 수 있습니다.

애셋 통계 요청

애셋 통계를 요청하는 가장 쉬운 방법은 다음 단계에 표시된 대로 통계를 나열하는 것입니다. 다른 유형의 통계 상호작용은 API 사용 - 통계를 참고하세요.

gcloud

gcloud recommender insights list \
    --SCOPE \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight \
    --filter="insightSubtype:SUBTYPE" \

다음 값을 제공합니다.

  • 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: (선택사항) 결제 및 할당량을 관리할 권한이 있는 기본 Cloud 애셋 인벤토리 서비스 에이전트가 있는 프로젝트 ID입니다. 결제 프로젝트 설정에 대해 자세히 알아보세요.

  • SUBTYPE: 애셋 통계 하위유형입니다. 다음 값 중 하나입니다.

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

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

예시

다음 명령어를 실행하여 my-project 프로젝트의 통계를 나열합니다.

gcloud recommender insights list \
    --project=my-project \
    --location=global \
    --insight-type=google.cloudasset.asset.Insight

응답 예시

INSIGHT_ID: 00000000-0000-0000-0000-000000000000
CATEGORY: SECURITY
INSIGHT_STATE: ACTIVE
LAST_REFRESH_TIME: 2024-01-30T00:00:00Z
SEVERITY: LOW
INSIGHT_SUBTYPE: EXTERNAL_MEMBER
DESCRIPTION: Domain example.com detected in 1 IAM policies

REST

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/SCOPE_PATH/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

헤더:

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

명령어 예시

다음 명령어 중 하나를 실행하여 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://recommender.googleapis.com/v1/projects/my-project/locations/global/insightTypes/google.cloudasset.asset.Insight/insights

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://recommender.googleapis.com/v1/projects/my-project/locations/global/insightTypes/google.cloudasset.asset.Insight/insights" | Select-Object -Expand Content

응답 예시

{
   "name": "organizations/000000000000/locations/global/insightTypes/google.cloudasset.asset.Insight/insights/00000000-0000-0000-0000-000000000000",
   "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/000000000000",
            "project" :"projects/000000000000",
            "matchedBindings" :[
               {
                  "role" :"roles/viewer",
                  "matchedMembers" :[
                     "user:example@example.com"
                  ]
               }
            ]
         }
      ]
   },
   "lastRefreshTime": "2024-01-30T00:00:00Z",
   "observationPeriod": "0s",
   "stateInfo": {
      "state": "ACTIVE"
   },
   "category": "SECURITY",
   "targetResources": [
      "//cloudresourcemanager.googleapis.com/organizations/000000000000"
   ],
   "insightSubtype": "EXTERNAL_MEMBER",
   "etag": "\"00000000000\"",
   "initialRefreshTime": "2024-01-30T00:00:00Z"
}

통계 응답 해석

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

통계 하위유형

애셋 통계 하위유형은 다음과 같습니다.

  • 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 필드에 여러 가지 특수화된 필드를 제공합니다.

  • user: 이 통계의 정책 바인딩 구성원 내에서 감지된 사용자 이메일 주소입니다. 이 필드는 TERMINATED_MEMBER 하위유형에 포함됩니다.

  • domain: 이 통계의 정책 바인딩 구성원 내에서 감지된 도메인입니다. 이 필드는 EXTERNAL_MEMBER, EXTERNAL_POLICY_EDITOR, EXTERNAL_CLOUD_STORAGE_OBJECT_VIEWER, EXTERNAL_SERVICE_ACCOUNT_IMPERSONATOR 하위유형에 포함되어 있습니다.

  • assetName: 이 통계에서 액세스가 감지된 애셋 이름입니다. 이 필드는 OWNER_TERMINATED_PROJECTPUBLIC_IAM_POLICY 하위유형에 포함되어 있습니다.

  • policyCount: 이 통계에 대해 일치하는 구성원이 감지된 고유한 IAM 정책의 총 개수입니다. 이 필드는 모든 애셋 통계 하위유형에 포함됩니다.

  • matchedPolicies: 감지된 통계와 일치하는 IAM 정책의 샘플링입니다. 일치하는 정책에는 감지된 통계와 일치하는 바인딩 및 바인딩 구성원의 하위 집합만 포함됩니다. 이 필드는 모든 애셋 통계 하위유형에 포함됩니다.

  • policySearchQuery: Cloud 애셋 인벤토리 IAM 정책 검색 API와 함께 사용하여 관련 정책을 실시간으로 검색할 수 있는 쿼리입니다.