Tinjau dan terapkan rekomendasi peran untuk set data BigQuery

Halaman ini menjelaskan cara melihat, memahami, dan menerapkan rekomendasi peran IAM untuk set data BigQuery. Rekomendasi peran membantu Anda menerapkan prinsip hak istimewa terendah dengan memastikan bahwa akun utama hanya memiliki izin yang benar-benar diperlukan.

Sebelum memulai

Peran IAM yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna mengelola rekomendasi peran tingkat set data, minta administrator untuk memberi Anda peran IAM berikut:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Peran bawaan ini berisi izin yang diperlukan untuk mengelola rekomendasi peran tingkat set data. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengelola rekomendasi peran tingkat set data:

  • Untuk melihat rekomendasi:
    • iam.roles.get di project Anda
    • iam.roles.list di project Anda
    • recommender.iamPolicyRecommendations.get di project Anda
    • recommender.iamPolicyRecommendations.list di project Anda
    • recommender.iamPolicyInsights.get di project Anda
    • recommender.iamPolicyInsights.list di project Anda
    • bigquery.datasets.getIamPolicy di set data Anda
  • Untuk menerapkan dan menolak rekomendasi:
    • recommender.iamPolicyRecommendations.update di project Anda
    • bigquery.datasets.setIamPolicy di set data Anda

Anda mung juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaanlainnya.

Meninjau dan menerapkan rekomendasi

Anda dapat meninjau dan menerapkan rekomendasi peran tingkat set data dengan Google Cloud CLI dan Recommender API.

gcloud

Tinjau rekomendasi Anda:

Untuk menampilkan daftar rekomendasi tingkat set data, jalankan perintah gcloud recommender recommendations list, dengan memfilter rekomendasi set data BigQuery saja:

gcloud recommender recommendations list \
    --location=LOCATION \
    --recommender=google.iam.policy.Recommender \
    --project=PROJECT_ID \
    --format=json \
    --filter="recommenderSubtype:REMOVE_ROLE_BIGQUERY_DATASET OR recommenderSubtype:REPLACE_ROLE_BIGQUERY_DATASET"

Ganti nilai berikut:

  • LOCATION: Region tempat set data Cloud Storage Anda berada—misalnya, us atau us-central1.
  • PROJECT_ID: ID project Google Cloud yang berisi set data BigQuery Anda. Project ID adalah string alfanumerik, seperti my-project.

Responsnya mirip dengan contoh berikut. Dalam contoh ini, semua pengguna dengan peran Editor di project my-project (projectEditor:my-project) memiliki peran BigQuery Data Editor (roles/bigquery.dataEditor) pada set data dataset-1. Namun, peran ini belum digunakan dalam 90 hari terakhir. Akibatnya, rekomendasi peran menyarankan agar Anda mencabut peran tersebut:

[
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "projectEditor:my-project",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataEditor",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"3b123bc08d028128\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 37
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  },
  {
    "associatedInsights": [
      {
        "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/9d11057e-9c71-410f-ad55-fc82d87761d0"
      }
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "user:alicexz@google.com",
                "/iamPolicy/bindings/*/role": "roles/bigquery.dataOwner"
              },
              "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
              "resourceType": "bigquery.googleapis.com/Dataset"
            }
          ]
        }
      ],
      "overview": {
        "addedRoles": [],
        "member": "user:alicexz@google.com",
        "minimumObservationPeriodInDays": "0",
        "removedRole": "roles/bigquery.dataOwner",
        "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      }
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"1da285f7aa6438f1\"",
    "lastRefreshTime": "2024-02-04T08:00:00Z",
    "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/56013294-cf81-402a-8cde-25489545777c",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 64
        }
      }
    },
    "priority": "P4",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "ACTIVE"
    },
    "targetResources": [
      "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
    ]
  }
]

Tinjau setiap rekomendasi dengan cermat, dan pertimbangkan bagaimana rekomendasi tersebut akan mengubah akses akun utama ke resource Google Cloud. Untuk mempelajari cara meninjau rekomendasi dari gcloud CLI, lihat Meninjau rekomendasi di halaman ini.

