View a markdown version of this page

AWSSupport-SetupK8sApiProxyForEKS - AWS Systems Manager Referencia del manual de procedimientos de Automatización

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.

AWSSupport-SetupK8sApiProxyForEKS

Descripción

El manual de AWSSupport-SetupK8sApiProxyForEKS automatización proporciona una forma de crear una AWS Lambda función que actúe como proxy para realizar llamadas a la API del plano de control al punto final del clúster de Amazon Elastic Kubernetes Service. Sirve de base para los runbooks que requieren realizar llamadas a la API del plano de control para automatizar las tareas y solucionar problemas con un clúster de Amazon EKS.

importante

Todos los recursos creados por esta automatización están etiquetados para que se puedan encontrar fácilmente. Las etiquetas utilizadas son:

  • AWSSupport-SetupK8sApiProxyForEKS: true

nota
  • La automatización es un libro de ejecución auxiliar y no se puede ejecutar como un libro de ejecución independiente. Se invoca como una automatización secundaria para los libros de ejecución que requieren llamadas a la API del plano de control al clúster de Amazon EKS.

  • Asegúrese de ejecutar la Cleanup operación después del uso para evitar incurrir en costes no deseados.

Tipo de documento

Automatización

Propietario

Amazon

Plataformas

Linux

Parámetros

  • AutomationAssumeRole

    Tipo: cadena

    Descripción: (opcional) el Nombre de recurso de Amazon (ARN) del rol de AWS Identity and Access Management (IAM) que permite a Systems Manager Automation realizar las acciones en su nombre. Si no se especifica ningún rol, Systems Manager Automation utiliza los permisos del usuario que comienza este manual de procedimientos.

  • ClusterName

    Tipo: cadena

    Descripción: (Obligatorio) El nombre del clúster de Amazon Elastic Kubernetes Service.

  • Operación

    Tipo: cadena

    Descripción: Operación (obligatoria) a realizar: Setup aprovisiona la función Lambda en la cuenta y desaprovisiona los recursos creados como parte de la fase de configuración. Cleanup

    Valores permitidos: | Setup Cleanup

    Predeterminado: Configuración

  • LambdaRoleArn

    Tipo: cadena

    Descripción: (opcional) El ARN del rol de IAM que permite a la AWS Lambda función acceder a los AWS servicios y recursos necesarios. Si no se especifica ningún rol, esta automatización de Systems Manager creará un rol de IAM para Lambda en su cuenta con el nombre Automation-K8sProxy-Role-<ExecutionId> que incluye las políticas administradas: y. AWSLambdaBasicExecutionRole AWSLambdaVPCAccessExecutionRole

¿Cómo funciona?

El manual de operaciones lleva a cabo los siguientes pasos:

  • Valida que la automatización se esté ejecutando como una ejecución secundaria. El libro de ejecución no funcionará cuando se invoque como un libro de ejecución independiente, ya que no realiza ningún trabajo significativo por sí solo.

  • Comprueba si hay una CloudFormation pila existente para la función proxy de Lambda para el clúster especificado.

    • Si la pila existe, la infraestructura existente se reutiliza en lugar de volver a crearla.

    • Se mantiene un contador de referencias mediante etiquetas para garantizar que un libro de ejecución no elimine la infraestructura si otro libro de ejecución la está reutilizando para el mismo clúster.

  • Realice el tipo de operación (Setup/Cleanup) especificado para la invocación:

    • Configuración: crea o describe los recursos existentes.

      Limpieza: elimina los recursos aprovisionados si ningún otro runbook está utilizando la infraestructura.

Permisos de IAM necesarios

El AutomationAssumeRole parámetro requiere que no se aprueben los siguientes permisos concedidos LambdaRoleArn:

  • cloudformation:CreateStack

  • cloudformation:DescribeStacks

  • cloudformation:DeleteStack

  • cloudformation:UpdateStack

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

  • ec2:DeleteNetworkInterface

  • eks:DescribeCluster

  • lambda:CreateFunction

  • lambda:DeleteFunction

  • lambda:ListTags

  • lambda:GetFunction

  • lambda:ListTags

  • lambda:TagResource

  • lambda:UntagResource

  • lambda:UpdateFunctionCode

  • logs:CreateLogGroup

  • logs:PutRetentionPolicy

  • logs:TagResource

  • logs:UntagResource

  • logs:DescribeLogGroups

  • logs:DescribeLogStreams

  • logs:ListTagsForResource

  • iam:CreateRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

  • iam:PassRole

  • iam:GetRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • tag:GetResources

  • tag:TagResources

Cuando LambdaRoleArn se proporciona, la automatización no necesita crear el rol y se pueden excluir los siguientes permisos:

  • iam:CreateRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

A continuación, se muestra un ejemplo de política que demuestra los permisos necesarios AutomationAssumeRole cuando no LambdaRoleArn se aprueban:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "tag:GetResources", "tag:TagResources", "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "eks:DescribeCluster", "iam:GetRole", "cloudformation:DescribeStacks", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "lambda:GetFunction", "lambda:ListTags", "logs:ListTagsForResource" ], "Resource": "*", "Effect": "Allow", "Sid": "AllowActionsWithoutConditions" }, { "Condition": { "StringEquals": { "aws:RequestTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": "iam:CreateRole", "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AllowCreateRoleWithRequiredTag" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "iam:DeleteRole", "iam:TagRole", "iam:UntagRole" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "IAMActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" }, "StringLike": { "iam:PolicyARN": [ "arn:aws:iam::111122223333:policy/service-role/AWSLambdaBasicExecutionRole", "arn:aws:iam::111122223333:policy/service-role/AWSLambdaVPCAccessExecutionRole" ] } }, "Action": [ "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AttachRolePolicy" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode" ], "Resource": "arn:aws:lambda:us-east-1:111122223333:function:Automation-K8sProxy*", "Effect": "Allow", "Sid": "LambdaActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:us-east-1:111122223333:stack/AWSSupport-SetupK8sApiProxyForEKS*", "Effect": "Allow", "Sid": "CloudFormationActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*", "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*:*" ], "Effect": "Allow", "Sid": "LogsActions" }, { "Condition": { "StringLikeIfExists": { "iam:PassedToService": "lambda.amazonaws.com" } }, "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy-Role*" ], "Effect": "Allow", "Sid": "PassRoleToLambda" } ] }

