Protezione dell'accesso alle risorse con IAM

Gli utenti e gli account di servizio Kubernetes devono avere le autorizzazioni per gestire le risorse Config Connector. Con Config Connector, il piano di controllo del progetto può essere gestito da identità che utilizzano il controllo dell'accesso basato sui ruoli di Kubernetes. Puoi anche fare riferimento ai criteri di gestione di identità e accessi (IAM).

Le risorse che possono fare riferimento a IAMPolicy e IAMPolicyMember sono elencate nella sezione Resource reference. La proprietà di queste risorse può essere utilizzata come "IAMPolicy/IAMPolicyMember".

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

Prima di iniziare

Per completare i passaggi descritti in questa pagina, devi prima installare Config Connector nel cluster.

Protezione dell'accesso al piano di controllo con RBAC

In questo esempio, creerai un account di servizio e 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 questo passaggio 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 Config Connector per gestire le risorse.

  2. Conferma che pubsub-topic-service-account non può creare PubSubTopicrisorse verificando l'output del seguente comando contiene no:

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

    ClusterRole può gestire solo le risorse i cui valori sono specificati in rules.apiGroups e rules.resources. Per trovare i valori di apiGroups e resources, consulta il riferimento per le risorse.

    Crea un file denominato pubsub-topic-editor-role.yaml con il seguente contenuto:

    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 il ClusterRole:

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

    Sostituisci CC_NAMESPACE con lo spazio dei nomi Config Connector per gestire le risorse.

  4. Quindi, crea un RoleBinding tra il ClusterRole e l'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 Config Connector per gestire le risorse.

  6. Conferma che l'app pubsub-topic-service-account sia autorizzata a creare risorse PubSubTopic confermando che l'output del seguente comando è 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 l'associazione dei 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 Config Connector per gestire le risorse.

Protezione del piano dati con i criteri IAM

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

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

    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 Config Connector per gestire le risorse.

  2. Crea un file denominato iampolicymember.yaml con il seguente contenuto, sostituendo EMAIL_ADDRESS con l'indirizzo email del tuo account 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. Applica l'iampolicymember.yaml.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    Sostituisci CC_NAMESPACE con lo spazio dei nomi Config Connector per gestire le risorse.

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

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

Ora l'accesso ai tuoi argomenti Pub/Sub è protetto con un IAMPolicyMember.

Pulizia

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

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 modo sicuro le informazioni alle risorse Google Cloud.