Peran IAM untuk Akun Layanan - Panduan Pengguna Eksctl

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

Peran IAM untuk Akun Layanan

Amazon EKS mendukung Roles for Service Accounts (IRSA)] yang memungkinkan operator klaster memetakan Peran AWS IAM ke Akun Layanan Kubernetes.

Ini memberikan manajemen izin berbutir halus untuk aplikasi yang berjalan di EKS dan menggunakan layanan AWS lainnya. Ini bisa berupa aplikasi yang menggunakan S3, layanan data lainnya (RDS, MQ, STS, DynamoDB), atau komponen Kubernetes seperti AWS Load Balancer controller atau ExternalDNS.

Anda dapat dengan mudah membuat pasangan Akun Peran dan Layanan IAM. eksctl

catatan

Jika Anda menggunakan peran instance, dan mempertimbangkan untuk menggunakan IRSA sebagai gantinya, Anda tidak boleh mencampur keduanya.

Cara kerjanya

Ia bekerja melalui IAM OpenID Connect Provider (OIDC) yang mengekspos EKS, dan Peran IAM harus dibangun dengan mengacu pada Penyedia IAM OIDC (khusus untuk klaster EKS tertentu), dan referensi ke Akun Layanan Kubernetes yang akan terikat padanya. Setelah Peran IAM dibuat, akun layanan harus menyertakan ARN dari peran tersebut sebagai anotasi eks.amazonaws.com/role-arn (). Secara default akun layanan akan dibuat atau diperbarui untuk menyertakan anotasi peran, ini dapat dinonaktifkan menggunakan bendera--role-only.

Di dalam EKS, terdapat pengontrol penerimaan yang menyuntikkan kredensial sesi AWS ke dalam pod masing-masing peran berdasarkan anotasi pada Akun Layanan yang digunakan oleh pod. Kredensi akan diekspos oleh variabel AWS_ROLE_ARN & AWS_WEB_IDENTITY_TOKEN_FILE lingkungan. Mengingat versi AWS SDK terbaru digunakan (lihat di sini untuk detail versi yang tepat), aplikasi akan menggunakan kredensi ini.

Dalam eksctl nama sumber daya adalah iamserviceaccount, yang mewakili pasangan Akun Peran dan Layanan IAM.

Penggunaan dari CLI

catatan

Peran IAM untuk Akun Layanan memerlukan Kubernetes versi 1.13 atau lebih tinggi.

Penyedia IAM OIDC tidak diaktifkan secara default, Anda dapat menggunakan perintah berikut untuk mengaktifkannya, atau menggunakan file konfigurasi (lihat di bawah):

eksctl utils associate-iam-oidc-provider --cluster=<clusterName>

Setelah Anda memiliki Penyedia IAM OIDC yang terkait dengan cluster, untuk membuat peran IAM terikat ke akun layanan, jalankan:

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --namespace=<serviceAccountNamespace> --attach-policy-arn=<policyARN>
catatan

Anda dapat menentukan --attach-policy-arn beberapa kali untuk menggunakan lebih dari satu kebijakan.

Lebih khusus lagi, Anda dapat membuat akun layanan dengan akses hanya-baca ke S3 dengan menjalankan:

eksctl create iamserviceaccount --cluster=<clusterName> --name=s3-read-only --attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

Secara default, itu akan dibuat di default namespace, tetapi Anda dapat menentukan namespace lain, misalnya:

eksctl create iamserviceaccount --cluster=<clusterName> --name=s3-read-only --namespace=s3-app --attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
catatan

Jika namespace belum ada, itu akan dibuat.

Jika Anda memiliki akun layanan yang sudah dibuat di cluster (tanpa Peran IAM), Anda harus menggunakan --override-existing-serviceaccounts flag.

Penandaan khusus juga dapat diterapkan ke Peran IAM dengan menentukan: --tags

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --tags "Owner=John Doe,Team=Some Team"

CloudFormation akan menghasilkan nama peran yang mencakup string acak. Jika Anda lebih suka nama peran yang telah ditentukan, Anda dapat menentukan--role-name:

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --role-name "custom-role-name"

