Asegura el acceso a los recursos con IAM


Los usuarios de Kubernetes y las cuentas de servicio necesitan permisos para administrar los recursos de Config Connector. Con Config Connector, el plano de control del proyecto se puede administrar mediante identidades que usa elControl de acceso basado en roles (RBAC) de Kubernetes. También puedes hacer referencia a las políticas de Identity and Access Management (IAM).

Los recursos que pueden hacer referencia a IAMPolicy y a IAMPolicyMember se enumeran en la referencia de recursos. Estos recursos tienen la propiedad “Puede ser referenciado por IAMPolicy/IAMPolicyMember”.

En este tema se explica cómo proteger el acceso a los recursos de Google Cloud con la administración de identidades y accesos.

Antes de comenzar

Para completar los pasos de esta página, primero instala Config Connector en tu clúster.

Asegura el acceso al plano de control con RBAC

En este ejemplo, creas una cuenta de servicio y le otorgas permisos para administrar un PubSubTopic. Esta cuenta de servicio no puede administrar 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 esto para crear la cuenta de servicio pubsub-topic-service-account:

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

    Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

  2. Confirma que pubsub-topic-service-account no puedes crear recursos PubSubTopic verificando que la salida 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 la creación de temas Pub/Sub.

    ClusterRole solo puede administrar recursos que tengan valores especificados en rules.apiGroups y rules.resources. Si deseas encontrar valores para apiGroups y resources, consulta la referencia de los recursos.

    Crea un archivo llamado pubsub-topic-editor-role.yaml con los siguientes contenidos:

    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

    Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

  4. A continuación, crea una función RoleBinding entre ClusterRole y la 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 al clúster.

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

    Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

  6. Confirma que pubsub-topic-service-account tienes permiso para crear recursos PubSubTopic confirmando que la salida del siguiente comando es yes:

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

Realice una limpieza

Usa kubectl delete para quitar la cuenta de servicio, la función de IAM y la Rolebinding.

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>

Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

Asegura el plano de datos con las políticas de IAM

En este ejemplo, usa los permisos otorgados antes 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

    Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

  2. Crea un archivo llamado iampolicymember.yaml con el siguiente contenido y reemplaza EMAIL_ADDRESS por la dirección de correo electrónico de tu cuenta de 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. Aplica iampolicymember.yaml.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    Reemplaza CC_NAMESPACE con el espacio de nombres que administra Config Connector.

  4. Para confirmar que la política se aplicó a Google Cloud, ejecuta este comando y busca tu dirección de correo electrónico en el resultado. Reemplaza PROJECT_ID por el ID del proyecto:

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

El acceso a los temas Pub/Sub ahora está protegido con un IAMPolicyMember.

Realice una limpieza

Usa kubectl delete para borrar el tema Pub/Sub y IAMPolicyMember de Google Cloud Project.

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

¿Qué sigue?

Usa Secrets para pasar información de manera segura a los recursos de Google Cloud.