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 penerimaanAWS_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-only
layanan, 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 iamserviceaccount
menghapus 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 iamserviceaccount
Perintah 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>