View a markdown version of this page

AWSSupport-SetupK8sApiProxyForEKS - AWS Systems Manager Riferimento al runbook dell’automazione

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWSSupport-SetupK8sApiProxyForEKS

Descrizione

Il runbook di AWSSupport-SetupK8sApiProxyForEKS automazione fornisce un modo per creare una AWS Lambda funzione che funge da proxy per effettuare chiamate API del piano di controllo all'endpoint del cluster Amazon Elastic Kubernetes Service. Funge da elemento costitutivo per i runbook che richiedono l'esecuzione di chiamate API al piano di controllo per automatizzare le attività e risolvere i problemi con un cluster Amazon EKS.

Importante

Tutte le risorse create da questa automazione sono etichettate in modo da poter essere trovate facilmente. I tag utilizzati sono:

  • AWSSupport-SetupK8sApiProxyForEKS: true

Nota
  • L'automazione è un runbook di supporto e non può essere eseguito come runbook autonomo. Viene richiamato come automazione secondaria per i runbook che richiedono chiamate API del piano di controllo al cluster Amazon EKS.

  • Assicurati di eseguire l'Cleanupoperazione dopo l'uso per evitare di incorrere in costi indesiderati.

Tipo di documento

Automazione

Proprietario

Amazon

Piattaforme

Linux

Parametri

  • AutomationAssumeRole

    Tipo: stringa

    Descrizione: (Facoltativo) L'Amazon Resource Name (ARN) del ruolo AWS Identity and Access Management (IAM) che consente a Systems Manager Automation di eseguire le azioni per tuo conto. Se non viene specificato alcun ruolo, Systems Manager Automation utilizza le autorizzazioni dell'utente che avvia questo runbook.

  • ClusterName

    Tipo: stringa

    Descrizione: (obbligatorio) Il nome del cluster Amazon Elastic Kubernetes Service.

  • Operation

    Tipo: stringa

    Descrizione: (Obbligatorio) Operazione da eseguire: esegue il Setup provisioning della funzione Lambda nell'account, Cleanup annullerà il provisioning delle risorse create durante la fase di configurazione.

    Valori consentiti: | Setup Cleanup

    Predefinito: Configurazione

  • LambdaRoleArn

    Tipo: stringa

    Descrizione: (Facoltativo) L'ARN del ruolo IAM che consente alla AWS Lambda funzione di accedere ai AWS servizi e alle risorse richiesti. Se non viene specificato alcun ruolo, questo Systems Manager Automation creerà un ruolo IAM per Lambda nel tuo account con il nome Automation-K8sProxy-Role-<ExecutionId> che include le policy gestite: AWSLambdaBasicExecutionRole e. AWSLambdaVPCAccessExecutionRole

Come funziona?

Il runbook esegue i seguenti passaggi:

  • Convalida che l'automazione sia in esecuzione come esecuzione secondaria. Il runbook non funzionerà se richiamato come runbook autonomo poiché non esegue alcun lavoro significativo da solo.

  • Verifica CloudFormation lo stack esistente per la funzione proxy Lambda per il cluster specificato.

    • Se lo stack esiste, l'infrastruttura esistente viene riutilizzata invece di ricrearla.

    • Un contatore di riferimento viene gestito utilizzando i tag per garantire che un runbook non elimini l'infrastruttura se viene riutilizzato da un altro runbook per lo stesso cluster.

  • Esegui il tipo di operazione (Setup/Cleanup) specificato per l'invocazione:

    • Configurazione: crea o descrive le risorse esistenti.

      Pulizia: rimuove le risorse assegnate, se l'infrastruttura non viene utilizzata da nessun altro runbook.

Autorizzazioni IAM richieste

Il AutomationAssumeRole parametro richiede che le seguenti autorizzazioni non vengano passate 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

Quando LambdaRoleArn viene fornita, l'automazione non deve creare il ruolo e le seguenti autorizzazioni possono essere escluse:

  • iam:CreateRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

Di seguito è riportato un esempio di politica che dimostra le autorizzazioni necessarie per AutomationAssumeRole quando LambdaRoleArn non viene passata:

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" } ] }

Nel caso in cui LambdaRoleArn venga approvata, assicurati che sia associata una AWSLambdaBasicExecutionRole policy per i cluster pubblici e, inoltre, AWSLambdaVPCAccessExecutionRole per i cluster privati.

Risorse create

Durante l'Setupoperazione vengono create le seguenti risorse:

  1. AWS Lambda funzione

  2. Ruolo IAM: ruolo di esecuzione Lambda, se non fornito.

  3. CloudWatch Gruppo di log (Lambda Logs)

