如何在GCP中为除单个子文件夹外的所有子文件夹分配组织策略及角色
解决GCP中两项权限/策略分配排除指定子文件夹的需求
一、组织策略分配排除指定子文件夹
GCP组织策略支持通过父层级规则例外或子层级覆盖两种方式,实现排除指定子文件夹的需求:
方案1:父层级策略添加排除规则
直接在父文件夹的组织策略中配置例外,无需在子文件夹单独操作:
- 创建策略配置文件(如
org-policy-config.yaml),替换占位符为实际ID:
constraint: constraints/compute.disableSerialPortAccess # 替换为目标约束ID listPolicy: allValues: ALLOW # 根据约束需求设置ALLOW/DENY exclusions: - values: - folders/[EXCLUDED_FOLDER_ID] # 替换为需排除的子文件夹ID
- 执行命令将策略应用到父文件夹:
gcloud resource-manager org-policies set-policy org-policy-config.yaml --folder=[PARENT_FOLDER_ID]
方案2:子文件夹覆盖父层级策略
如果父层级已应用策略,直接在目标子文件夹设置反向规则:
# 示例:关闭排除文件夹的"禁用串口访问"约束,覆盖父层级配置 gcloud resource-manager org-policies disable-enforce constraints/compute.disableSerialPortAccess --folder=[EXCLUDED_FOLDER_ID]
二、IAM角色分配排除指定子文件夹
可通过条件绑定或子层级拒绝权限两种方式实现需求:
方案1:父层级条件绑定角色
在父文件夹绑定角色时添加条件,限制角色仅应用于除指定子文件夹外的资源:
gcloud resource-manager folders add-iam-policy-binding [PARENT_FOLDER_ID] \ --member=user:your-user@domain.com \ # 替换为目标成员(用户/服务账号等) --role=roles/compute.viewer \ # 替换为目标角色ID --condition="expression=resource.name != 'folders/[EXCLUDED_FOLDER_ID]',title=exclude_target_folder,description=Assign role to all subfolders except the specified one"
说明:条件仅对继承父文件夹权限的子资源生效,子文件夹直接添加的权限不受影响。
方案2:子层级添加拒绝权限
先在父文件夹分配角色,再在排除的子文件夹添加拒绝规则:
- 父文件夹分配角色:
gcloud resource-manager folders add-iam-policy-binding [PARENT_FOLDER_ID] \ --member=user:your-user@domain.com \ --role=roles/compute.viewer
- 排除文件夹添加拒绝规则:
gcloud resource-manager folders add-iam-policy-binding [EXCLUDED_FOLDER_ID] \ --member=user:your-user@domain.com \ --role=roles/compute.viewer \ --deny
说明:拒绝权限优先级高于允许权限,该成员在排除文件夹中将无法使用目标角色的权限。
内容的提问来源于stack exchange,提问作者ciao_bella
相关产品推荐
相关产品推荐

