View a markdown version of this page

Uso de agentes de Amazon Bedrock para automatizar la creación de controles de entrada de acceso en Amazon EKS mediante peticiones basadas en texto - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de agentes de Amazon Bedrock para automatizar la creación de controles de entrada de acceso en Amazon EKS mediante peticiones basadas en texto

Keshav Ganesh y Sudhanshu Saurav, Amazon Web Services

Resumen

Las organizaciones se enfrentan a desafíos al administrar los controles de acceso y el aprovisionamiento de recursos cuando varios equipos necesitan trabajar con un clúster compartido de Amazon Elastic Kubernetes Service (Amazon EKS). Un servicio de Kubernetes administrado, como Amazon EKS, ha simplificado las operaciones de los clústeres. Sin embargo, la sobrecarga administrativa que supone administrar el acceso de los equipos y los permisos de los recursos sigue siendo compleja y es tardada.

Este patrón muestra cómo los agentes de Amazon Bedrock pueden serle útiles para automatizar la administración del acceso a los clústeres de Amazon EKS. Esta automatización permite a los equipos de desarrollo centrarse en el desarrollo de sus aplicaciones principales en lugar de centrarse en la configuración y la administración del control de acceso. Puede personalizar un agente de Amazon Bedrock para que realice acciones para una amplia variedad de tareas mediante instrucciones sencillas en lenguaje natural.

Al utilizar AWS Lambda funciones como grupos de acción, un agente de Amazon Bedrock puede gestionar tareas como la creación de entradas de acceso de usuarios y la gestión de las políticas de acceso. Además, un agente de Amazon Bedrock puede configurar asociaciones de identidad de pods que permiten el acceso a los recursos AWS Identity and Access Management (IAM) para los pods que se ejecutan en el clúster. Con esta solución, las organizaciones pueden optimizar la administración de sus clústeres de Amazon EKS con instrucciones sencillas basadas en texto, reducir la sobrecarga manual y mejorar la eficiencia general del desarrollo.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Es posible que se necesiten entrenamiento y documentación para garantizar una adopción fluida y un uso efectivo de estas técnicas. El uso de Amazon Bedrock, Amazon EKS, Lambda, OpenSearch Amazon Service y OpenAPI implica una curva de aprendizaje importante para los desarrolladores y los equipos. DevOps

  • Algunas Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte AWS services by Region. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.

Arquitectura

En el siguiente diagrama se muestran los componentes de la arquitectura y el flujo de trabajo de esta aplicación.

Flujo de trabajo y componentes para crear controles de acceso en Amazon EKS con los agentes de Amazon Bedrock.

Esta solución realiza los pasos que se indican a continuación:

  1. El usuario interactúa con el agente de Amazon Bedrock, ya que envía una petición o consulta que sirve de entrada para que el agente la procese y tome medidas.

  2. Según la petición, el agente de Amazon Bedrock comprueba el esquema de OpenAPI para identificar la API correcta a la que dirigirse. Si el agente de Amazon Bedrock encuentra la llamada a la API correcta, la solicitud se dirige al grupo de acciones asociado a la función de Lambda que implementa estas acciones.

  3. Si no encuentra una API relevante, el agente de Amazon Bedrock consulta la OpenSearch colección. La OpenSearch colección utiliza contenido indexado de la base de conocimientos que proviene del depósito de Amazon S3 que contiene la Guía del usuario de Amazon EKS.

  4. La OpenSearch colección devuelve la información contextual relevante al agente de Amazon Bedrock.

  5. En el caso de las solicitudes prácticas (aquellas que coinciden con una operación de API), el agente de Amazon Bedrock se ejecuta en una nube privada virtual (VPC) y activa la función de Lambda.

  6. La función de Lambda realiza una acción que se basa en la entrada del usuario dentro del clúster de Amazon EKS.

  7. El bucket de Amazon S3 para el código de Lambda almacena el artefacto que contiene el código y la lógica escritos para la función de Lambda.

Tools (Herramientas)