Ketika akun layanan dibuat dan dikelola oleh beberapa alat lain, seperti helm, gunakan --role-only untuk mencegah konflik. Alat lain kemudian bertanggung jawab untuk mempertahankan peran anotasi ARN. Perhatikan bahwa tidak --override-existing-serviceaccounts berpengaruh pada akunroleOnly/--role-onlylayanan, peran akan selalu dibuat.

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --role-only --role-name=<customRoleName>

Jika Anda memiliki peran yang sudah ada yang ingin Anda gunakan dengan akun layanan, Anda dapat memberikan --attach-role-arn tanda alih-alih memberikan kebijakan. Untuk memastikan peran hanya dapat diasumsikan oleh akun layanan yang ditentukan, Anda harus menetapkan dokumen kebijakan hubungan di sini].

eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --attach-role-arn=<customRoleARN>

Untuk memperbarui izin peran akun layanan yang dapat Anda jalankaneksctl update iamserviceaccount.

catatan

eksctl delete iamserviceaccountmenghapus Kubernetes ServiceAccounts meskipun tidak dibuat oleh. eksctl

Penggunaan dengan file konfigurasi

Untuk mengelola iamserviceaccounts menggunakan file konfigurasi, Anda akan mencari untuk mengatur iam.withOIDC: true dan daftar akun yang Anda inginkan di bawahiam.serviceAccount.

Semua perintah mendukung--config-file, Anda dapat mengelola iamserviceaccounts dengan cara yang sama seperti nodegroups. eksctl create iamserviceaccountPerintah mendukung --include dan --exclude menandai (lihat bagian ini untuk detail selengkapnya tentang cara kerjanya). Dan eksctl delete iamserviceaccount perintah mendukung --only-missing juga, sehingga Anda dapat melakukan penghapusan dengan cara yang sama seperti nodegroups.

catatan

Akun layanan IAM dicakup dalam namespace, yaitu dua akun layanan dengan nama yang sama mungkin ada di ruang nama yang berbeda. Jadi, untuk secara unik mendefinisikan akun layanan sebagai bagian dari--include, --exclude bendera, Anda harus meneruskan string nama dalam format. namespace/name Misalnya

eksctl create iamserviceaccount --config-file=<path> --include backend-apps/s3-reader

Opsi untuk mengaktifkan wellKnownPolicies disertakan untuk menggunakan IRSA dengan kasus penggunaan terkenal seperti cluster-autoscaler dancert-manager, sebagai singkatan untuk daftar kebijakan.

Kebijakan terkenal yang didukung dan properti lainnya serviceAccounts didokumentasikan pada skema konfigurasi.

Anda menggunakan contoh konfigurasi berikut denganeksctl create cluster:

# An example of ClusterConfig with IAMServiceAccounts: --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: cluster-13 region: us-west-2 iam: withOIDC: true serviceAccounts: - metadata: name: s3-reader # if no namespace is set, "default" will be used; # the namespace will be created if it doesn't exist already namespace: backend-apps labels: {aws-usage: "application"} attachPolicyARNs: - "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess" tags: Owner: "John Doe" Team: "Some Team" - metadata: name: cache-access namespace: backend-apps labels: {aws-usage: "application"} attachPolicyARNs: - "arn:aws:iam::aws:policy/AmazonDynamoDBReadOnlyAccess" - "arn:aws:iam::aws:policy/AmazonElastiCacheFullAccess" - metadata: name: cluster-autoscaler namespace: kube-system labels: {aws-usage: "cluster-ops"} wellKnownPolicies: autoScaler: true roleName: eksctl-cluster-autoscaler-role roleOnly: true - metadata: name: some-app namespace: default attachRoleARN: arn:aws:iam::123:role/already-created-role-for-app nodeGroups: - name: "ng-1" tags: # EC2 tags required for cluster-autoscaler auto-discovery k8s.io/cluster-autoscaler/enabled: "true" k8s.io/cluster-autoscaler/cluster-13: "owned" desiredCapacity: 1

Jika Anda membuat cluster tanpa set bidang ini, Anda dapat menggunakan perintah berikut untuk mengaktifkan semua yang Anda butuhkan:

eksctl utils associate-iam-oidc-provider --config-file=<path> eksctl create iamserviceaccount --config-file=<path>

Informasi lebih lanjut