10.3. 为服务帐户授予角色的示例

您可以像为常规用户帐户授予角色一样,为服务帐户授予角色。

  • 您可以修改当前项目的服务帐户。例如,将 view 角色添加到 top-secret 项目中的 robot 服务帐户:

    $ oc policy add-role-to-user view system:serviceaccount:top-secret:robot
    提示

    您还可以应用以下 YAML 来添加角色:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: view
      namespace: top-secret
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: view
    subjects:
    - kind: ServiceAccount
      name: robot
      namespace: top-secret
  • 您也可以向项目中的特定服务帐户授予访问权限。例如,在服务帐户所属的项目中,使用 -z 标志并指定 <service_account_name>

    $ oc policy add-role-to-user <role_name> -z <service_account_name>
    重要

    如果要向项目中的特定服务帐户授予访问权限,请使用 -z 标志。使用此标志有助于预防拼写错误,并确保只为指定的服务帐户授予访问权限。

    提示

    您还可以应用以下 YAML 来添加角色:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: <rolebinding_name>
      namespace: <current_project_name>
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: <role_name>
    subjects:
    - kind: ServiceAccount
      name: <service_account_name>
      namespace: <current_project_name>
  • 要修改不同的命名空间,可以使用 -n 选项指定它要应用到的项目命名空间,如下例所示。

    • 例如,允许所有项目中的所有服务帐户查看 my-project 项目中的资源:

      $ oc policy add-role-to-group view system:serviceaccounts -n my-project
      提示

      您还可以应用以下 YAML 来添加角色:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: view
        namespace: my-project
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: view
      subjects:
      - apiGroup: rbac.authorization.k8s.io
        kind: Group
        name: system:serviceaccounts
    • 允许 managers 项目中的所有服务帐户编辑 my-project 项目中的资源:

      $ oc policy add-role-to-group edit system:serviceaccounts:managers -n my-project
      提示

      您还可以应用以下 YAML 来添加角色:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: edit
        namespace: my-project
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: edit
      subjects:
      - apiGroup: rbac.authorization.k8s.io
        kind: Group
        name: system:serviceaccounts:managers