Servicios de AWS

  • Amazon Bedrock es un servicio totalmente gestionado que pone a su disposición modelos básicos de alto rendimiento (FMs) de las principales empresas emergentes de IA y Amazon a través de una API unificada.

  • AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todo el territorio y. Cuentas de AWS Regiones de AWS

  • Amazon Elastic Kubernetes Service (Amazon EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.

  • AWS Identity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • Amazon OpenSearch Service es un servicio gestionado que le ayuda a implementar, operar y escalar OpenSearch clústeres en Nube de AWS. Su característica de colecciones le permite organizar los datos y crear bases de conocimiento integrales que los asistentes de IA, como los agentes de Amazon Bedrock, pueden utilizar.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

Otras herramientas

  • eksctl: es una utilidad sencilla de línea de comandos para crear y administrar clústeres de Kubernetes en Amazon EKS.

Repositorio de código

El código de este patrón está disponible en el repositorio GitHub eks-access-controls-bedrock-agent.

Prácticas recomendadas

  • Mantenga la mayor seguridad posible al implementar este patrón. Asegúrese de que el clúster de Amazon EKS sea privado, tenga permisos de acceso limitados y que todos los recursos estén dentro de una nube privada virtual (VPC). Para más información, consulte Best practices for security en la documentación de Amazon EKS.

  • Utilice claves administradas por el AWS KMS cliente siempre que sea posible y concédales permisos de acceso limitados.

  • Cumpla con el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte Otorgar privilegio mínimo y Prácticas recomendadas de seguridad en la documentación de IAM.

Epics

TareaDescripciónHabilidades requeridas

Clonar el repositorio.

Para clonar el repositorio de este patrón, ejecute el comando siguiente en la estación de trabajo local:

git clone https://github.com/aws-samples/eks-access-controls-bedrock-agent.git
AWS DevOps

Obtenga la Cuenta de AWS identificación.

Para obtener la Cuenta de AWS identificación, sigue los siguientes pasos:

  1. Abra un intérprete de comandos en la carpeta raíz del repositorio clonado, eks-access-controls-bedrock-agent.

  2. Para obtener su Cuenta de AWS ID, vaya al directorio clonado y ejecute el siguiente comando:

    AWS_ACCOUNT=$(aws sts get-caller-identity --query "Account" --output text)

Este comando almacena tu Cuenta de AWS ID en la AWS_ACCOUNT variable.

AWS DevOps

Cree el bucket de S3 para el código de Lambda.

Para implementar esta solución, debe crear tres buckets de Amazon S3 que sirvan para propósitos distintos, como se muestra en el diagrama de arquitectura. Los buckets de S3 son para código de Lambda, una base de conocimientos y un esquema OpenAPI.

Para crear el bucket de Lambda, haga esto:

  1. Para crear un bucket de S3 para código de Lambda, ejecute el comando siguiente:

    aws s3 mb s3://bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} --region us-east-1
  2. Para instalar la dependencia del código de Lambda, ejecute el comando siguiente:

    cd eks-lambda npm install tsc cd .. && cd opensearch-lambda npm install tsc cd ..
  3. Para empaquetar el código y cargarlo al bucket de S3 para Lambda, ejecute el comando siguiente:

    aws cloudformation package \ --template-file eks-access-controls.yaml \ --s3-bucket bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} \ --output-template-file eks-access-controls-template.yaml \ --region us-east-1

El comando package crea una nueva CloudFormation plantilla (eks-access-controls-template.yaml) que contiene:

  • Referencias al código de la función de Lambda almacenado en el bucket de S3.

  • Definiciones de toda la AWS infraestructura requerida, incluida la VPC, las subredes, el agente de Amazon Bedrock y la recopilación. OpenSearch Puede utilizar esta plantilla para implementar la solución completa mediante. CloudFormation

AWS DevOps

Cree el bucket de S3 para la base de conocimientos.

Para crear el bucket de Amazon S3 para la base de conocimientos, haga lo siguiente:

  1. Para crear el bucket de Amazon S3 para la base de conocimientos, ejecute el comando siguiente:

    aws s3 mb s3://eks-knowledge-base-${AWS_ACCOUNT} --region us-east-1
  2. Para descargar la Guía del usuario de Amazon EKS y almacénela en un directorio, ejecute los comandos siguientes:

    mkdir dataSource cd dataSource curl https://docs.aws.amazon.com/pdfs/eks/latest/userguide/eks-ug.pdf -o eks-user-guide.pdf
  3. Para cargar la guía del usuario en el bucket de S3 que creó en el paso 1, ejecute el comando siguiente:

    aws s3 cp eks-user-guide.pdf s3://eks-knowledge-base-${AWS_ACCOUNT} \ --region us-east-1 \
  4. Para volver al directorio raíz, ejecute el siguiente comando:

    cd ..
AWS DevOps

Cree el bucket de S3 para el esquema de OpenAPI.

Para crear el bucket de Amazon S3 para el esquema de OpenAPI, haga lo siguiente:

  1. Para crear el bucket de S3, ejecute el comando siguiente:

    aws s3 mb s3://eks-openapi-schema-${AWS_ACCOUNT} --region us-east-1
  2. Para cargar el esquema de OpenAPI en el bucket de S3, ejecute el comando siguiente:

    aws s3 cp openapi-schema.yaml s3://eks-openapi-schema-${AWS_ACCOUNT} --region us-east-1