Untuk menerapkan rekomendasi:

  1. Gunakan perintah gcloud recommender recommendations mark-claimed untuk mengubah status rekomendasi menjadi CLAIMED, yang mencegah rekomendasi berubah saat Anda menerapkannya:

    gcloud recommender recommendations mark-claimed \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Ganti nilai berikut:

    • RECOMMENDATION_ID: ID unik untuk rekomendasi. Nilai ini muncul di akhir kolom name dalam rekomendasi. Misalnya, jika kolom name adalah projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, ID rekomendasinya adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: Region tempat set data BigQuery Anda berada—misalnya, us atau us-central1.
    • PROJECT_ID: ID project Google Cloud yang berisi set data BigQuery Anda. Project ID adalah string alfanumerik, seperti my-project.
    • FORMAT: Format respons. Gunakan json atau yaml.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Perhatikan bahwa nilai ini dapat menyertakan tanda kutip.
    • STATE_METADATA: Opsional. Key-value pair yang dipisahkan koma yang berisi pilihan metadata Anda tentang rekomendasi. Misalnya, --state-metadata=reviewedBy=alice,priority=high. Metadata tersebut menggantikan kolom stateInfo.stateMetadata dalam rekomendasi.

    Jika perintah berhasil, respons akan menampilkan rekomendasi dalam status CLAIMED, seperti yang ditunjukkan pada contoh berikut. Agar lebih jelas, contoh ini menghapus sebagian besar kolom:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "CLAIMED"
    }
    ...
  2. Dapatkan kebijakan izinkan untuk set data, lalu ubah dan tetapkan kebijakan izin agar sesuai dengan rekomendasi.

  3. Perbarui status rekomendasi menjadi SUCCEEDED, jika Anda dapat menerapkan rekomendasi, atau FAILED, jika Anda tidak dapat menerapkan rekomendasi:

    gcloud recommender recommendations COMMAND \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    Ganti nilai berikut:

    • COMMAND: Gunakan mark-succeeded jika Anda dapat menerapkan rekomendasi, atau mark-failed jika Anda tidak dapat menerapkan rekomendasi.
    • RECOMMENDATION_ID: ID unik untuk rekomendasi. Nilai ini muncul di akhir kolom name dalam rekomendasi. Misalnya, jika kolom name adalah projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, ID rekomendasinya adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • LOCATION: Region tempat set data BigQuery Anda berada—misalnya, us atau us-central1.
    • PROJECT_ID: ID project Google Cloud yang berisi set data BigQuery Anda. Project ID adalah string alfanumerik, seperti my-project.
    • FORMAT: Format respons. Gunakan json atau yaml.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Perhatikan bahwa nilai ini dapat menyertakan tanda kutip.
    • STATE_METADATA: Opsional. Key-value pair yang dipisahkan koma yang berisi pilihan metadata Anda tentang rekomendasi. Misalnya, --state-metadata=reviewedBy=alice,priority=high. Metadata tersebut menggantikan kolom stateInfo.stateMetadata dalam rekomendasi.

    Misalnya, jika Anda menandai rekomendasi sebagai berhasil, respons akan menampilkan rekomendasi dalam status SUCCEEDED. Agar lebih jelas, contoh ini menghilangkan sebagian besar kolom:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "SUCCEEDED"
    }
    ...

REST

Petunjuk ini mengasumsikan bahwa Anda telah mengautentikasi dan menetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS.

Tinjau rekomendasi Anda:

