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, las identidades que usan el control de acceso basado en roles (RBAC) de Kubernetes pueden administrar el plano de control de tu proyecto. 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 Identity and Access Management.
Antes de comenzar
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.
Crea un archivo llamado
pubsub-topic-service-account.yamlcon el siguiente contenido:apiVersion: v1 kind: ServiceAccount metadata: name: pubsub-topic-service-account namespace: defaultAplica esto para crear la cuenta de servicio
pubsub-topic-service-account:kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
Reemplaza
CC_NAMESPACEcon el espacio de nombres que administra Config Connector.Confirma que
pubsub-topic-service-accountno puedes crear recursosPubSubTopicverificando que la salida del siguiente comando contieneno:kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
A continuación, crea un
ClusterRoleque permita la creación de temas Pub/Sub.ClusterRole solo puede administrar recursos que tengan valores especificados en
rules.apiGroupsyrules.resources. Si deseas encontrar valores paraapiGroupsyresources, consulta la referencia de los recursos.Crea un archivo llamado
pubsub-topic-editor-role.yamlcon 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 - deleteAplica
pubsub-topic-editor.yamlpara crear elClusterRole:kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
Reemplaza
CC_NAMESPACEcon el espacio de nombres que administra Config Connector.A continuación, crea una función RoleBinding entre ClusterRole y la cuenta de servicio. Crea un archivo llamado
pubsub-topic-editor-rolebinding.yamlcon 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-editorAplica
pubsub-topic-editor-rolebinding.yamlal clúster.kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
Reemplaza
CC_NAMESPACEcon el espacio de nombres que administra Config Connector.Confirma que
pubsub-topic-service-accounttienes permiso para crear recursosPubSubTopicconfirmando que la salida del siguiente comando esyes:kubectl auth can-i get pubsubtopics \ --as=system:serviceaccount:default:pubsub-topic-service-account
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 CC_NAMESPACE
kubectl delete -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
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.
Crea un archivo llamado
pubsub-topic-sample.yamlcon el siguiente contenido:apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-sampleAplica
pubsub-topic-sample.yamlconkubectl:kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
Reemplaza
CC_NAMESPACEcon el espacio de nombres que administra Config Connector.Crea un archivo llamado
iampolicymember.yamlcon el siguiente contenido, reemplazaEMAIL_ADDRESSpor 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"Aplica
iampolicymember.yaml.kubectl apply -f iampolicymember.yaml --namespace CC_NAMESPACE
Reemplaza
CC_NAMESPACEcon el espacio de nombres que administra Config Connector.Confirma que la política se haya aplicado a Google Cloud . Para ello, ejecuta este comando y busca tu dirección de correo electrónico en el resultado. Reemplaza
PROJECT_IDpor el ID de tu 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.
Realiza una limpieza
Usa kubectl delete para quitar el tema de Pub/Sub y el IAMPolicyMember
de tu proyecto de Google Cloud .
kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
Prácticas recomendadas de seguridad para el aislamiento multiusuario
Para ayudar a evitar la elevación de privilegios no autorizada y aplicar el aislamiento de los usuarios, sigue estas prácticas recomendadas:
Aplica el modo de espacio de nombres: evita el modo de clúster en entornos multiusuario. En el modo de clúster, todos los espacios de nombres comparten una sola cuenta de servicio de IAM. Cualquier usuario que pueda crear recursos de Config Connector en cualquier espacio de nombres puede actuar con los permisos de IAM completos de esa cuenta de servicio.
Restringe el RBAC para los recursos de IAM: limita los permisos de creación y modificación de los recursos
IAMPolicy,IAMPartialPolicyyIAMPolicyMembercon el control de acceso basado en roles (RBAC) de Kubernetes. Si los desarrolladores tienen acceso de escritura amplio a estos recursos, pueden modificar las vinculaciones de IAM de Google Cloud .Limita el alcance de las vinculaciones de IAM para la federación de identidades para cargas de trabajo para GKE: configura estas vinculaciones de forma estricta para las ServiceAccounts de Kubernetes designadas en espacios de nombres específicos. En el modo con espacio de nombres, vincula cada cuenta de servicio de IAM solo a la ServiceAccount de Kubernetes de Config Connector para su espacio de nombres:
gcloud iam service-accounts add-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-CC_NAMESPACE]" \ --role="roles/iam.workloadIdentityUser"Reemplaza lo siguiente:
GSA_NAME: Es el nombre de la cuenta de servicio de IAM que Config Connector usa para el espacio de nombres.PROJECT_ID: Es el ID del proyecto que contiene tu clúster y la cuenta de servicio de IAM.CC_NAMESPACE: Es el espacio de nombres desde el que Config Connector administra los recursos.
No otorgues el rol
roles/iam.workloadIdentityUsera un conjunto de principales, como todos los Pods en el espacio de nombrescnrm-system. En el modo con espacio de nombres, los controladores de Config Connector para todos los espacios de nombres se ejecutan encnrm-system, por lo que este tipo de vinculación permite que el controlador de cada espacio de nombres actúe en nombre de la cuenta de servicio de IAM.
¿Qué sigue?
Usa Secrets para pasar información de forma segura a los recursos de Google Cloud .