Protezione dell'accesso alle risorse con IAM


Gli utenti e gli account di servizio Kubernetes devono disporre delle autorizzazioni per gestire le risorse di Config Connector. Con Config Connector, il piano di controllo del progetto può essere gestito da identità che utilizzano il controllo degli accessi basato sui ruoli (RBAC) di Kubernetes. Puoi anche fare riferimento ai criteri IAM (Identity and Access Management).

Le risorse che possono fare riferimento a IAMPolicy e IAMPolicyMember sono elencate nel riferimento alle risorse. Queste risorse hanno la proprietà "Can Be Referenced by IAMPolicy/IAMPolicyMember".

Questo argomento spiega come proteggere l'accesso alle Google Cloud risorse utilizzando Identity and Access Management.

Prima di iniziare

Per completare i passaggi in questa pagina, installa Config Connector sul cluster.

Protezione dell'accesso al control plane con RBAC

In questo esempio, creerai un account di servizio e gli concederai le autorizzazioni per gestire un PubSubTopic. Questo account di servizio non può gestire altri tipi di risorse di Config Connector.

  1. Crea un file denominato pubsub-topic-service-account.yaml con il seguente contenuto:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pubsub-topic-service-account
      namespace: default
    

    Applica questa istruzione per creare l'account di servizio pubsub-topic-service-account:

    kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE

    Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

  2. Verifica che pubsub-topic-service-account non possa creare risorse PubSubTopic controllando che l'output del seguente comando contenga no:

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. Successivamente, crea un ClusterRole che consenta la creazione di argomenti Pub/Sub.

    ClusterRole può gestire solo le risorse con valori specificati in rules.apiGroups e rules.resources. Per trovare i valori di apiGroups e resources, consulta la documentazione di riferimento per le tue risorse.

    Crea un file denominato pubsub-topic-editor-role.yaml con i seguenti contenuti:

    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
    

    Applica pubsub-topic-editor.yaml per creare ClusterRole:

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

    Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

  4. Successivamente, crea un RoleBinding tra il ClusterRole e il tuo account di servizio. Crea un file denominato pubsub-topic-editor-rolebinding.yaml con il seguente contenuto:

    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. Applica pubsub-topic-editor-rolebinding.yaml al tuo cluster.

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

    Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

  6. Verifica che pubsub-topic-service-account sia autorizzato a creare risorse PubSubTopic controllando che l'output del seguente comando sia yes:

    kubectl auth can-i get pubsubtopics \
      --as=system:serviceaccount:default:pubsub-topic-service-account

Pulizia

Utilizza kubectl delete per rimuovere l'account di servizio, il ruolo IAM e la associazione di ruoli.

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>

Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

Protezione del piano dati con i criteri IAM

In questo esempio, utilizzi le autorizzazioni concesse in precedenza per creare un PubSubTopic e limitarne l'accesso con una risorsa IAMPolicyMember.

  1. Crea un file denominato pubsub-topic-sample.yaml con i seguenti contenuti:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
      name: pubsubtopic-sample
    

    Applica pubsub-topic-sample.yaml con kubectl:

    kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

    Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

  2. Crea un file denominato iampolicymember.yaml con i seguenti contenuti, sostituendo EMAIL_ADDRESS con l'indirizzo email del tuo Google Cloud account:

    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. Applica il iampolicymember.yaml.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    Sostituisci CC_NAMESPACE con lo spazio dei nomi da cui Config Connector gestisce le risorse.

  4. Verifica che il criterio sia stato applicato a Google Cloud eseguendo questo comando e cercando il tuo indirizzo email nell'output, sostituendo PROJECT_ID con il tuo ID progetto:

    gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample

L'accesso ai tuoi argomenti Pub/Sub è ora protetto con un IAMPolicyMember.

Pulizia

Utilizza kubectl delete per rimuovere l'argomento Pub/Sub e l'elemento IAMPolicyMember dal tuo Google Cloud progetto.

kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

Passaggi successivi

Utilizza i secret per trasmettere in sicurezza le informazioni alle risorse Google Cloud .