使用 IAM 保护对资源的访问
Kubernetes 用户和服务账号需要拥有管理 Config Connector 资源的权限。借助 Config Connector,项目的控制平面可以由使用 Kubernetes 基于角色的访问控制 (RBAC) 的身份管理。您还可以参考 Identity and Access Management (IAM) 政策。
资源参考文档中列出了可以引用 IAMPolicy 和 IAMPolicyMember 的资源。这些资源具有“可以由 IAMPolicy/IAMPolicyMember 引用”属性。
本主题介绍如何使用 Identity and Access Management 保护对 Google Cloud 资源的访问。
准备工作
要完成此页面上的步骤,首先在您的集群中安装 Config Connector。
使用 RBAC 保护控制平面访问
在本例中,您将创建一个服务账号并向其授予管理 PubSubTopic
的权限。该服务账号无法管理其他类型的 Config Connector 资源。
创建一个名为
pubsub-topic-service-account.yaml
的文件,其中包含以下内容:apiVersion: v1 kind: ServiceAccount metadata: name: pubsub-topic-service-account namespace: default
应用该文件来创建
pubsub-topic-service-account
服务账号:kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。通过验证以下命令的输出是否包含
no
,来确认pubsub-topic-service-account
无法创建PubSubTopic
资源:kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
接下来,创建一个允许创建 Pub/Sub 主题的
ClusterRole
。ClusterRole 只能管理在
rules.apiGroups
和rules.resources
中指定了值的资源。如需查找apiGroups
和resources
的值,请参阅您的资源的参考文档。创建一个名为
pubsub-topic-editor-role.yaml
的文件,其中包含以下内容:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: null name: pubsub-topic-editor rules: - apiGroups: - pubsub.cnrm.cloud.google.com resources: - pubsubtopics verbs: - get - list - watch - create - update - patch - delete
应用
pubsub-topic-editor.yaml
来创建ClusterRole
:kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。接下来,在 ClusterRole 和您的服务账号之间创建一个 RoleBinding。创建一个名为
pubsub-topic-editor-rolebinding.yaml
的文件,其中包含以下内容:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pubsub-topic-editor-rolebinding. subjects: - kind: ServiceAccount name: pubsub-topic-service-account roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pubsub-topic-editor
将
pubsub-topic-editor-rolebinding.yaml
应用到您的集群。kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。通过确认以下命令的输出为
yes
,来确认允许pubsub-topic-service-account
创建PubSubTopic
资源:kubectl auth can-i get pubsubtopics \ --as=system:serviceaccount:default:pubsub-topic-service-account
清理
使用 kubectl delete
移除服务账号、IAM 角色和角色绑定。
kubectl delete -f pubsub-topic-editor-rolebinding.yaml --namespace <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-editor-role.yaml --namespace <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-service-account.yaml --namespace <var>CC_NAMESPACE</var>
将 CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
使用 IAM 政策保护数据平面
在本例中,您将使用先前授予的权限来创建 PubSubTopic
,并使用 IAMPolicyMember
资源限制对它的访问。
创建一个名为
pubsub-topic-sample.yaml
的文件,其中包含以下内容:apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-sample
使用
kubectl
应用pubsub-topic-sample.yaml
:kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。创建一个名为
iampolicymember.yaml
的文件,其中包含以下内容,并将EMAIL_ADDRESS
替换为您的 Google Cloud 账号的电子邮件地址:apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: iampolicymember-sample spec: resourceRef: apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic name: pubsubtopic-sample role: roles/pubsub.admin member: "user:EMAIL_ADDRESS"
应用
iampolicymember.yaml
。kubectl apply -f iampolicymember.yaml --namespace CC_NAMESPACE
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。通过运行以下命令并在输出中查找您的电子邮件地址,将
PROJECT_ID
替换为您的项目 ID,来确认已在 Google Cloud 中应用该政策:gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample
现在可以使用 IAMPolicyMember
保护对 Pub/Sub 主题的访问。
清理
使用 kubectl delete
从 Google Cloud 项目中移除 Pub/Sub 主题和 IAMPolicyMember。
kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
后续步骤
使用 Secret 将信息安全地传递给 Google Cloud 资源。