Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Asosiasi Identitas EKS Pod
AWS EKS telah memperkenalkan mekanisme baru yang disempurnakan yang disebut Pod Identity Association bagi administrator klaster untuk mengonfigurasi aplikasi Kubernetes agar menerima izin IAM yang diperlukan untuk terhubung dengan layanan AWS di luar klaster. Pod Identity Association memanfaatkan IRSA, namun membuatnya dapat dikonfigurasi secara langsung melalui EKS API, menghilangkan kebutuhan untuk menggunakan IAM API sama sekali.
Akibatnya, peran IAM tidak perlu lagi mereferensikan penyedia OIDC dan karenanya tidak akan terikat pada satu cluster lagi. Ini berarti, peran IAM sekarang dapat digunakan di beberapa kluster EKS tanpa perlu memperbarui kebijakan kepercayaan peran setiap kali cluster baru dibuat. Ini pada gilirannya, menghilangkan kebutuhan akan duplikasi peran dan menyederhanakan proses otomatisasi IRSA sama sekali.
Prasyarat
Di balik layar, implementasi asosiasi identitas pod menjalankan agen sebagai daemonset pada node pekerja. Untuk menjalankan agen pra-syarat di cluster, EKS menyediakan add-on baru yang disebut EKS Pod Identity Agent. Oleh karena itu, membuat asosiasi identitas pod (secara umum, dan denganeksctl
) memerlukan eks-pod-identity-agent
addon yang sudah diinstal sebelumnya pada cluster. Addon ini dapat dibuat menggunakan dengan eksctl
cara yang sama addon lain yang didukung.
catatan
Jika Anda menggunakan kluster Mode Otomatis EKS, sudah eks-pod-identity-agent
diinstal sebelumnya dan Anda dapat melewati pembuatan addon.
eksctl create addon --cluster my-cluster --name eks-pod-identity-agent
Selain itu, jika menggunakan peran IAM yang sudah ada sebelumnya saat membuat asosiasi identitas pod, Anda harus mengonfigurasi peran tersebut untuk mempercayai prinsip layanan EKS () pods.eks.amazonaws.com
yang baru diperkenalkan. Contoh kebijakan kepercayaan IAM dapat ditemukan di bawah ini:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
Jika sebaliknya Anda tidak memberikan ARN dari peran yang ada ke perintah create, eksctl
akan membuat satu di belakang layar dan mengkonfigurasi kebijakan kepercayaan di atas.
Membuat Asosiasi Identitas Pod
Untuk memanipulasi asosiasi identitas pod, eksctl
telah menambahkan bidang baru di bawahiam.podIdentityAssociations
, mis.
iam: podIdentityAssociations: - namespace: <string> #required serviceAccountName: <string> #required createServiceAccount: true #optional, default is false roleARN: <string> #required if none of permissionPolicyARNs, permissionPolicy and wellKnownPolicies is specified. Also, cannot be used together with any of the three other referenced fields. roleName: <string> #optional, generated automatically if not provided, ignored if roleARN is provided permissionPolicy: {} #optional permissionPolicyARNs: [] #optional wellKnownPolicies: {} #optional permissionsBoundaryARN: <string> #optional tags: {} #optional
Untuk contoh lengkap, lihat pod-identity-associations.yaml.
catatan
Selain permissionPolicy
yang digunakan sebagai dokumen kebijakan inline, semua bidang lainnya memiliki mitra bendera CLI.
Membuat asosiasi identitas pod dapat dicapai dengan cara-cara berikut. Selama pembuatan klaster, dengan menentukan asosiasi identitas pod yang diinginkan sebagai bagian dari file konfigurasi dan menjalankan:
eksctl create cluster -f config.yaml
Posting pembuatan cluster, menggunakan salah satu file konfigurasi mis.
eksctl create podidentityassociation -f config.yaml
ATAU menggunakan bendera CLI mis.
eksctl create podidentityassociation \ --cluster my-cluster \ --namespace default \ --service-account-name s3-reader \ --permission-policy-arns="arn:aws:iam::111122223333:policy/permission-policy-1, arn:aws:iam::111122223333:policy/permission-policy-2" \ --well-known-policies="autoScaler,externalDNS" \ --permissions-boundary-arn arn:aws:iam::111122223333:policy/permissions-boundary
catatan
Hanya satu peran IAM yang dapat dikaitkan dengan akun layanan pada satu waktu. Oleh karena itu, mencoba membuat asosiasi identitas pod kedua untuk akun layanan yang sama akan menghasilkan kesalahan.
Mengambil Asosiasi Identitas Pod
Untuk mengambil semua asosiasi identitas pod untuk klaster tertentu, jalankan salah satu perintah berikut:
eksctl get podidentityassociation -f config.yaml
ATAU
eksctl get podidentityassociation --cluster my-cluster
Selain itu, untuk mengambil hanya asosiasi identitas pod dalam namespace tertentu, gunakan flag, mis. --namespace
eksctl get podidentityassociation --cluster my-cluster --namespace default
Akhirnya, untuk mengambil satu asosiasi, sesuai dengan akun layanan K8s tertentu, juga termasuk --service-account-name
ke perintah di atas, mis.
eksctl get podidentityassociation --cluster my-cluster --namespace default --service-account-name s3-reader
Memperbarui Asosiasi Identitas Pod
Untuk memperbarui peran IAM dari satu atau beberapa asosiasi identitas pod, teruskan yang baru roleARN(s)
ke file konfigurasi misalnya
iam: podIdentityAssociations: - namespace: default serviceAccountName: s3-reader roleARN: new-role-arn-1 - namespace: dev serviceAccountName: app-cache-access roleARN: new-role-arn-2
dan jalankan:
eksctl update podidentityassociation -f config.yaml
ATAU (untuk memperbarui satu asosiasi) meneruskan yang baru --role-arn
melalui flag CLI:
eksctl update podidentityassociation --cluster my-cluster --namespace default --service-account-name s3-reader --role-arn new-role-arn
Menghapus Asosiasi Identitas Pod
Untuk menghapus satu atau beberapa asosiasi identitas pod, teruskan namespace(s)
dan serviceAccountName(s)
ke file konfigurasi misalnya
iam: podIdentityAssociations: - namespace: default serviceAccountName: s3-reader - namespace: dev serviceAccountName: app-cache-access
dan jalankan:
eksctl delete podidentityassociation -f config.yaml
ATAU (untuk menghapus satu asosiasi) meneruskan --namespace
dan --service-account-name
melalui flag CLI:
eksctl delete podidentityassociation --cluster my-cluster --namespace default --service-account-name s3-reader
EKS Dukungan add-on untuk asosiasi identitas pod
Pengaya EKS juga mendukung penerimaan izin IAM melalui Asosiasi Identitas Pod EKS. File konfigurasi mengekspos tiga bidang yang memungkinkan konfigurasi ini:addon.podIdentityAssociations
, dan. addonsConfig.autoApplyPodIdentityAssociations
addon.useDefaultPodIdentityAssociations
Anda dapat secara eksplisit mengonfigurasi asosiasi identitas pod yang diinginkan, menggunakanaddon.podIdentityAssociations
, atau eksctl
secara otomatis menyelesaikan (dan menerapkan) konfigurasi identitas pod yang direkomendasikan, menggunakan salah satu atauaddonsConfig.autoApplyPodIdentityAssociations
. addon.useDefaultPodIdentityAssociations
catatan
Tidak semua Pengaya EKS akan mendukung asosiasi identitas pod saat peluncuran. Untuk kasus ini, izin IAM yang diperlukan akan terus diberikan menggunakan pengaturan IRSA.
Membuat addons dengan izin IAM
Saat membuat addon yang memerlukan izin IAM, pertama-tama eksctl
akan memeriksa apakah asosiasi identitas pod atau pengaturan IRSA sedang dikonfigurasi secara eksplisit sebagai bagian dari file konfigurasi, dan jika demikian, gunakan salah satunya untuk mengonfigurasi izin untuk addon. misalnya
addons: - name: vpc-cni podIdentityAssociations: - serviceAccountName: aws-node permissionPolicyARNs: ["arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"]
dan lari
eksctl create addon -f config.yaml 2024-05-13 15:38:58 [ℹ] pod identity associations are set for "vpc-cni" addon; will use these to configure required IAM permissions
catatan
Menyetel identitas pod dan IRSA secara bersamaan tidak diperbolehkan, dan akan menghasilkan kesalahan validasi.
Untuk Eks Add-on yang mendukung identitas pod, eksctl
menawarkan opsi untuk secara otomatis mengonfigurasi izin IAM yang direkomendasikan, pada pembuatan addon. Ini dapat dicapai hanya dengan menyetel addonsConfig.autoApplyPodIdentityAssociations: true
di file konfigurasi. misalnya
addonsConfig: autoApplyPodIdentityAssociations: true # bear in mind that if either pod identity or IRSA configuration is explicitly set in the config file, # or if the addon does not support pod identities, # addonsConfig.autoApplyPodIdentityAssociations won't have any effect. addons: - name: vpc-cni
dan lari
eksctl create addon -f config.yaml 2024-05-13 15:38:58 [ℹ] "addonsConfig.autoApplyPodIdentityAssociations" is set to true; will lookup recommended pod identity configuration for "vpc-cni" addon
Secara setara, hal yang sama dapat dilakukan melalui flag CLI misalnya
eksctl create addon --cluster my-cluster --name vpc-cni --auto-apply-pod-identity-associations
Untuk memigrasikan addon yang ada untuk menggunakan identitas pod dengan kebijakan IAM yang direkomendasikan, gunakan
addons: - name: vpc-cni useDefaultPodIdentityAssociations: true
eksctl update addon -f config.yaml
Memperbarui addons dengan izin IAM
Saat memperbarui addon, menentukan addon.PodIdentityAssociations
akan mewakili satu sumber kebenaran untuk status yang akan dimiliki addon, setelah operasi pembaruan selesai. Di belakang layar, berbagai jenis operasi dilakukan untuk mencapai keadaan yang diinginkan yaitu
-
buat identitas pod yang ada di file konfigurasi, tetapi tidak ada di cluster
-
hapus identitas pod yang ada yang telah dihapus dari file konfigurasi, bersama dengan sumber daya IAM terkait
-
perbarui identitas pod yang ada yang juga ada di file konfigurasi, dan set izin IAM telah berubah
catatan
Siklus hidup asosiasi identitas pod yang dimiliki oleh Eks Add-on ditangani langsung oleh EKS Addons API.
Anda tidak dapat menggunakan eksctl update podidentityassociation
(untuk memperbarui izin IAM) atau eksctl delete podidentityassociations
(untuk menghapus asosiasi) untuk asosiasi yang digunakan dengan Add-on Amazon EKS. Sebaliknya, eksctl update addon
atau eksctl delete addon
akan digunakan.
Mari kita lihat contoh di atas, dimulai dengan menganalisis konfigurasi identitas pod awal untuk addon:
eksctl get podidentityassociation --cluster my-cluster --namespace opentelemetry-operator-system --output json [ { ... "ServiceAccountName": "adot-col-prom-metrics", "RoleARN": "arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-adot-podident-Role1-JwrGA4mn1Ny8", # OwnerARN is populated when the pod identity lifecycle is handled by the EKS Addons API "OwnerARN": "arn:aws:eks:us-west-2:111122223333:addon/my-cluster/adot/b2c7bb45-4090-bf34-ec78-a2298b8643f6" }, { ... "ServiceAccountName": "adot-col-otlp-ingest", "RoleARN": "arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-adot-podident-Role1-Xc7qVg5fgCqr", "OwnerARN": "arn:aws:eks:us-west-2:111122223333:addon/my-cluster/adot/b2c7bb45-4090-bf34-ec78-a2298b8643f6" } ]
Sekarang gunakan konfigurasi di bawah ini:
addons: - name: adot podIdentityAssociations: # For the first association, the permissions policy of the role will be updated - serviceAccountName: adot-col-prom-metrics permissionPolicyARNs: #- arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy # The second association will be deleted, as it's been removed from the config file #- serviceAccountName: adot-col-otlp-ingest # permissionPolicyARNs: # - arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess # The third association will be created, as it's been added to the config file - serviceAccountName: adot-col-container-logs permissionPolicyARNs: - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
dan lari
eksctl update addon -f config.yaml ... # updating the permission policy for the first association 2024-05-14 13:27:43 [ℹ] updating IAM resources stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-prom-metrics" for pod identity association "a-reaxk2uz1iknwazwj" 2024-05-14 13:27:44 [ℹ] waiting for CloudFormation changeset "eksctl-opentelemetry-operator-system-adot-col-prom-metrics-update-1715682463" for stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-prom-metrics" 2024-05-14 13:28:47 [ℹ] waiting for CloudFormation stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-prom-metrics" 2024-05-14 13:28:47 [ℹ] updated IAM resources stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-prom-metrics" for "a-reaxk2uz1iknwazwj" # creating the IAM role for the second association 2024-05-14 13:28:48 [ℹ] deploying stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-container-logs" 2024-05-14 13:28:48 [ℹ] waiting for CloudFormation stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-container-logs" 2024-05-14 13:29:19 [ℹ] waiting for CloudFormation stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-container-logs" # updating the addon, which handles the pod identity config changes behind the scenes 2024-05-14 13:29:19 [ℹ] updating addon # deleting the IAM role for the third association 2024-05-14 13:29:19 [ℹ] deleting IAM resources for pod identity service account adot-col-otlp-ingest 2024-05-14 13:29:20 [ℹ] will delete stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-otlp-ingest" 2024-05-14 13:29:20 [ℹ] waiting for stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-otlp-ingest" to get deleted 2024-05-14 13:29:51 [ℹ] waiting for CloudFormation stack "eksctl-my-cluster-addon-adot-podidentityrole-adot-col-otlp-ingest" 2024-05-14 13:29:51 [ℹ] deleted IAM resources for addon adot
sekarang periksa apakah konfigurasi identitas pod telah diperbarui dengan benar
eksctl get podidentityassociation --cluster my-cluster --output json [ { ... "ServiceAccountName": "adot-col-prom-metrics", "RoleARN": "arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-adot-podident-Role1-nQAlp0KktS2A", "OwnerARN": "arn:aws:eks:us-west-2:111122223333:addon/my-cluster/adot/1ec7bb63-8c4e-ca0a-f947-310c4b55052e" }, { ... "ServiceAccountName": "adot-col-otlp-ingest", "RoleARN": "arn:aws:iam::111122223333:role/eksctl-my-cluster-addon-adot-podident-Role1-1k1XhAdziGzX", "OwnerARN": "arn:aws:eks:us-west-2:111122223333:addon/my-cluster/adot/1ec7bb63-8c4e-ca0a-f947-310c4b55052e" } ]
Untuk menghapus semua asosiasi identitas pod dari addon, addon.PodIdentityAssociations
harus disetel secara eksplisit ke, mis. []
addons: - name: vpc-cni # omitting the `podIdentityAssociations` field from the config file, # instead of explicitly setting it to [], will result in a validation error podIdentityAssociations: []
dan lari
eksctl update addon -f config.yaml
Menghapus addons dengan izin IAM
Menghapus addon juga akan menghapus semua identitas pod yang terkait dengan addon. Menghapus cluster akan mencapai efek yang sama, untuk semua addons. Setiap peran IAM untuk identitas pod, yang dibuat oleheksctl
, akan dihapus juga.
Migrasi iamserviceaccounts dan addons yang ada ke asosiasi identitas pod
Ada perintah eksctl
utils untuk memigrasi Peran IAM yang ada untuk akun layanan ke asosiasi identitas pod, yaitu
eksctl utils migrate-to-pod-identity --cluster my-cluster --approve
Di belakang layar, perintah akan menerapkan langkah-langkah berikut:
-
instal
eks-pod-identity-agent
addon jika belum aktif di cluster -
mengidentifikasi semua Peran IAM yang terkait dengan iamserviceaccounts
-
mengidentifikasi semua Peran IAM yang terkait dengan addon EKS yang mendukung asosiasi identitas pod
-
memperbarui kebijakan kepercayaan IAM dari semua peran yang diidentifikasi, dengan entitas tepercaya tambahan, menunjuk ke prinsip Layanan EKS yang baru (dan, secara opsional, menghapus hubungan kepercayaan penyedia OIDC yang keluar)
-
buat asosiasi identitas pod untuk peran yang difilter yang terkait dengan iamserviceaccounts
-
perbarui addons EKS dengan identitas pod (EKS API akan membuat identitas pod di belakang layar)
Menjalankan perintah tanpa --approve
bendera hanya akan menampilkan rencana yang terdiri dari serangkaian tugas yang mencerminkan langkah-langkah di atas, mis.
[ℹ] (plan) would migrate 2 iamserviceaccount(s) and 2 addon(s) to pod identity association(s) by executing the following tasks [ℹ] (plan) 3 sequential tasks: { install eks-pod-identity-agent addon, ## tasks for migrating the addons 2 parallel sub-tasks: { 2 sequential sub-tasks: { update trust policy for owned role "eksctl-my-cluster--Role1-DDuMLoeZ8weD", migrate addon aws-ebs-csi-driver to pod identity, }, 2 sequential sub-tasks: { update trust policy for owned role "eksctl-my-cluster--Role1-xYiPFOVp1aeI", migrate addon vpc-cni to pod identity, }, }, ## tasks for migrating the iamserviceaccounts 2 parallel sub-tasks: { 2 sequential sub-tasks: { update trust policy for owned role "eksctl-my-cluster--Role1-QLXqHcq9O1AR", create pod identity association for service account "default/sa1", }, 2 sequential sub-tasks: { update trust policy for unowned role "Unowned-Role1", create pod identity association for service account "default/sa2", }, } } [ℹ] all tasks were skipped [!] no changes were applied, run again with '--approve' to apply the changes
Hubungan kepercayaan penyedia OIDC yang ada selalu dihapus dari Peran IAM yang terkait dengan Pengaya EKS. Selain itu, untuk menghapus hubungan kepercayaan penyedia OIDC yang ada dari Peran IAM yang terkait dengan iamserviceaccounts, jalankan perintah dengan flag, mis. --remove-oidc-provider-trust-relationship
eksctl utils migrate-to-pod-identity --cluster my-cluster --approve --remove-oidc-provider-trust-relationship
Referensi lebih lanjut
AWS Userdocs resmi untuk EKS Dukungan Add-on untuk identitas pod
Posting Blog AWS Resmi di Asosiasi Identitas Pod
Dokumen pengguna AWS resmi untuk Asosiasi Identitas Pod