En caso de que LambdaRoleArn se apruebe, asegúrese de que tenga una AWSLambdaBasicExecutionRole política adjunta para los clústeres públicos y, además, AWSLambdaVPCAccessExecutionRole para los clústeres privados.

Recursos creados

Durante la Setup operación se crean los siguientes recursos:

  1. AWS Lambda función

  2. Función de IAM: función de ejecución de Lambda, si no se proporciona.

  3. CloudWatch Grupo de registros (registros de Lambda)

La función y el rol de ejecución de Lambda se conservan hasta que se ejecute Cleanup la operación. El grupo de registros de Lambda se conservará durante 30 días o hasta que se elimine manualmente.

Instrucciones

El runbook es una utilidad auxiliar diseñada para ejecutarse desde otros runbooks como una automatización secundaria. Facilita la creación de una infraestructura que permite al runbook principal realizar llamadas a la API del plano de control del K8 de Amazon EKS. Para utilizar el manual de operaciones, puede seguir los pasos que se indican a continuación desde el contexto de la automatización principal.

  1. Fase de configuración: invoque la automatización mediante aws:executeAutomation una operación del libro de ejecución que desee realizar llamadas a la API del plano de control del K8 de Amazon EKS con la operación establecida en. Setup

    Ejemplo de parámetros de entrada:

    { "AutomationAssumeRole": "<role-arn>", "ClusterName": "<eks-cluster-name>", "Operation": "Setup" }

    La salida del aws:executeAutomation paso contendrá el ARN de la función proxy de Lambda.

  2. Uso del proxy de Lambda: invoca la función de Lambda dentro de la aws:executeScript acción utilizando «s» Lambda.Client.invoke(...) con una lista boto3 de rutas de llamadas a la API y un token portador. La función Lambda realizará GET llamadas HTTP a la ruta especificada pasando el token portador como parte del encabezado de autorización.

    Ejemplo de un evento de invocación de Lambda:

    { "ApiCalls": ["/api/v1/pods/", ...], "BearerToken": "..." }
    nota

    El token portador debe generarse como parte del script de automatización principal. Debe asegurarse de que el director que ejecuta el libro de ejecución principal tenga permiso de solo lectura para el clúster de Amazon EKS especificado.

  3. Fase de limpieza: invoque la automatización mediante aws:executeAutomation una operación del libro de ejecución que desee realizar llamadas a la API del plano de control del K8 de Amazon EKS con la operación establecida en. Cleanup

    Ejemplo de parámetros de entrada:

    { "AutomationAssumeRole": "<role-arn>", "ClusterName": "<eks-cluster-name>", "Operation": "Cleanup" }

Pasos de automatización

  1. ValidateExecution

    • Verifica que la automatización no se esté ejecutando como una ejecución independiente.

  2. CheckForExistingStack

    • Comprueba si ya se ha aprovisionado una CloudFormation pila para el nombre de clúster especificado.

    • Devuelve el estado de existencia de la pila y si es seguro eliminarla.

  3. BranchOnIsStackExists

    • Paso de decisión que se bifurca en función de la existencia de la pila.

    • Rutas para actualizar el nombre de la pila existente o continuar con la bifurcación de las operaciones.

  4. UpdateStackName

    • Actualiza la StackName variable con el nombre de la pila existente.

    • Solo se ejecuta si la pila ya existe.

  5. BranchOnOperation

    • Dirige la automatización en función del Operation parámetro (Setup/Cleanup).

    • ParaSetup: Las rutas permiten crear una pila nueva o describir los recursos existentes.

    • ParaCleanup: Continúa con la eliminación de la pila si es seguro eliminarla.

  6. GetClusterNetworkConfig

    • Describe el clúster de Amazon EKS para obtener la configuración de la VPC.

    • Recupera los datos del punto final, el ID de VPC, los ID de subred, el ID del grupo de seguridad y los datos de la CA.

  7. ProvisionResources

    • Crea una CloudFormation pila con los recursos necesarios.

    • Aprovisiona la función Lambda con la configuración de red necesaria.

    • Etiqueta todos los recursos para su seguimiento y administración.

  8. DescribeStackResources

    • Recupera información sobre la created/existing pila.

    • Obtiene el ARN de la función Lambda aprovisionada.

  9. BranchOnIsLambdaDeploymentRequired

    • Determina si es necesario implementar código Lambda.

    • Solo procede a la implementación de las pilas recién creadas.

  10. DeployLambdaFunctionCode

    • Implementa el código de la función de Lambda mediante el paquete de implementación.

    • Actualiza la función con la implementación del proxy.

  11. AssertLambdaAvailable

    • Verifica que la actualización del código de la función Lambda se haya realizado correctamente.

    • Espera a que la función esté en estado. Successful

  12. PerformStackCleanup

    • Elimina la CloudFormation pila y los recursos asociados.

    • Se ejecuta durante la Cleanup operación o en caso de fallo de la Setup operación.

Salidas

LambdaFunctionArn: ARN de la función proxy de Lambda

Referencias

Automatización de Systems Manager