BigQuery 데이터 세트의 정책 통계 검토

이 페이지에서는 BigQuery 데이터 세트의 권한 사용에 대한 머신러닝 기반 발견 항목인 데이터 세트 수준 정책 통계를 관리하는 방법을 보여줍니다. 정책 통계는 필요하지 않은 권한을 갖고 있는 주 구성원을 식별하는 데 도움이 됩니다.

이 페이지에서는 데이터 세트의 정책 통계를 중점적으로 설명합니다. 또한 추천자는 다음 리소스 유형에 대한 정책 통계를 제공합니다.

데이터 세트 수준 정책 통계는 경우에 따라 역할 권장사항에 연결됩니다. 역할 권장사항은 데이터 세트 수준 정책 통계에서 식별된 문제를 해결하기 위해 수행할 수 있는 작업을 제안합니다.

시작하기 전에

필요한 역할

데이터 세트 수준 정책 통계를 관리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

  • BigQuery 데이터 소유자(`roles/bigquery.dataOwner`)
  • IAM 추천자 관리자(`roles/recommender.iamAdmin`)
  • gcloud CLI 또는 REST API를 사용하여 데이터 세트 수준 정책 통계 관리: 서비스 사용량 소비자(`roles/serviceusage.serviceUsageConsumer`)

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 데이터 세트 수준 정책 통계를 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

데이터 세트 수준 정책 통계를 관리하려면 다음 권한이 필요합니다.

  • 데이터 세트 수준 정책 통계 보기:
    • recommender.iamPolicyInsights.get
    • recommender.iamPolicyInsights.list
  • 데이터 세트 수준 정책 통계 수정: recommender.iamPolicyInsights.update
  • gcloud CLI 또는 REST API로 데이터 세트 수준 정책 통계 관리: serviceusage.services.use

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

데이터 세트 수준 정책 통계 나열

프로젝트의 모든 데이터 세트 수준 정책 통계를 나열하려면 다음 메서드 중 하나를 사용합니다.

gcloud

gcloud recommender insights list 명령어를 사용하면 프로젝트의 모든 데이터 세트 수준 정책 통계를 확인할 수 있습니다.

명령어를 실행하기 전에 다음 값을 바꿉니다.

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID입니다.
  • LOCATION: 통계를 나열할 데이터 세트의 위치입니다.
gcloud recommender insights list --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION\
    --filter="insightSubtype:PERMISSIONS_USAGE_BIGQUERY_DATASET"

지정된 위치에 있는 프로젝트의 모든 데이터 세트 수준 정책 통계가 출력에 나열됩니다. 예를 들면 다음과 같습니다.

INSIGHT_ID                            CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME     SEVERITY  INSIGHT_SUBTYPE                     DESCRIPTION
101d03ad-6148-4628-943e-fcf1a3af6b57  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
15133dd9-4cbc-41e9-8990-b189241676d8  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
1590aeae-d5bf-4e3d-b7d5-e230212f5faf  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  4 of the permissions in this role binding were used in the past 90 days.
280e5a14-4d09-4ac6-8e14-be7407611ad7  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
34102078-085f-45d3-ae72-81da16c75781  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  10 of the permissions in this role binding were used in the past 90 days.

REST

Recommender API의 insights.list 메서드는 프로젝트의 모든 데이터 세트 수준 정책 통계를 나열합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 통계를 나열하려는 프로젝트의 ID입니다.
  • LOCATION: 통계를 나열할 데이터 세트의 위치입니다.

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights?filter=insightSubtype%20%3D%20PERMISSIONS_USAGE_BIGQUERY_DATASET

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

응답에는 지정된 위치에 있는 프로젝트의 모든 데이터 세트 수준 정책 통계가 나열됩니다. 예를 들면 다음과 같습니다.

