Proteger el acceso a los recursos con IAM


Los usuarios y las cuentas de servicio de Kubernetes necesitan permisos para gestionar recursos de Config Connector. Con Config Connector, el plano de control de tu proyecto se puede gestionar mediante identidades que usen el control de acceso basado en roles (RBAC) de Kubernetes. También puedes consultar las políticas de gestión de identidades y accesos (IAM).

Los recursos que pueden hacer referencia a IAMPolicy y IAMPolicyMember se indican en la referencia de recursos. Estos recursos tienen la propiedad "Can Be Referenced by IAMPolicy/IAMPolicyMember".

En este tema se explica cómo proteger el acceso a los Google Cloud recursos mediante Gestión de Identidades y Accesos.

Antes de empezar

Instala Config Connector en tu clúster.

Proteger el acceso al plano de control con RBAC

En este ejemplo, crearás una cuenta de servicio y le concederás permisos para gestionar un PubSubTopic. Esta cuenta de servicio no puede gestionar otros tipos de recursos de Config Connector.

  1. Crea un archivo llamado pubsub-topic-service-account.yaml con el siguiente contenido:

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

    Aplica este paso para crear la cuenta de servicio de pubsub-topic-service-account:

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

    Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

  2. Confirma que pubsub-topic-service-account no puede crear recursos de PubSubTopic verificando que el resultado del siguiente comando contiene no:

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. A continuación, crea un ClusterRole que permita crear temas de Pub/Sub.

    ClusterRole solo puede gestionar recursos que tengan valores especificados en rules.apiGroups y rules.resources. Para encontrar los valores de apiGroups y resources, consulta la referencia de tus recursos.

    Crea un archivo llamado pubsub-topic-editor-role.yaml con el siguiente contenido:

    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
    

    Aplica pubsub-topic-editor.yaml para crear el ClusterRole:

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

    Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

  4. A continuación, crea un RoleBinding entre el ClusterRole y tu cuenta de servicio. Crea un archivo llamado pubsub-topic-editor-rolebinding.yaml con el siguiente contenido:

    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. Aplica pubsub-topic-editor-rolebinding.yaml a tu clúster.

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

    Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

  6. Confirma que pubsub-topic-service-account tiene permiso para crear recursos de PubSubTopic comprobando que el resultado del siguiente comando es yes:

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

Eliminar los recursos utilizados

Usa kubectl delete para quitar la cuenta de servicio, el rol de gestión de identidades y accesos y RoleBinding.

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

Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

Proteger el plano de datos con políticas de gestión de identidades y accesos

En este ejemplo, usas los permisos concedidos anteriormente para crear un PubSubTopic y limitar el acceso a él con un recurso IAMPolicyMember.

  1. Crea un archivo llamado pubsub-topic-sample.yaml con el siguiente contenido:

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

    Aplica pubsub-topic-sample.yaml con kubectl:

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

    Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

  2. Crea un archivo llamado iampolicymember.yaml con el siguiente contenido y sustituye EMAIL_ADDRESS por la dirección de correo de tu Google Cloud cuenta:

    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. Aplica el iampolicymember.yaml.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    Sustituye CC_NAMESPACE por el espacio de nombres desde el que Config Connector gestiona los recursos.

  4. Confirma que la política se ha aplicado a Google Cloud ejecutando este comando y buscando tu dirección de correo en el resultado. Sustituye PROJECT_ID por el ID de tu proyecto:

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

Ahora, el acceso a tus temas de Pub/Sub está protegido con una IAMPolicyMember.

Eliminar los recursos utilizados

Usa kubectl delete para quitar el tema de Pub/Sub y el elemento IAMPolicyMember de tu Google Cloud proyecto.

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

Siguientes pasos

Usa Secretos para transferir información de forma segura a los Google Cloud recursos.