AWS DevOps
TareaDescripciónHabilidades requeridas

Despliegue la CloudFormation pila.

Para implementar la CloudFormation pila, usa el archivo CloudFormation de plantilla eks-access-controls-template.yaml que creaste anteriormente. Para obtener instrucciones más detalladas, consulte Crear una pila desde la CloudFormation consola en la CloudFormation documentación.

nota

El aprovisionamiento del OpenSearch índice con la CloudFormation plantilla tarda unos 10 minutos.

Una vez creada la pila, anote el valor de VPC_ID y PRIVATE_SUBNET ID.

AWS DevOps

Cree el clúster de Amazon EKS.

Para crear el clúster de Amazon EKS dentro de la VPC, haga lo siguiente:

  1. Cree una copia del archivo de configuración eks-config.yaml y asígnele el nombre eks-deploy.yaml a la copia.

  2. Abra eks-deploy.yaml en un editor de texto. A continuación, sustituya los valores de marcador de posición siguientes por valores de la pila implementada: VPC_ID, PRIVATE_SUBNET1 y PRIVATE_SUBNET2

  3. Para crear el clúster mediante la utilidad eksctl, ejecute el comando siguiente:

    eksctl create cluster -f eks-deploy.yaml
    nota

    Este proceso de creación del clúster puede tardar entre 15 y 20 minutos en completarse.

  4. Para comprobar que se creó el clúster correctamente, ejecute los comandos siguientes:

    aws eks describe-cluster --name --query "cluster.status" aws eks update-kubeconfig --name --region kubectl get nodes

Los resultados esperados son los siguientes:

  • El estado del clúster es ACTIVE.

  • El comando kubectl get nodes muestra que todos los nodos se encuentran en el estado Ready.

AWS DevOps
TareaDescripciónHabilidades requeridas

Cree una conexión entre el clúster de Amazon EKS y la función de Lambda.

Para configurar los permisos de red e IAM para permitir que la función de Lambda se comunique con el clúster de Amazon EKS, haga lo siguiente:

  1. Para identificar la función de IAM asociada a la función Lambda, abra y localice Consola de administración de AWS la función Lambda denominada. bedrock-agent-eks-access-control Anote el nombre de recurso de Amazon (ARN) del rol de IAM.

  2. Para crear una entrada de acceso en el clúster de Amazon EKS para el rol de IAM de la función de Lambda, ejecute el comando siguiente:

    aws eks create-access-entry --cluster-name eks-testing-cluster --principal-arn <principal-Role-ARN>
  3. Para asignar los permisos de AmazonEKSClusterAdminPolicy a este rol, ejecute el comando siguiente:

    aws eks associate-access-policy --cluster-name eks-testing-cluster --principal-arn <principal-Role-ARN> --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy --access-scope type=cluster

    Para obtener más información, consulte Asociar políticas de acceso a entradas de acceso y Amazon EKSCluster AdminPolicy en la documentación de Amazon EKS.

  4. Encuentre el grupo de seguridad del clúster de Amazon EKS. Agregue una regla de entrada para permitir el tráfico de red entrante de la función de Lambda al clúster de Amazon EKS.

    Utilice los valores siguientes para la regla de entrada:

AWS DevOps
TareaDescripciónHabilidades requeridas

Pruebe el agente de Amazon Bedrock.

Antes de hacer pruebas con el agente de Amazon Bedrock, asegúrese de hacer lo siguiente:

  • Pruebe primero con roles que no sean de producción.

  • Documente los cambios hechos en el acceso al clúster.

  • Tenga un plan para revertir los cambios si es necesario.

Para acceder al agente de Amazon Bedrock, haga lo siguiente:

  1. Inicie sesión en el rol de Consola de administración de AWS uso de IAM con los permisos de Amazon Bedrock y abra la consola de Amazon Bedrock en. https://console.aws.amazon.com/bedrock/

  2. En el panel de navegación de la izquierda, seleccione Agentes. A continuación, elija el agente configurado en la sección Agentes.

  3. Para probar el agente, intente los ejemplos de instrucciones siguientes, en los que lo sustituirá Principal-ARN-OF-ROLE por un ARN de rol de IAM real:

  • Para crear una entrada de acceso para cualquier rol de IAM al que quiere proporcionar acceso al clúster de EKS, utilice la petición siguiente: Create an access entry in cluster eks-testing-new for a role whose principal arn is <Principal-ARN-OF-ROLE> with access policy as AmazonEKSAdminPolicy

    Resultado esperado:

    • El agente debe confirmar la creación de la entrada de acceso.

    • Para verificarlo, Consola de administración de AWS compruébelo o utilice la API Amazon EKS y ejecute el siguiente comando: aws eks list-access-entries --cluster-name ekscluster

  • Para describir la entrada de acceso que creó, utilice la petición siguiente: Describe an access entry in cluster eks-testing-new whose principal arn is <Principal-ARN-OF-ROLE>

    Resultado esperado:

    • El agente debe devolver los detalles acerca de la entrada de acceso.

    • Los detalles deben coincidir con los que configuró anteriormente para la entrada de acceso.

  • Para eliminar la entrada de acceso que creó, utilice la petición siguiente: Delete the access entry in cluster eks-testing-new whose principal arn is <Principal-ARN-OF-ROLE>

    Resultado esperado:

    • El agente debe confirmar la eliminación de la entrada de acceso.

    • Para verificarlo, Consola de administración de AWS compruébelo o utilice la API Amazon EKS y ejecute el siguiente comando: aws eks list-access-entries --cluster-name ekscluster