{
  "insights": [
    {
      "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
      "description": "0 of the permissions in this role binding were used in the past 90 days.",
      "content": {
        "role": "roles/bigquery.dataEditor",
        "member": "projectEditor:my-project",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": [],
        "currentTotalPermissionsCount": "37"
      },
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "observationPeriod": "7779600s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
        }
      ],
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      ],
      "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
      "etag": "\"35d4af47524d3f0c\"",
      "severity": "LOW"
    },
    {
      "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/15133dd9-4cbc-41e9-8990-b189241676d8",
      "description": "0 of the permissions in this role binding were used in the past 90 days.",
      "content": {
        "role": "roles/bigquery.dataViewer",
        "member": "projectViewer:my-project",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": [],
        "currentTotalPermissionsCount": "17"
      },
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "observationPeriod": "7779600s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/bc9b4c28-cc93-4a91-97ea-ff67e3cef1b4"
        }
      ],
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-2"
      ],
      "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
      "etag": "\"eafa79df1b329063\"",
      "severity": "LOW"
    }
  ]
}

통계 구성요소에 대한 자세한 내용은 이 페이지의 데이터 세트 수준 정책 통계 검토를 참조하세요.

단일 데이터 세트 수준 정책 통계 가져오기

통계 설명, 상태, 관련 권장사항을 포함하여 단일 통계에 대한 자세한 내용을 보려면 다음 메서드 중 하나를 사용하세요.

gcloud

통계 ID와 함께 gcloud recommender insights describe 명령어를 사용하여 단일 통계에 대한 정보를 확인합니다.

  • INSIGHT_ID: 보려는 통계의 ID입니다. ID를 찾으려면 프로젝트의 통계를 나열하세요.
  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
  • LOCATION: 통계를 가져오려는 데이터 세트의 위치입니다.
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION

출력에 통계가 자세히 표시됩니다. 예를 들어 다음 통계는 my-project(projectEditor:my-project) 프로젝트에 대해 편집자 역할이 있는 모든 사용자가 dataset-1 데이터 세트에 대한 BigQuery 데이터 편집자 역할(roles/bigquery.dataEditor)이 있지만 해당 역할의 권한이 지난 90일 동안 사용되지 않았음을 나타냅니다.

associatedRecommendations:
- recommendation: projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f951-1ceb-488e-9e49-f17eb21f6e5e
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '37'
  exercisedPermissions: []
  inferredPermissions: []
  member: projectEditor:my-project
  role: roles/bigquery.dataEditor
description: 0 of the permissions in this role binding were used in the past 90 days.
etag: '"5f2f352a738f7a24"'
insightSubtype: PERMISSIONS_USAGE_BIGQUERY_DATASET
lastRefreshTime: '2024-02-04T08:00:00Z'
name: projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57
observationPeriod: 7776000s
severity: LOW
stateInfo:
  state: ACTIVE
targetResources:
- //bigquery.googleapis.com/projects/my-project/datasets/dataset-1

통계 구성요소에 대한 자세한 내용은 이 페이지의 데이터 세트 수준 정책 통계 검토를 참조하세요.

REST

Recommender API의 insights.get 메서드는 단일 통계를 가져옵니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
  • LOCATION: 통계를 가져오려는 데이터 세트의 위치입니다.
  • INSIGHT_ID: 보려는 통계의 ID입니다. 통계 ID를 모르는 경우 프로젝트의 통계를 나열하여 찾을 수 있습니다. 통계 ID는 통계의 name 필드에서 insights/ 다음에 오는 모든 문자입니다.

HTTP 메서드 및 URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

응답에 통계가 포함됩니다. 예를 들어 다음 통계는 my-project(projectEditor:my-project) 프로젝트에 대해 편집자 역할이 있는 모든 사용자가 dataset-1 데이터 세트에 대한 BigQuery 데이터 편집자 역할(roles/bigquery.dataEditor)이 있지만 해당 역할의 권한이 지난 90일 동안 사용되지 않았음을 나타냅니다.

{
  "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
  "description": "0 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/bigquery.dataEditor",
    "member": "projectEditor:my-project",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": [],
    "currentTotalPermissionsCount": "37"
  },
  "lastRefreshTime": "2024-02-02T08:00:00Z",
  "observationPeriod": "7779600s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
    }
  ],
  "targetResources": [
    "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
  ],
  "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
  "etag": "\"35d4af47524d3f0c\"",
  "severity": "LOW"
}