La funzione Lambda e il ruolo di esecuzione vengono mantenuti fino all'esecuzione Cleanup dell'operazione. Il gruppo di log Lambda verrà conservato per 30 giorni o fino all'eliminazione manuale.

Istruzioni

Il runbook è un'utilità di supporto progettata per essere eseguita dall'interno di altri runbook come automazione secondaria. Facilita la creazione di un'infrastruttura che consente al runbook principale di effettuare chiamate API al piano di controllo di Amazon EKS K8. Per utilizzare il runbook, puoi seguire i passaggi seguenti dal contesto dell'automazione principale.

  1. Fase di configurazione: richiama l'automazione utilizzando l' aws:executeAutomationoperazione del runbook per effettuare chiamate API al piano di controllo di Amazon EKS K8s con operazione impostata su. Setup

    Esempio di parametri di input:

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

    L'output del aws:executeAutomation passaggio conterrà l'ARN della funzione proxy Lambda.

  2. Uso del proxy Lambda: richiama la funzione Lambda all'interno dell'aws:executeScriptazione utilizzando boto3's Lambda.Client.invoke(...) con un elenco di percorsi di chiamata API e un token portante. La funzione Lambda eseguirà GET chiamate HTTP al percorso specificato passando il token bearer come parte dell'intestazione di autorizzazione.

    Esempio di evento Lambda invoke:

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

    Il token al portatore deve essere generato come parte dello script di automazione principale. Devi assicurarti che il principale che esegue il runbook principale disponga dell'autorizzazione di sola lettura per il cluster Amazon EKS specificato.

  3. Fase di pulizia: richiama l'automazione utilizzando l'operazione aws:executeAutomation action del runbook che vorrebbe effettuare chiamate API al piano di controllo di Amazon EKS K8s con operazione impostata su. Cleanup

    Esempio di parametri di input:

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

Fasi di automazione

  1. ValidateExecution

    • Verifica che l'automazione non sia eseguita come esecuzione autonoma.

  2. CheckForExistingStack

    • Verifica se è già stato eseguito il provisioning di uno CloudFormation stack per il nome del cluster specificato.

    • Restituisce lo stato di esistenza dello stack e se è sicuro eliminarlo.

  3. BranchOnIsStackExists

    • Fase decisionale che si dirama in base all'esistenza dello stack.

    • Percorsi per aggiornare il nome dello stack esistente o procedere con la ramificazione delle operazioni.

  4. UpdateStackName

    • Aggiorna la StackName variabile con il nome dello stack esistente.

    • Eseguito solo se lo stack esiste già.

  5. BranchOnOperation

    • Instrada l'automazione in base al Operation parametro (Setup/Cleanup).

    • PerSetup: Percorre i percorsi per creare un nuovo stack o descrivere le risorse esistenti.

    • PerCleanup: procede all'eliminazione dello stack se l'eliminazione è sicura.

  6. GetClusterNetworkConfig

    • Descrive il cluster Amazon EKS per ottenere la configurazione VPC.

    • Recupera endpoint, ID VPC, ID di subnet, ID del gruppo di sicurezza e dati CA.

  7. ProvisionResources

    • Crea uno CloudFormation stack con le risorse necessarie.

    • Fornisce alla funzione Lambda la configurazione di rete necessaria.

    • Contrassegna tutte le risorse per il monitoraggio e la gestione.

  8. DescribeStackResources

    • Recupera informazioni sullo created/existing stack.

    • Ottiene l'ARN della funzione Lambda assegnata.

  9. BranchOnIsLambdaDeploymentRequired

    • Determina se è necessaria la distribuzione del codice Lambda.

    • Procede alla distribuzione solo per gli stack appena creati.

  10. DeployLambdaFunctionCode

    • Distribuisce il codice della funzione Lambda utilizzando il pacchetto di distribuzione.

    • Aggiorna la funzione con l'implementazione del proxy.

  11. AssertLambdaAvailable

    • Verifica che l'aggiornamento del codice della funzione Lambda sia andato a buon fine.

    • Attende che la funzione sia nello stato. Successful

  12. PerformStackCleanup

    • Elimina lo CloudFormation stack e le risorse associate.

    • Eseguito durante l'Cleanupoperazione o in caso di fallimento dell' Setupoperazione.

Output

LambdaFunctionArn: ARN della funzione proxy Lambda

Riferimenti

Systems Manager Automation