使用 IAM 保護資源存取權


Kubernetes 使用者和服務帳戶需要管理 Config Connector 資源的權限。有了 Config Connector,專案的控制平面就能由使用 Kubernetes 角色型存取權控管 (RBAC) 的使用者管理。您也可以參考身分與存取權管理 (IAM) 政策。

可參照 IAMPolicy 和 IAMPolicyMember 的資源會列在資源參考資料中。這些資源具有「Can Be Referenced by IAMPolicy/IAMPolicyMember」屬性。

本主題說明如何使用 Identity and Access Management 保護 Google Cloud 資源的存取權。

事前準備

在叢集上安裝 Config Connector

使用 RBAC 保護控制層存取權

在這個範例中,您將建立服務帳戶,並授予該帳戶管理 PubSubTopic 的權限。這個服務帳戶無法管理其他類型的 Config Connector 資源。

  1. 建立名為 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 管理資源的命名空間。

  2. 確認 pubsub-topic-service-account 無法建立 PubSubTopic 資源,方法是驗證下列指令的輸出內容是否包含 no

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. 接著,請建立可建立 Pub/Sub 主題的 ClusterRole

    ClusterRole 只能管理 rules.apiGroupsrules.resources 中指定值的資源。如要查看 apiGroupsresources 的值,請參閱資源的參考資料

    建立名為 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 管理資源的命名空間。

  4. 接著,請在 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
    
  5. pubsub-topic-editor-rolebinding.yaml 套用至叢集。

    kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE

    CC_NAMESPACE 替換為 Config Connector 管理資源的命名空間。

  6. 確認下列指令的輸出內容為 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 資源限制對該資源的存取權。

  1. 建立名為 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 管理資源的命名空間。

  2. 建立名為 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"
    
  3. 套用 iampolicymember.yaml

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    CC_NAMESPACE 替換為 Config Connector 管理資源的命名空間。

  4. 請執行以下指令,並在輸出內容中尋找您的電子郵件地址,確認政策已套用至 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 資源。