통계 구성요소에 대한 자세한 내용은 이 페이지의 데이터 세트 수준 정책 통계 검토를 참조하세요.

데이터 세트 수준 정책 통계 검토

단일 통계를 가져온 후 콘텐츠를 검토하여 강조표시되는 리소스 사용량 패턴을 파악할 수 있습니다.

통계의 콘텐츠는 하위유형에 따라 결정됩니다. 데이터 세트 수준 정책 통계(google.iam.policy.Insight)의 하위유형은 PERMISSIONS_USAGE_BIGQUERY_DATASET입니다.

PERMISSIONS_USAGE_BIGQUERY_DATASET 통계에는 다음과 같은 구성요소가 있습니다(순서는 다름).

  • associatedRecommendations: 통계와 연결된 모든 권장사항의 식별자입니다. 통계와 연결된 권장사항이 없으면 이 필드는 비어 있습니다.
  • category: IAM 통계의 카테고리는 항상 SECURITY입니다.
  • content: 특정 역할에 대한 주 구성원의 권한 사용 보고를 보고합니다. 이 필드에는 다음 구성요소가 포함됩니다.

    • condition: 주 구성원에게 역할을 부여하는 바인딩에 연결된 모든 조건입니다. 조건이 없는 경우 이 필드에는 빈 조건이 포함됩니다.
    • exercisedPermissions: 주 구성원이 관찰 기간 동안 사용한 역할의 권한입니다.
    • inferredPermissions: 추천자가 ML을 통해 사용된 권한을 기반으로 주 구성원에게 필요할 것으로 판단한 역할의 권한입니다.
    • member: 권한 사용이 분석된 주 구성원입니다.
    • role: 권한 사용이 분석된 역할입니다.
  • description: 인간이 읽을 수 있는 통계 요약입니다.
  • etag: 통계의 현재 상태에 대한 고유 식별자입니다. 통계가 변경될 때마다 새 etag 값이 할당됩니다.

    통계 상태를 변경하려면 기존 통계의 etag를 제공해야 합니다. etag를 사용하면 마지막으로 검색한 후 통계가 변경되지 않은 경우에만 작업이 수행됩니다.

  • insightSubtype: 통계 하위유형입니다.
  • lastRefreshTime: 통계가 마지막으로 갱신된 날짜로, 통계를 생성하는 데 사용된 데이터의 최신 상태를 나타냅니다.
  • name: 다음 형식의 통계 이름입니다.

    projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID

    자리표시자의 값은 다음과 같습니다.

    • PROJECT_ID: 통계가 생성된 프로젝트의 ID입니다.
    • LOCATION: 통계의 대상인 데이터 세트의 위치입니다.
    • INSIGHT_ID: 통계의 고유 ID입니다.
  • observationPeriod: 통계까지 이어지는 기간입니다. 통계를 생성하는 데 사용되는 소스 데이터는 lastRefreshTime에 종료되며 lastRefreshTime에서 observationPeriod를 뺀 시간에 시작합니다.
  • stateInfo: 통계는 제안된 후 여러 상태로 전환됩니다.

    • ACTIVE: 통계가 생성되지만 작업이 수행되지 않았거나 통계의 상태를 업데이트하지 않고 작업이 수행되었습니다. 활성 통계는 기본 데이터가 변경되면 업데이트됩니다.
    • ACCEPTED: 통계를 기반으로 몇몇 작업이 실행되었습니다. 통계가 수락되는 것은 관련 권장사항이 CLAIMED, SUCCEEDED 또는 FAILED로 표시되었거나 통계가 직접 수락된 경우입니다. 통계 상태가 ACCEPTED일 때는 통계 내용을 변경할 수 없습니다. 수락된 통계는 수락된 날로부터 90일 동안 보관됩니다.
  • targetResources: 통계의 대상인 데이터 세트의 전체 리소스 이름입니다. 예를 들면 //bigquery.googleapis.com/projects/my-project/datasets/my-dataset입니다.