También puede pedirle al agente que realice acciones para las asociaciones de Pod Identity de EKS. Para más información, consulte Más información sobre cómo Pod Identity de EKS concede a los pods acceso a los Servicios de AWS en la documentación de Amazon EKS.

AWS DevOps
TareaDescripciónHabilidades requeridas

Eliminación de recursos.

Para limpiar los recursos que creó este patrón, siga el procedimiento siguiente. Espere a que cada paso de eliminación termine antes de ir al paso siguiente.

aviso

Este procedimiento eliminará de manera permanente todos los recursos creados por estas pilas. Asegúrese de que hizo una copia de seguridad de los datos importantes antes de continuar.

  1. Para eliminar el clúster de Amazon EKS, ejecute el comando siguiente:

    eksctl delete cluster -f eks-deploy.yaml
    nota

    Esta operación puede tardar entre 15 y 20 minutos en completarse.

  2. Para eliminar los buckets de Amazon S3, ejecute los comandos siguientes:

    • Para vaciar el bucket de Lambda:

      aws s3 rm s3://bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} --recursive
    • Para vaciar el bucket de la base de conocimientos:

      aws s3 rm s3://eks-knowledge-base-${AWS_ACCOUNT} –recursive
    • Para vaciar el bucket de esquemas de OpenAPI:

      aws s3 rm s3://bedrock-agent-openapi-schema-${AWS_ACCOUNT} –recursive
    • Para eliminar los buckets vacíos:

      aws s3 rb s3://bedrock-agent-lambda-artifacts-${AWS_ACCOUNT} aws s3 rb s3://eks-knowledge-base-${AWS_ACCOUNT} aws s3 rb s3://bedrock-agent-openapi-schema-${AWS_ACCOUNT}
  3. Para eliminar la CloudFormation pila, ejecute el siguiente comando:

    aws cloudformation delete-stack \ --stack-name
  4. Para verificar la eliminación del clúster de Amazon EKS, ejecute el comando siguiente:

    eksctl get clusters
  5. Para verificar la eliminación los buckets de Amazon S3, ejecute los comandos siguientes:

    • Para verificar la eliminación del bucket de Lambda:

      aws s3 ls | grep "bedrock-agent-lambda-artifacts"
    • Para verificar la eliminación del bucket de la base de conocimientos:

      aws s3 ls | grep "eks-knowledge-base"
    • Para verificar la eliminación del bucket de esquemas de OpenAPI:

      aws s3 ls | grep "bedrock-agent-openapi-schema"
  6. Para verificar la eliminación de la pila, ejecute el comando siguiente:

    aws cloudformation list-stacks \--query 'StackSummaries[?StackName==``]'

    Si la pila no se elimina, consulte Troubleshooting.

AWS DevOps

Resolución de problemas

ProblemaSolución

Durante la configuración del entorno, se devuelve un código de error distinto de cero.

Compruebe que está utilizando la carpeta correcta al ejecutar los comandos para implementar esta solución. Para más información, consulte el archivo FIRST_DEPLOY.md del repositorio de este patrón.

La función de Lambda no puede hacer la tarea.

Asegúrese de que la conectividad esté configurada correctamente desde la función de Lambda al clúster de Amazon EKS.

Las indicaciones del agente no reconocen el APIs.

Implementar la solución. Para más información, consulte el archivo RE_DEPLOY.md del repositorio de este patrón.

La pila no se puede eliminar.

Es posible que se produzca un error al intentar eliminar la pila por primera vez. Este error puede producirse debido a problemas de dependencia con el recurso personalizado que se creó para la OpenSearch colección, que se encarga de la indexación de la base de conocimientos. Para eliminar la pila, vuelva a intentar la operación de eliminación conservando el recurso personalizado.

Recursos relacionados

AWS Blog

Documentación de Amazon Bedrock

Documentación de Amazon EKS