View a markdown version of this page

AWSSupport-SetupK8sApiProxyForEKS - AWS Systems Manager Referensi Runbook Otomasi

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

AWSSupport-SetupK8sApiProxyForEKS

Deskripsi

Runbook AWSSupport-SetupK8sApiProxyForEKS otomatisasi menyediakan cara untuk membuat AWS Lambda fungsi yang bertindak sebagai proxy untuk membuat panggilan API bidang kontrol ke titik akhir cluster Amazon Elastic Kubernetes Service. Ini berfungsi sebagai blok bangunan untuk runbook yang memerlukan pembuatan panggilan API bidang kontrol untuk mengotomatiskan tugas dan memecahkan masalah dengan cluster Amazon EKS.

penting

Semua sumber daya yang dibuat oleh otomatisasi ini ditandai sehingga dapat dengan mudah ditemukan. Tag yang digunakan adalah:

  • AWSSupport-SetupK8sApiProxyForEKS: benar

catatan
  • Otomatisasi adalah runbook pembantu dan tidak dapat dieksekusi sebagai runbook mandiri. Ini dipanggil sebagai otomatisasi anak untuk runbook yang memerlukan panggilan API bidang kontrol ke cluster Amazon EKS.

  • Pastikan untuk menjalankan Cleanup operasi setelah penggunaan untuk menghindari menimbulkan biaya yang tidak diinginkan.

Jenis dokumen

Otomatisasi

Pemilik

Amazon

Platform

Linux

Parameter

  • AutomationAssumeRole

    Tipe: String

    Deskripsi: (Opsional) Nama Sumber Daya Amazon (ARN) dari peran AWS Identity and Access Management (IAM) yang memungkinkan Otomasi Manajer Sistem untuk melakukan tindakan atas nama Anda. Jika tidak ada peran yang ditentukan, Sistem Manajer Otomasi menggunakan izin pengguna yang memulai runbook ini.

  • ClusterName

    Tipe: String

    Deskripsi: (Diperlukan) Nama cluster Layanan Amazon Elastic Kubernetes.

  • Operasi

    Tipe: String

    Deskripsi: (Diperlukan) Operasi untuk melakukan: menyediakan Setup fungsi Lambda di akun, Cleanup akan membatalkan penyediaan sumber daya yang dibuat sebagai bagian dari fase penyiapan.

    Nilai yang Diizinkan: Setup | Cleanup

    Default: Pengaturan

  • LambdaRoleArn

    Tipe: String

    Deskripsi: (Opsional) ARN dari peran IAM yang memungkinkan AWS Lambda fungsi mengakses AWS layanan dan sumber daya yang diperlukan. Jika tidak ada peran yang ditentukan, Otomatisasi Manajer Sistem ini akan membuat satu peran IAM untuk Lambda di akun Anda dengan nama Automation-K8sProxy-Role-<ExecutionId> yang menyertakan kebijakan terkelola: AWSLambdaBasicExecutionRole dan. AWSLambdaVPCAccessExecutionRole

Bagaimana cara kerjanya?

Runbook melakukan langkah-langkah berikut:

  • Memvalidasi bahwa otomatisasi berjalan sebagai eksekusi anak. Runbook tidak akan berfungsi saat dipanggil sebagai runbook mandiri karena tidak melakukan pekerjaan yang berarti dengan sendirinya.

  • Memeriksa CloudFormation tumpukan yang ada untuk fungsi Lambda proxy untuk cluster yang ditentukan.

    • Jika tumpukan ada, infrastruktur yang ada digunakan kembali alih-alih membuatnya kembali.

    • Penghitung referensi dipertahankan menggunakan tag untuk memastikan runbook tidak menghapus infrastruktur jika digunakan kembali oleh runbook lain untuk cluster yang sama.

  • Lakukan jenis operasi (Setup/Cleanup) yang ditentukan untuk pemanggilan:

    • Pengaturan: Membuat atau menjelaskan sumber daya yang ada.

      Pembersihan: Menghapus sumber daya yang disediakan, jika infrastruktur tidak digunakan oleh runbook lainnya.

Izin IAM yang Diperlukan

AutomationAssumeRoleParameter memerlukan izin berikut yang diberikan tidak LambdaRoleArn dilewatkan:

  • 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

Ketika LambdaRoleArn disediakan, otomatisasi tidak perlu membuat peran dan izin berikut dapat dikecualikan:

  • iam:CreateRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

Di bawah ini adalah contoh kebijakan yang menunjukkan izin yang diperlukan untuk AutomationAssumeRole saat tidak LambdaRoleArn dilewati:

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

Jika LambdaRoleArn dilewati, pastikan bahwa itu memiliki AWSLambdaBasicExecutionRole kebijakan yang melekat padanya untuk cluster publik dan juga, AWSLambdaVPCAccessExecutionRole untuk cluster pribadi.

Sumber Daya yang Dibuat