데이터 세트 수준 정책 통계를 ACCEPTED로 표시

활성 통계를 기반으로 작업을 수행하는 경우 통계를 ACCEPTED로 표시할 수 있습니다. ACCEPTED 상태는 이 통계를 기반으로 작업을 수행했음을 Recommender API에 알려주므로 권장사항을 개선하는 데 도움이 됩니다.

허용된 통계는 ACCEPTED로 표시된 후 90일 동안 보관됩니다.

gcloud

통계 ID와 함께 gcloud recommender insights mark-accepted 명령어를 사용하여 통계를 ACCEPTED로 표시합니다.

  • INSIGHT_ID: 보려는 통계의 ID입니다. ID를 찾으려면 프로젝트의 통계를 나열하세요.
  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
  • LOCATION: 통계를 ACCEPTED로 표시할 데이터 세트의 위치입니다.
  • ETAG: 통계 버전의 식별자입니다. etag를 가져오려면 다음 안내를 따르세요.

    1. gcloud recommender insights describe 명령어를 사용하여 통계를 가져옵니다.
    2. 출력에서 etag 값(큰따옴표 포함)을 찾아 복사합니다. 예를 들면 "d3cdec23cc712bd0"입니다.
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION \
    --etag=ETAG

출력에 ACCEPTED 상태와 함께 통계가 표시됩니다.

associatedRecommendations:
- recommendation: projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f951-1ceb-488e-9e49-f17eb21f6e5e
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '37'
  exercisedPermissions: []
  inferredPermissions: []
  member: projectEditor:my-project
  role: roles/bigquery.dataEditor
description: 0 of the permissions in this role binding were used in the past 90 days.
etag: '"5f2f352a738f7a24"'
insightSubtype: PERMISSIONS_USAGE_BIGQUERY_DATASET
lastRefreshTime: '2024-02-04T08:00:00Z'
name: projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57
observationPeriod: 7776000s
severity: LOW
stateInfo:
  state: ACCEPTED
targetResources:
- //bigquery.googleapis.com/projects/my-project/datasets/dataset-1

통계 상태 정보에 대해 자세히 알아보려면 이 페이지의 데이터 세트 수준 정책 통계 검토를 참조하세요.

REST

Recommender API의 insights.markAccepted 메서드는 통계를 ACCEPTED로 표시합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 통계를 관리하려는 프로젝트의 ID입니다.
  • LOCATION: 통계를 ACCEPTED로 표시할 데이터 세트의 위치입니다.
  • INSIGHT_ID: 보려는 통계의 ID입니다. 통계 ID를 모르는 경우 프로젝트의 통계를 나열하여 찾을 수 있습니다. 통계 ID는 통계의 name 필드에서 insights/ 다음에 오는 모든 문자입니다.
  • ETAG: 통계 버전의 식별자입니다. etag를 가져오려면 다음을 실행합니다.
    1. insights.get 메서드를 사용하여 통계를 가져옵니다.
    2. 응답에서 etag 값을 찾아서 복사합니다.

HTTP 메서드 및 URL:

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID:markAccepted

JSON 요청 본문:

{
  "etag": "ETAG"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

응답에 통계가 포함됩니다. 이제 상태가 ACCEPTED입니다.

{
  "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
  "description": "0 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/bigquery.dataEditor",
    "member": "projectEditor:my-project",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": [],
    "currentTotalPermissionsCount": "37"
  },
  "lastRefreshTime": "2024-02-02T08:00:00Z",
  "observationPeriod": "7779600s",
  "stateInfo": {
    "state": "ACCEPTED"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
    }
  ],
  "targetResources": [
    "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
  ],
  "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
  "etag": "\"35d4af47524d3f0c\"",
  "severity": "LOW"
}

통계 상태 정보에 대해 자세히 알아보려면 이 페이지의 데이터 세트 수준 정책 통계 검토를 참조하세요.

다음 단계