Untuk menampilkan semua rekomendasi yang tersedia untuk set data BigQuery Anda, gunakan metode recommendations.list Recommender API.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID project Google Cloud yang berisi set data BigQuery Anda. Project ID adalah string alfanumerik, seperti my-project.
  • LOCATION: Region tempat set data BigQuery Anda berada—misalnya, us atau us-central1.
  • PAGE_SIZE: Opsional. Jumlah hasil maksimum yang akan ditampilkan dari permintaan ini. Jika tidak ditentukan, server akan menentukan jumlah hasil yang akan ditampilkan. Jika jumlah rekomendasi lebih besar dari ukuran halaman, respons akan berisi token penomoran halaman yang dapat Anda gunakan untuk mengambil halaman hasil berikutnya.
  • PAGE_TOKEN: Opsional. Token penomoran halaman yang ditampilkan dalam respons sebelumnya dari metode ini. Jika ditentukan, daftar rekomendasi akan dimulai dari akhir permintaan sebelumnya.
  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations?filter=recommenderSubtype%20%3D%20REMOVE_ROLE_BIGQUERY_DATASET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_BIGQUERY_DATASET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Responsnya mirip dengan contoh berikut. Dalam contoh ini, semua pengguna yang memiliki peran Editor di project `my-project` (projectEditor:my-project) memiliki peran BigQuery Data Editor (roles/bigquery.dataEditor) pada set data dataset-1. Namun, peran ini belum digunakan dalam 90 hari terakhir. Akibatnya, rekomendasi peran menyarankan agar Anda mencabut peran tersebut:

{
  "recommendations": [
    {
      "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288",
      "description": "This role has not been used during the observation window.",
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "primaryImpact": {
        "category": "SECURITY",
        "securityProjection": {
          "details": {
            "revokedIamPermissionsCount": 37
          }
        }
      },
      "content": {
        "operationGroups": [
          {
            "operations": [
              {
                "action": "remove",
                "resourceType": "bigquery.googleapis.com/Dataset",
                "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
                "path": "/iamPolicy/bindings/*/members/*",
                "pathFilters": {
                  "/iamPolicy/bindings/*/condition/expression": "",
                  "/iamPolicy/bindings/*/members/*": "projectEditor:my-project",
                  "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor"
                }
              }
            ]
          }
        ],
        "overview": {
          "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1",
          "member": "projectEditor:my-project",
          "removedRole": "roles/bigquery.dataEditor",
          "addedRoles": [],
          "minimumObservationPeriodInDays": "0"
        }
      },
      "stateInfo": {
        "state": "ACTIVE"
      },
      "etag": "\"d008ad3780bad5e0\"",
      "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
      "associatedInsights": [
        {
          "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282"
        }
      ],
      "priority": "P4",
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      ]
    }
  ]
}

Tinjau setiap rekomendasi dengan cermat, dan pertimbangkan bagaimana rekomendasi tersebut akan mengubah akses akun utama ke resource Google Cloud. Untuk mempelajari cara meninjau rekomendasi dari REST API, lihat Meninjau rekomendasi di halaman ini.

