每个正文(用户或群组)都遵循以下两步流程来获取对 Management API 服务器和 Kubernetes 集群的访问权限:
管理 API 服务器访问权限:使用
ClusterRoleBinding
或RoleBinding
向管理 API 服务器中的某个正文授予权限,以访问预定义的ClusterRole
。Kubernetes 集群访问权限:授予命名空间专用访问权限或集群范围的访问权限。
对于特定于命名空间的访问权限:如需授予对集群中特定项目的命名空间的访问权限,请创建
ProjectRole
和相应的ProjectRoleBinding
。此过程会将 KubernetesRole
和RoleBinding
传播到集群中的 KubernetesNamespace
,该Namespace
对应于ProjectRole
和ProjectRoleBinding
所关联的Project
。对于集群级访问权限:如需授予对集群中所有命名空间的访问权限,请创建
OrganizationRole
和相应的OrganizationRoleBinding
。此过程会将 KubernetesClusterRole
和ClusterRoleBinding
传播到整个 Kubernetes 集群。
角色 (IO、PA、AO) 不是角色,而是映射到特定权限并分配给个别用户的用户角色集合。
组织 IAM 管理员和项目 IAM 管理员都可以创建更多项目角色和项目角色绑定,以授予其他项目专属权限。不过,组织 IAM 管理员可以为任何项目创建项目角色和项目角色绑定。另一方面,Project IAM Admin 只能为他们有权访问的项目创建项目角色和项目角色绑定。
设置角色绑定
您可以设置角色绑定,以便团队成员在组织级或项目级层访问资源。
如需获得设置角色绑定所需的权限,请让组织 IAM 管理员向您授予组织 IAM 管理员角色。
如需向已获授权的成员分配角色,请按以下步骤操作:
控制台
- 登录 GDC 控制台。
- 点击选择项目,以选择组织或项目。
- 如需为组织设置角色绑定,请选择一个组织。
- 如需为项目设置角色绑定,请选择一个项目。
- 在导航菜单中,依次点击身份和访问权限 > 访问权限。
- 点击添加成员。
- 在身份提供方列表中,选择一个身份提供方。
- 选择要添加单个用户还是群组。
- 在用户名或群组别名字段中,输入用户名、电子邮件地址或别名。
- 在角色列表中,选择要分配给用户或群组的角色,例如组织级组织查看者或项目级项目创建者。
- 点击添加。
相应成员会显示在授权成员列表中。
gdcloud
确保您已安装 gdcloud CLI。
使用
gdcloud auth login
命令登录,以通过身份提供方进行身份验证。如需了解详情,请参阅 gdcloud CLI 身份验证。设置角色绑定。
为组织设置角色绑定:
gdcloud organizations add-iam-policy-binding root \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE
执行以下变量替换操作:
USER_ACCOUNT
:您要向其授予角色的用户账号。此标志接受带有身份提供方前缀 (user:idpprefix-user@example.com
) 的用户电子邮件地址或带有服务账号项目 (serviceAccount:projectName:serviceAccountName
) 的服务账号名称。ROLE_TYPE
:您要为其设置角色绑定的ClusterRole
、Role
或OrganizationRole
。ROLE
:要分配给用户的预定义角色或自定义角色的名称(例如project-creator
)。
为项目设置角色绑定:
gdcloud projects add-iam-policy-binding PROJECT \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE
执行以下变量替换操作:
PROJECT
:您要为其设置角色绑定的项目的名称。USER_ACCOUNT
:您要向其授予角色的用户账号。此标志接受带有身份提供方前缀 (user:idpprefix-user@example.com
) 的用户电子邮件地址或带有服务账号项目 (serviceAccount:projectName:serviceAccountName
) 的服务账号名称。ROLE_TYPE
:您要为其设置角色绑定的Role
或ProjectRole
。ROLE
:要分配给用户的预定义角色或自定义角色的名称(例如project-viewer
)。
API
导出您使用的用户凭据:
export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
导出要为其分配角色的用户账号,包括身份提供方前缀(例如
idpprefix-paul@example.com
):export USERNAME=IDP_PREFIX-USER_EMAIL
导出用户需要的角色名称,例如
project-creator
。如需详细了解角色,请参阅角色定义。export ROLE_NAME=ROLE_NAME
将用户分配给
ClusterRole
、Role
、ProjectRole
或OrganizationRole
:将用户分配给
ClusterRole
:kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ clusterrolebinding ${USERNAME}-${ROLE_NAME}-binding \ --clusterrole=${ROLE_NAME} --user=${USERNAME}
如果
ClusterRole
需要RoleBinding
而不是ClusterRoleBinding
,请参阅角色定义,了解角色需要哪种绑定类型,然后在命名空间gpc-system
中创建 RoleBinding:kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ rolebinding ${USERNAME}-${ROLE_NAME}-binding \ --clusterrole=${ROLE_NAME} --user=${USERNAME} --namespace=gpc-system
将用户分配给
Role
:导出必须在其中创建绑定的命名空间:
export BINDING_NAMESPACE=BINDING_NAMESPACE
运行以下命令以创建
RoleBinding
:kubectl create --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ rolebinding ${USERNAME}-${ROLE_NAME}-binding \ --role=${ROLE_NAME} --user=${USERNAME} --namespace=${BINDING_NAMESPACE}
将用户分配给
ProjectRole
:创建
projectrolebinding.yaml
文件:apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectRoleBinding metadata: name: BINDING_NAME namespace: PROJECT_NAME spec: roleRef: apiGroup: resourcemanager.gdc.goog kind: ProjectRole name: ROLE_NAME subjects: - apiGroup: rbac.authorization.k8s.io kind: USER_KIND name: USERNAME
替换以下内容:
BINDING_NAME
:用户可自定义的绑定名称(例如user-project-creator-binding
)。PROJECT_NAME
:您要向其授予角色的项目的名称。ROLE_NAME
:您要分配给用户的ProjectRole
的名称。USER_KIND
:用户类型,可以是User
、Group
或ServiceAccount
。USERNAME
:您要为其分配角色的用户电子邮件地址,包括身份提供方前缀(例如idpprefix-paul@example.com
)。此值必须与导出的USERNAME
相匹配。
应用
projectrolebinding.yaml
文件:kubectl create -f projectrolebinding.yaml
将用户分配给
OrganizationRole
:创建
organizationrolebinding.yaml
文件:apiVersion: resourcemanager.gdc.goog/v1 kind: OrganizationRoleBinding metadata: name: BINDING_NAME namespace: gpc-system spec: roleRef: apiGroup: resourcemanager.gdc.goog kind: OrganizationRole name: ROLE_NAME subjects: - apiGroup: rbac.authorization.k8s.io kind: USER_KIND name: USERNAME
替换以下内容:
BINDING_NAME
:用户可自定义的绑定名称(例如user-organization-creator-binding
)。ROLE_NAME
:您要分配给用户的OrganizationRole
的名称。USER_KIND
:用户类型,可以是User
、Group
或ServiceAccount
。USERNAME
:您要为其分配角色的用户电子邮件地址,包括身份提供方前缀(例如idpprefix-paul@example.com
)。此值必须与导出的USERNAME
相匹配。
应用
organizationrolebinding.yaml
YAML 文件:kubectl create -f organizationrolebinding.yaml
移除角色绑定
如果不再需要访问权限,请移除相应成员及其关联的角色、权限和访问权限。
如需移除会员,请按以下步骤操作:
控制台
- 登录 GDC 控制台。
- 在导航菜单中,依次点击身份和访问权限 > 访问权限。
- 在授权的成员列表中,选择一个成员。
- 点击移除成员。
- 出现提示时,点击移除成员进行确认。
gdcloud
确保您已安装 gdcloud CLI。
使用
gdcloud auth login
命令登录,以通过身份提供方进行身份验证。如需了解详情,请参阅 gdcloud CLI 身份验证。移除角色绑定。
移除组织的角色绑定:
gdcloud organizations remove-iam-policy-binding root \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE
执行以下变量替换操作:
USER_ACCOUNT
:您要从中移除角色的用户账号。此标志接受带有身份提供方前缀 (user:idpprefix-user@example.com
) 的用户电子邮件地址或带有服务账号项目 (serviceAccount:projectName:serviceAccountName
) 的服务账号名称。ROLE_TYPE
:您要移除角色绑定的ClusterRole
、Role
或OrganizationRole
。ROLE
:您要从用户账号中移除的预定义角色或自定义角色的名称(例如project-creator
)。
移除项目的角色绑定:
gdcloud projects remove-iam-policy-binding PROJECT \ --member=USER_ACCOUNT \ --role=ROLE_TYPE/ROLE
执行以下变量替换操作:
PROJECT
:您要从中移除角色绑定的项目的名称。USER_ACCOUNT
:您要从中移除角色的用户账号。此标志接受带有身份提供方前缀 (user:idpprefix-user@example.com
) 的用户电子邮件地址或带有服务账号项目 (serviceAccount:projectName:serviceAccountName
) 的服务账号名称。ROLE_TYPE
:您要移除角色绑定的Role
或ProjectRole
。ROLE
:您要从用户账号中移除的预定义角色或自定义角色的名称(例如project-viewer
)。
API
导出您使用的用户凭据:
export YOUR_IAM_ADMIN_KUBECONFIG=YOUR_IAM_ADMIN_KUBECONFIG
导出要移除角色的用户账号,包括身份提供方前缀(例如
idpprefix-paul@example.com
):export USERNAME=IDP_PREFIX-USER_EMAIL
导出要移除绑定的命名空间:
export BINDING_NAMESPACE=BINDING_NAMESPACE
删除
ClusterRoleBinding
、RoleBinding
、ProjectRoleBinding
或OrganizationRoleBinding
可撤消授予用户账号的权限:从用户账号中移除
ClusterRoleBinding
:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete clusterrolebinding ${USERNAME}-pa
从用户账号中移除
RoleBinding
:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete rolebinding ${USERNAME}-pa \ --namespace=${BINDING_NAMESPACE}
从用户账号中移除
ProjectRoleBinding
:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete projectrolebinding ${USERNAME}-pa \ --namespace=${BINDING_NAMESPACE}
从用户账号中移除
OrganizationRoleBinding
:kubectl --kubeconfig ${YOUR_IAM_ADMIN_KUBECONFIG} \ delete organizationrolebinding ${USERNAME}-pa \ --namespace=gpc-system
撤消用户访问权限
如果某位成员离开您的组织或团队,您可以撤消其对 Google Distributed Cloud (GDC) 气隙设备的访问权限。撤消用户的访问权限会将其从 GDC 气隙式设备中退出,并移除其角色和权限。您还可以列出用户从开始时间到结束时间的活动和会话。
如需撤消用户的访问权限,请执行以下操作:
获取撤消用户所需的权限。请让您的组织 IAM 管理员为您授予 Org Session Admin (
org-session-admin
) 角色。撤消用户的访问权限:
gdcloud admin auth revoke --accounts USER_EMAIL
将 USER_EMAIL 替换为要撤消访问权限的用户的电子邮件地址。
运行该命令后,您会看到类似于以下内容的输出。以下示例撤消了用户
ariel@example.com
的访问权限:Success: NUMBER of sessions revoked for user ariel@example.com
在此示例中,变量 NUMBER 指的是用户拥有的有效会话数。
再次运行
gdcloud admin auth revoke
命令,确认您已撤消用户的访问权限。如果成功,您会看到以下内容:No sessions found for account: ariel@example.com
列出所有被撤消的用户
如需查看所有被撤消访问权限的用户及其活动和会话,请执行以下操作:
列出所有被撤消用户的开始时间和结束时间:
gdcloud admin auth list --format="csv(ACCOUNT, IDENTITY_PROVIDER, CREATION_TIME, EXPIRATION_TIME)"
如果成功,您会看到类似于以下内容的输出:
account,identity_provider,creation_time,expiration_time ariel@example.com,example-idp,2023-02-15 22:10:52,2023-02-15 23:10:52