本页介绍了如何查看、了解和应用针对 BigQuery 数据集的 IAM 角色建议。角色建议可确保主账号仅拥有其实际需要的权限,从而帮助您强制执行最小权限原则。
准备工作
- Enable the IAM and Recommender APIs. - Roles required to enable APIs - To enable APIs, you need the Service Usage Admin IAM role ( - roles/serviceusage.serviceUsageAdmin), which contains the- serviceusage.services.enablepermission. Learn how to grant roles.
- 确保您已在组织级或项目级激活 Security Command Center 的高级层级或 Enterprise 层级。如需了解详情,请参阅结算问题。 
- 了解角色建议。 
- 设置身份验证。 - Select the tab for how you plan to use the samples on this page: - gcloud- In the Google Cloud console, activate Cloud Shell. - At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize. - REST- 如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。 - 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI: - gcloud init- 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 - 如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。 - 所需 IAM 角色- 如需获得管理数据集级角色建议所需的权限,请让您的管理员为您授予以下 IAM 角色: - 
  
  
    
      项目的 Role Viewer  (roles/iam.roleViewer)
- 
  
  
    
      您项目的 IAM Recommender Admin  (roles/recommender.iamAdmin)
- 
  
  
    
      针对数据集的 BigQuery Data Owner  (roles/bigquery.dataOwner)
 - 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。 - 这些预定义角色包含管理数据集级角色建议所需的权限。如需查看所需的确切权限,请展开所需权限部分: - 所需权限- 您必须拥有以下权限才能管理数据集级角色建议: - 
                如需查看建议,请执行以下操作:
                - 
                      针对您的项目的 iam.roles.get权限
- 
                      针对您的项目的 iam.roles.list权限
- 
                      针对您的项目的 recommender.iamPolicyRecommendations.get权限
- 
                      针对您的项目的 recommender.iamPolicyRecommendations.list权限
- 
                      针对您的项目的 recommender.iamPolicyInsights.get权限
- 
                      针对您的项目的 recommender.iamPolicyInsights.list权限
- 
                      针对数据集的 bigquery.datasets.getIamPolicy权限
 
- 
                      针对您的项目的 
- 
                如需应用和拒绝建议,请执行以下操作:
                - 
                      针对您的项目的 recommender.iamPolicyRecommendations.update权限
- 
                      针对数据集的 bigquery.datasets.setIamPolicy权限
 
- 
                      针对您的项目的 
 - 查看和应用建议- 您可以使用 Google Cloud CLI 和 Recommender API 查看和应用数据集级角色建议。 - gcloud- 查看您的建议: - 如需列出数据集级建议,请运行 - gcloud recommender recommendations list命令,并过滤以仅显示 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"- 替换以下值: - LOCATION:Cloud Storage 数据集所在的区域,例如- us或- us-central1。
- PROJECT_ID:包含您的 BigQuery 数据集的 Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如- my-project。
 - 响应类似于以下示例。在此示例中,对项目 - my-project(- projectEditor:my-project) 拥有 Editor 角色的所有用户都对数据集- dataset-1拥有 BigQuery Data Editor 角色 (- roles/bigquery.dataEditor)。不过,此角色在过去 90 天内未使用过。因此,角色建议提议您撤消该角色:- [ { "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" ] } ] - 仔细查看每项建议,并思考它将如何改变主账号对 Google Cloud 资源的访问权限。如需了解如何使用 gcloud CLI 查看建议,请参阅本页面中的查看建议。 - 如需应用建议,请执行以下操作: - 使用 - gcloud recommender recommendations mark-claimed命令将建议的状态更改为- CLAIMED,,这样可以防止建议在您应用它时发生变化:- 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- 替换以下值: - 
  RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的name字段末尾。例如,如果name字段为projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为fb927dc1-9695-4436-0000-f0f285007c0f。
- 
  LOCATION:BigQuery 数据集所在的区域,例如us或us-central1。
- 
  PROJECT_ID:包含 BigQuery 数据集的 Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如my-project。
- 
  FORMAT:响应的格式。请使用json或yaml。
- 
  ETAG:建议中etag字段的值,例如"dd0686e7136a4cbb"。请注意,该值可以包含引号。
- 
  STATE_METADATA:可选。以英文逗号分隔的键值对,其中包含您对建议所选择的元数据。例如--state-metadata=reviewedBy=alice,priority=high。元数据会替换建议中的stateInfo.stateMetadata字段。
 - 如果命令成功,响应会显示建议处于 - CLAIMED状态,如下例所示。为清楚起见,示例省略了大部分字段:- ... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "CLAIMED" } ... 
- 
  
- 获取数据集的允许政策,然后修改并设置允许政策,以便反映建议。 
- 如果能够应用建议,请将建议的状态更新为 - SUCCEEDED;否则,请更新为- FAILED:- gcloud recommender recommendations COMMAND \ RECOMMENDATION_ID \ --location=LOCATION \ --recommender=google.iam.policy.Recommender \ --project=PROJECT_ID \ --format=FORMAT \ --etag=ETAG \ --state-metadata=STATE_METADATA- 替换以下值: - COMMAND:如果能够应用建议,请使用- mark-succeeded;否则,请使用- mark-failed。
- 
  RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的name字段末尾。例如,如果name字段为projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为fb927dc1-9695-4436-0000-f0f285007c0f。
- 
  LOCATION:BigQuery 数据集所在的区域,例如us或us-central1。
- 
  PROJECT_ID:包含 BigQuery 数据集的 Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如my-project。
- 
  FORMAT:响应的格式。请使用json或yaml。
- 
  ETAG:建议中etag字段的值,例如"dd0686e7136a4cbb"。请注意,该值可以包含引号。
