使用 IAM 保護資源存取權
Kubernetes 使用者和服務帳戶需要管理 Config Connector 資源的權限。有了「設定連接器」,專案的控制平面就能由使用 Kubernetes 角色型存取權控管 (RBAC) 的身分識別管理。您也可以參考身分與存取權管理 (IAM) 政策。
如要查看可參照 IAMPolicy 和 IAMPolicyMember 的資源,請參閱資源參考資料。這些資源具有「可由 IAMPolicy/IAMPolicyMember 參照」屬性。
本主題說明如何使用 Identity and Access Management,確保 Google Cloud 資源 Google Cloud 存取安全。
事前準備
使用 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 管理資源的命名空間。確認
pubsub-topic-service-account
無法建立PubSubTopic
資源,方法是驗證下列指令的輸出內容是否包含no
:kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
接著,建立
ClusterRole
,允許建立 Pub/Sub 主題。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 管理資源的命名空間。確認
pubsub-topic-service-account
是否可建立PubSubTopic
資源,方法是確認下列指令的輸出內容為yes
: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 CC_NAMESPACE
kubectl delete -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
將 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 CloudapiVersion: 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 管理資源的命名空間。執行下列指令,確認政策已套用至 Google Cloud ,並在輸出內容中尋找您的電子郵件地址,其中
PROJECT_ID
要改成您的專案 ID:gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample
現在,Pub/Sub 主題的存取權已受到 IAMPolicyMember
保護。
正在清除所用資源
使用 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
後續步驟
使用密鑰將資訊安全地傳遞至 Google Cloud 資源。