Sumber daya berikut dibuat selama Setup operasi:

  1. AWS Lambda fungsi

  2. Peran IAM: Peran eksekusi Lambda, jika tidak disediakan.

  3. CloudWatch Grup Log (Lambda Logs)

Fungsi lambda dan peran eksekusi dipertahankan sampai Cleanup operasi dijalankan. Grup log lambda akan disimpan selama 30 hari atau sampai dihapus secara manual.

Instruksi

Runbook adalah utilitas pembantu yang dirancang untuk dieksekusi dari dalam runbook lain sebagai otomatisasi anak. Ini memfasilitasi pembuatan infrastruktur yang memungkinkan runbook induk membuat panggilan API pesawat kontrol Amazon EKS K8s. Untuk menggunakan runbook, Anda dapat mengikuti langkah-langkah di bawah ini dari konteks otomatisasi induk.

  1. Fase Pen yiapan: Memanggil otomatisasi menggunakan operasi aws:executeAutomation tindakan dari runbook yang ingin membuat panggilan API bidang kontrol Amazon EKS K8s dengan operasi disetel ke. Setup

    Contoh parameter input:

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

    Output dari aws:executeAutomation langkah akan berisi ARN dari fungsi proxy Lambda.

  2. Menggunakan Proxy Lambda: Memanggil fungsi Lambda di dalam aws:executeScript tindakan menggunakan boto3's Lambda.Client.invoke(...) dengan daftar jalur panggilan API dan token pembawa. Fungsi Lambda akan melakukan GET panggilan HTTP ke jalur yang ditentukan dengan meneruskan token pembawa sebagai bagian dari header otorisasi.

    Contoh peristiwa panggil Lambda:

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

    Token pembawa harus dibuat sebagai bagian dari skrip otomatisasi induk. Anda perlu memastikan kepala sekolah yang menjalankan runbook induk memiliki izin baca-saja ke cluster Amazon EKS yang ditentukan.

  3. Fase Pembersihan: Memanggil otomatisasi menggunakan operasi aws:executeAutomation tindakan dari runbook yang ingin membuat panggilan API bidang kontrol Amazon EKS K8s dengan operasi disetel ke. Cleanup

    Contoh parameter input:

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

Langkah Otomatisasi

  1. ValidateExecution

    • Memverifikasi bahwa otomatisasi tidak berjalan sebagai eksekusi mandiri.

  2. CheckForExistingStack

    • Memeriksa apakah CloudFormation tumpukan sudah disediakan untuk nama cluster yang ditentukan.

    • Mengembalikan status keberadaan tumpukan dan apakah aman untuk dihapus.

  3. BranchOnIsStackExists

    • Langkah keputusan yang bercabang berdasarkan keberadaan tumpukan.

    • Rute untuk memperbarui nama tumpukan yang ada atau melanjutkan dengan percabangan operasi.

  4. UpdateStackName

    • Memperbarui StackName variabel dengan nama tumpukan yang ada.

    • Hanya dieksekusi jika tumpukan sudah ada.

  5. BranchOnOperation

    • Merutekan otomatisasi berdasarkan Operation parameter (Setup/Cleanup).

    • UntukSetup: Rute untuk membuat tumpukan baru atau menjelaskan sumber daya yang ada.

    • UntukCleanup: Lanjutkan ke penghapusan tumpukan jika aman untuk dihapus.

  6. GetClusterNetworkConfig

    • Menjelaskan cluster Amazon EKS untuk mendapatkan konfigurasi VPC.

    • Mengambil titik akhir, ID VPC, ID subnet, ID grup keamanan, dan data CA.

  7. ProvisionResources

    • Membuat CloudFormation tumpukan dengan sumber daya yang dibutuhkan.

    • Penyediaan fungsi Lambda dengan konfigurasi jaringan yang diperlukan.

    • Menandai semua sumber daya untuk pelacakan dan manajemen.

  8. DescribeStackResources

    • Mengambil informasi tentang created/existing tumpukan.

    • Mendapat ARN dari fungsi Lambda yang disediakan.

  9. BranchOnIsLambdaDeploymentRequired

    • Menentukan apakah penerapan kode Lambda diperlukan.

    • Hanya melanjutkan ke penerapan untuk tumpukan yang baru dibuat.

  10. DeployLambdaFunctionCode

    • Menyebarkan kode fungsi Lambda menggunakan paket penerapan.

    • Memperbarui fungsi dengan implementasi proxy.

  11. AssertLambdaAvailable

    • Memverifikasi bahwa pembaruan kode fungsi Lambda berhasil.

    • Menunggu fungsi dalam Successful keadaan.

  12. PerformStackCleanup

    • Menghapus CloudFormation tumpukan dan sumber daya terkait.

    • Dieksekusi selama Cleanup operasi atau pada kegagalan Setup operasi.

Keluaran

LambdaFunctionArn: ARN dari fungsi proxy Lambda

Referensi

Otomatisasi Systems Manager