Untuk menerapkan rekomendasi:

  1. Tandai rekomendasi sebagai CLAIMED:

    Untuk menandai rekomendasi sebagai CLAIMED, yang mencegah rekomendasi berubah saat Anda menerapkannya, gunakan metode recommendations.markClaimed dari Recommender API.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud yang berisi set data BigQuery Anda. Project ID adalah string alfanumerik, seperti my-project.
    • LOCATION: Region tempat set data BigQuery Anda berada—misalnya, us atau us-central1.
    • RECOMMENDATION_ID: ID unik untuk rekomendasi. Nilai ini muncul di akhir kolom name dalam rekomendasi. Misalnya, jika kolom name adalah projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, ID rekomendasinya adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Gunakan garis miring terbalik untuk menghindari tanda kutip, misalnya, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opsional. Objek yang berisi key-value pair dengan pilihan metadata Anda terkait rekomendasi. Misalnya, {"reviewedBy": "alice", "priority": "high"}. Metadata ini menggantikan kolom stateInfo.stateMetadata dalam rekomendasi.

    Metode HTTP dan URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed

    Meminta isi JSON:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Responsnya menunjukkan rekomendasi dalam status CLAIMED, seperti ditunjukkan pada contoh berikut. Agar lebih jelas, contoh ini menghilangkan sebagian besar kolom:

    ...
    "stateInfo": {
      "state": "CLAIMED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

  2. Mendapatkan kebijakan izinkan untuk project, lalu ubah kebijakan izin agar sesuai dengan rekomendasi.

  3. Perbarui status rekomendasi menjadi SUCCEEDED, jika Anda dapat menerapkan rekomendasi, atau FAILED, jika Anda tidak dapat menerapkan rekomendasi:

    SUCCEEDED

    Untuk menandai rekomendasi sebagai SUCCEEDED, yang menunjukkan bahwa Anda dapat menerapkannya, gunakan metode recommendations.markSucceeded dari Recommender API.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud yang berisi set data BigQuery Anda. Project ID adalah string alfanumerik, seperti my-project.
    • LOCATION: Region tempat set data BigQuery Anda berada—misalnya, us atau us-central1.
    • RECOMMENDATION_ID: ID unik untuk rekomendasi. Nilai ini muncul di akhir kolom name dalam rekomendasi. Misalnya, jika kolom name adalah projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, ID rekomendasinya adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Gunakan garis miring terbalik untuk menghindari tanda kutip, misalnya, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opsional. Objek yang berisi key-value pair dengan pilihan metadata Anda terkait rekomendasi. Misalnya, {"reviewedBy": "alice", "priority": "high"}. Metadata ini menggantikan kolom stateInfo.stateMetadata dalam rekomendasi.

    Metode HTTP dan URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded

    Meminta isi JSON:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Responsnya menunjukkan rekomendasi dalam status SUCCEEDED, seperti ditunjukkan pada contoh berikut. Agar lebih jelas, contoh ini menghilangkan sebagian besar kolom:

    ...
    "stateInfo": {
      "state": "SUCCEEDED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

    FAILED

    Untuk menandai rekomendasi sebagai FAILED, yang menunjukkan bahwa Anda tidak dapat menerapkannya, gunakan metode recommendations.markFailed dari Recommender API.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud yang berisi set data BigQuery Anda. Project ID adalah string alfanumerik, seperti my-project.
    • LOCATION: Region tempat set data BigQuery Anda berada—misalnya, us atau us-central1.
    • RECOMMENDATION_ID: ID unik untuk rekomendasi. Nilai ini muncul di akhir kolom name dalam rekomendasi. Misalnya, jika kolom name adalah projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, ID rekomendasinya adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Gunakan garis miring terbalik untuk menghindari tanda kutip, misalnya, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opsional. Objek yang berisi key-value pair dengan pilihan metadata Anda terkait rekomendasi. Misalnya, {"reviewedBy": "alice", "priority": "high"}. Metadata ini menggantikan kolom stateInfo.stateMetadata dalam rekomendasi.

    Metode HTTP dan URL:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed

    Meminta isi JSON:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Responsnya menunjukkan rekomendasi dalam status FAILED, seperti ditunjukkan pada contoh berikut. Agar lebih jelas, contoh ini menghilangkan sebagian besar kolom:

    ...
    "stateInfo": {
      "state": "FAILED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    ...
    

Memahami rekomendasi

Setiap rekomendasi menyertakan informasi untuk membantu Anda memahami alasan rekomendasi tersebut dibuat.

Untuk mengetahui detail tentang kolom rekomendasi, lihat referensi Recommendation.

Untuk melihat penggunaan izin yang menjadi dasar rekomendasi ini, lihat insight kebijakan yang terkait dengan rekomendasi tersebut. Insight ini tercantum di kolom associatedInsights. Untuk melihat insight kebijakan yang terkait dengan rekomendasi, lakukan tindakan berikut:

  1. Salin ID insight terkait. ID adalah semuanya setelah insights/ di kolom insight. Misalnya, jika kolom insight bertuliskan projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, ID insight adalah 7849add9-73c0-419e-b169-42b3671173fb.
  2. Ikuti petunjuk untuk mendapatkan insight kebijakan, menggunakan ID insight yang Anda salin.

Langkah selanjutnya