- 
  STATE_METADATA:可选。以英文逗号分隔的键值对,其中包含您对建议所选择的元数据。例如--state-metadata=reviewedBy=alice,priority=high。元数据会替换建议中的stateInfo.stateMetadata字段。
 - 例如,如果您将建议标记为成功,响应会显示建议处于 - SUCCEEDED状态。为清楚起见,此示例省略了大部分字段:- ... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "SUCCEEDED" } ... 
 - REST- 查看您的建议: - 如需列出 BigQuery 数据集的所有可用建议,请使用 Recommender API 的 - recommendations.list方法。- 在使用任何请求数据之前,请先进行以下替换: - PROJECT_ID:包含 BigQuery 数据集的Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如- my-project。
- LOCATION:BigQuery 数据集所在的区域,例如- us或- us-central1。
- 
    PAGE_SIZE:可选。要从此请求返回的最大结果数。如果未指定,则服务器将决定要返回的结果数。如果建议的数量大于页面大小,则响应会包含用于检索下一页结果的分页令牌。
- 
    PAGE_TOKEN:可选。此方法之前的响应中返回的分页令牌。如果已指定,则建议列表将从上一个请求结束的位置开始。
- PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如- my-project。
 - HTTP 方法和网址: - 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 - 如需发送您的请求,请展开以下选项之一: - 响应类似于以下示例。在此示例中,项目“my-project”中具有 Editor 角色的所有用户 ( - projectEditor:my-project) 都对数据集- dataset-1具有 BigQuery Data Editor 角色 (- roles/bigquery.dataEditor)。 不过,此角色在过去 90 天内未使用过。因此,角色建议提议您撤消该角色:- { "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" ] } ] }- 仔细查看每项建议,并思考它将如何改变主账号对 Google Cloud 资源的访问权限。如需了解如何通过 REST API 查看建议,请参阅本页面上的查看建议。 - 如需应用建议,请执行以下操作: - 将建议标记为 - CLAIMED:- 如需将建议标记为 - CLAIMED,这样可以防止建议在您应用它时发生变化,请使用 Recommender API 的- recommendations.markClaimed方法。- 在使用任何请求数据之前,请先进行以下替换: - PROJECT_ID:包含 BigQuery 数据集的Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如- my-project。
- LOCATION:BigQuery 数据集所在的区域,例如- us或- us-central1。
- RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的- name字段末尾。例如,如果- name字段为- projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为- fb927dc1-9695-4436-0000-f0f285007c0f。
- ETAG:建议中- etag字段的值,例如- "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如- "\"df7308cca9719dcc\""。
- STATE_METADATA:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如- {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的- stateInfo.stateMetadata字段。
 - HTTP 方法和网址: - POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed - 请求 JSON 正文: - { "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }- 如需发送您的请求,请展开以下选项之一: - 响应会显示 - CLAIMED状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:- ... "stateInfo": { "state": "CLAIMED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
- 如果能够应用建议,请将建议的状态更新为 - SUCCEEDED;否则,请更新为- FAILED:- SUCCEEDED- 如需将建议标记为 - SUCCEEDED,表明您可以应用它,请使用 Recommender API 的- recommendations.markSucceeded方法。- 在使用任何请求数据之前,请先进行以下替换: - PROJECT_ID:包含 BigQuery 数据集的Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如- my-project。
- LOCATION:BigQuery 数据集所在的区域,例如- us或- us-central1。
- RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的- name字段末尾。例如,如果- name字段为- projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为- fb927dc1-9695-4436-0000-f0f285007c0f。
- ETAG:建议中- etag字段的值,例如- "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如- "\"df7308cca9719dcc\""。
- STATE_METADATA:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如- {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的- stateInfo.stateMetadata字段。
 - HTTP 方法和网址: - POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded - 请求 JSON 正文: - { "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }- 如需发送您的请求,请展开以下选项之一: - 响应会显示 - SUCCEEDED状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:- ... "stateInfo": { "state": "SUCCEEDED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...- FAILED- 如需将建议标记为 - FAILED,表明您无法应用它,请使用 Recommender API 的- recommendations.markFailed方法。- 在使用任何请求数据之前,请先进行以下替换: - PROJECT_ID:包含 BigQuery 数据集的Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如- my-project。
- LOCATION:BigQuery 数据集所在的区域,例如- us或- us-central1。
- RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的- name字段末尾。例如,如果- name字段为- projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为- fb927dc1-9695-4436-0000-f0f285007c0f。
- ETAG:建议中- etag字段的值,例如- "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如- "\"df7308cca9719dcc\""。
- STATE_METADATA:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如- {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的- stateInfo.stateMetadata字段。
 - HTTP 方法和网址: - POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed - 请求 JSON 正文: - { "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }- 如需发送您的请求,请展开以下选项之一: - 响应会显示 - FAILED状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:- ... "stateInfo": { "state": "FAILED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
 - 了解建议- 每条建议都包含可帮助您了解提出该建议原因的信息。 - 如需详细了解建议的各个字段,请参阅 - Recommendation参考文档。- 如要查看此建议基于的权限使用情况,请查看与建议相关的政策数据分析。这些数据分析在 - associatedInsights字段中列出。如需查看与建议相关的政策数据分析,请执行以下操作:- 复制关联的数据分析的 ID。该 ID 是 insight字段中insights/后面的所有内容。例如,如果insight字段显示projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb,则数据分析 ID 为7849add9-73c0-419e-b169-42b3671173fb。
- 按照说明使用您复制的数据分析 ID 来获取政策数据分析。
 - 后续步骤- 详细了解 Recommender。
- 了解如何使用针对 BigQuery 数据集的许可政策分析洞见。
 - 如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。 - 最后更新时间 (UTC):2025-10-19。 - 
  
  
    
      项目的 Role Viewer  (