Meninjau dan menerapkan 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 dibutuhkan.

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 cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk mengelola rekomendasi peran tingkat set data. Untuk melihat izin yang benar-benar diperlukan, luaskan 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 mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

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 mencantumkan rekomendasi tingkat set data, jalankan perintah gcloud recommender recommendations list, yang hanya memfilter rekomendasi set data BigQuery:

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) di set data dataset-1. Namun, peran ini belum digunakan dalam 90 hari terakhir. Akibatnya, rekomendasi peran menyarankan agar Anda mencabut peran:

[
  {
    "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 rekomendasi 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. Pasangan nilai kunci yang dipisahkan koma yang berisi metadata pilihan Anda tentang rekomendasi. Misalnya, --state-metadata=reviewedBy=alice,priority=high. Metadata menggantikan kolom stateInfo.stateMetadata dalam rekomendasi.

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

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET",
    "stateInfo": {
      "state": "CLAIMED"
    }
    ...
  2. Dapatkan kebijakan izin untuk set data, lalu ubah dan tetapkan kebijakan izin agar mencerminkan 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 rekomendasi 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. Pasangan nilai kunci yang dipisahkan koma yang berisi metadata pilihan Anda tentang rekomendasi. Misalnya, --state-metadata=reviewedBy=alice,priority=high. Metadata 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 diautentikasi dan menetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS.

Tinjau rekomendasi Anda:

Untuk mencantumkan 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 maksimum hasil 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 tempat permintaan sebelumnya berakhir.
  • 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 dengan peran Editor di project `my-project` (projectEditor:my-project) memiliki peran BigQuery Data Editor (roles/bigquery.dataEditor) di set data dataset-1. Namun, peran ini belum digunakan dalam 90 hari terakhir. Oleh karena itu, rekomendasi peran menyarankan agar Anda mencabut peran:

{
  "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 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 rekomendasi adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Gunakan backslash untuk meng-escape tanda kutip, misalnya, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opsional. Objek yang berisi key-value pair dengan metadata pilihan Anda tentang rekomendasi. Contoh, {"reviewedBy": "alice", "priority": "high"}. Metadata 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:

    Respons menampilkan rekomendasi dalam status CLAIMED, seperti yang ditunjukkan dalam contoh berikut. Agar lebih jelas, contoh ini menghilangkan sebagian besar kolom:

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

  2. Dapatkan kebijakan izin untuk project, lalu ubah kebijakan izin agar mencerminkan 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 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 rekomendasi adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Gunakan backslash untuk meng-escape tanda kutip, misalnya, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opsional. Objek yang berisi key-value pair dengan metadata pilihan Anda tentang rekomendasi. Contoh, {"reviewedBy": "alice", "priority": "high"}. Metadata 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:

    Respons menampilkan rekomendasi dalam status SUCCEEDED, seperti yang ditunjukkan dalam 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 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 rekomendasi adalah fb927dc1-9695-4436-0000-f0f285007c0f.
    • ETAG: Nilai kolom etag dalam rekomendasi, seperti "dd0686e7136a4cbb". Gunakan backslash untuk meng-escape tanda kutip, misalnya, "\"df7308cca9719dcc\"".
    • STATE_METADATA: Opsional. Objek yang berisi key-value pair dengan metadata pilihan Anda tentang rekomendasi. Contoh, {"reviewedBy": "alice", "priority": "high"}. Metadata 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:

    Respons menampilkan rekomendasi dalam status FAILED, seperti yang ditunjukkan dalam 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 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. 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 membaca projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, ID insight-nya adalah 7849add9-73c0-419e-b169-42b3671173fb.
  2. Ikuti petunjuk untuk mendapatkan insight kebijakan, menggunakan ID insight yang Anda salin.

Langkah selanjutnya