使用 IAM 保護資源存取權
Kubernetes 使用者和服務帳戶需要管理 Config Connector 資源的權限。有了 Config Connector,專案的控制平面就能由使用 Kubernetes 角色型存取權控管 (RBAC) 的使用者管理。您也可以參考身分與存取權管理 (IAM) 政策。
可參照 IAMPolicy 和 IAMPolicyMember 的資源會列在資源參考資料中。這些資源具有「Can Be Referenced by IAMPolicy/IAMPolicyMember」屬性。
本主題說明如何使用 Identity and Access Management 保護 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
接著,請建立可建立 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 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 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 管理資源的命名空間。請執行以下指令,並在輸出內容中尋找您的電子郵件地址,確認政策已套用至 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 資源。