Berikan pengguna IAM akses ke Kubernetes dengan ConfigMap - Amazon EKS

View a markdown version of this page

Berikan pengguna IAM akses ke Kubernetes dengan ConfigMap - Amazon EKS

Bantu meningkatkan halaman ini

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

Untuk berkontribusi pada panduan pengguna ini, pilih GitHub tautan Edit halaman ini di yang terletak di panel kanan setiap halaman.

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

Berikan pengguna IAM akses ke Kubernetes dengan ConfigMap

penting

Itu aws-auth ConfigMap sudah usang. Untuk metode yang disarankan untuk mengelola akses ke API Kubernetes, lihat. Berikan akses kepada pengguna IAM ke Kubernetes dengan entri akses EKS

Akses ke cluster Anda menggunakan prinsi pal IAM diaktifkan oleh AWS IAM Authenticator untuk Kubernetes, yang berjalan di bidang kontrol Amazon EKS. Authenticator mendapatkan informasi konfigurasinya dari aws-authConfigMap. Untuk semua aws-auth ConfigMap pengaturan, lihat Format Konfigurasi Pen https://github.com/kubernetes-sigs/aws-iam-authenticator#full-configuration-format uh aktif GitHub.

Tambahkan prinsipal IAM ke cluster Amazon EKS Anda

Saat Anda membuat cluster Amazon EKS, prinsipal IAM yang membuat cluster secara otomatis diberikan system:masters izin dalam konfigurasi kontrol akses berbasis peran (RBAC) cluster di bidang kontrol Amazon EKS. Prinsip ini tidak muncul dalam konfigurasi yang terlihat, jadi pastikan untuk melacak prinsipal mana yang awalnya membuat cluster. Untuk memberikan prinsipal IAM tambahan kemampuan untuk berinteraksi dengan cluster Anda, edit di aws-auth ConfigMap dalam Kubernetes dan buat Kubernetes rolebinding atau clusterrolebinding dengan nama yang Anda tentukan di. group aws-auth ConfigMap

catatan

Untuk informasi selengkapnya tentang konfigurasi kontrol akses berbasis peran (RBAC) Kubernetes, lihat Menggunakan Otorisasi RBAC dalam dokumentasi Kubernetes.

  1. Tentukan kreden kubectl sional mana yang digunakan untuk mengakses cluster Anda. Di komputer Anda, Anda dapat melihat kredenSIAL kubectl mana yang digunakan dengan perintah berikut. Ganti ~/.kube/config dengan path ke kubeconfig file Anda jika Anda tidak menggunakan jalur default.

    cat ~/.kube/config

    Contoh output adalah sebagai berikut.

    [...] contexts: - context: cluster: my-cluster.region-code.eksctl.io user: admin@my-cluster.region-code.eksctl.io name: admin@my-cluster.region-code.eksctl.io current-context: admin@my-cluster.region-code.eksctl.io [...]

    Dalam contoh output sebelumnya, kredenSIAL untuk pengguna bernama admin dikonfigurasi untuk cluster bernamamy-cluster. Jika ini adalah pengguna yang membuat cluster, maka ia sudah memiliki akses ke cluster Anda. Jika bukan pengguna yang membuat cluster, maka Anda perlu menyelesaikan langkah-langkah yang tersisa untuk mengaktifkan akses cluster untuk prinsipal IAM lainnya. Praktik terbaik IAM menyarankan agar Anda memberikan izin untuk peran, bukan pengguna. Anda dapat melihat prinsipal lain mana yang saat ini memiliki akses ke cluster Anda dengan perintah berikut:

    kubectl describe -n kube-system configmap/aws-auth

    Contoh output adalah sebagai berikut.

    Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws: iam::111122223333:role/my-node-role username: system:node:{{EC2PrivateDNSName}} BinaryData ==== Events: <none>

    Contoh sebelumnya adalah default aws-authConfigMap. Hanya peran instance node yang memiliki akses ke cluster.

  2. Pastikan bahwa Anda memiliki Kubernetes roles dan rolebindings atau yang sudah ada clusterroles dan clusterrolebindings bahwa Anda dapat memetakan prinsip-prinsip IAM ke. Untuk informasi selengkapnya tentang sumber daya ini, lihat Menggunakan Otorisasi RBAC dalam dokumentasi Kubernetes.

    1. Lihat Kubernet roles es Anda yang ada atau. clusterroles Rolesdicakup ke anamespace, tetapi clusterroles dicakup ke cluster.

      kubectl get roles -A
      kubectl get clusterroles
    2. Lihat detail dari setiap role atau yang clusterrole dikembalikan dalam output sebelumnya dan konfirmasikan bahwa ia memiliki izin (rules) yang Anda inginkan untuk dimiliki oleh prinsipal IAM Anda di cluster Anda.

      Ganti role-name dengan role nama yang dikembalikan dalam output dari perintah sebelumnya. Ganti kube-system dengan namespace darirole.

      kubectl describe role role-name -n kube-system

      Ganti cluster-role-name dengan clusterrole nama yang dikembalikan dalam output dari perintah sebelumnya.

      kubectl describe clusterrole cluster-role-name
    3. Lihat Kubernet rolebindings es Anda yang ada atau. clusterrolebindings Rolebindingsdicakup ke anamespace, tetapi clusterrolebindings dicakup ke cluster.

      kubectl get rolebindings -A
      kubectl get clusterrolebindings
    4. Lihat detail dari rolebinding atau clusterrolebinding dan konfirmasikan bahwa itu memiliki role atau clusterrole dari langkah sebelumnya yang terdaftar sebagai roleRef a dan nama grup yang terdaftar untuksubjects.

      Ganti role-binding-name dengan rolebinding nama yang dikembalikan dalam output dari perintah sebelumnya. Ganti kube-system dengan namespace darirolebinding.

      kubectl describe rolebinding role-binding-name -n kube-system

      Contoh output adalah sebagai berikut.

      apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-console-dashboard-restricted-access-role-binding namespace: default subjects: - kind: Group name: eks-console-dashboard-restricted-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-console-dashboard-restricted-access-role apiGroup: rbac.authorization.k8s.io

      Ganti cluster-role-binding-name dengan clusterrolebinding nama yang dikembalikan dalam output dari perintah sebelumnya.

      kubectl describe clusterrolebinding cluster-role-binding-name

      Contoh output adalah sebagai berikut.

      apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-console-dashboard-full-access-binding subjects: - kind: Group name: eks-console-dashboard-full-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: eks-console-dashboard-full-access-clusterrole apiGroup: rbac.authorization.k8s.io
  3. Edit aws-authConfigMap. Anda dapat menggunakan alat seperti eksctl untuk memperbarui ConfigMap atau Anda dapat memperbaruinya secara manual dengan mengeditnya.

    penting

    Sebaiknya gunakaneksctl, atau alat lain, untuk mengeditConfigMap. Untuk informasi tentang alat lain yang dapat Anda gunakan, lihat Menggunakan alat untuk membuat perubahan pada aws-auth ConfigMap di panduan praktik terbaik Amazon EKS. Format yang tidak benar aws-auth ConfigMap dapat menyebabkan Anda kehilangan akses ke cluster Anda.

Edit ConfigMap dengan eksctl

  1. Anda memerlukan versi 0.215.0 atau yang lebih baru dari alat baris eksctl perintah yang diinstal pada perangkat Anda atau AWS CloudShell. Untuk menginstal atau memperbaruieksctl, lihat Instal eksctl asi di dokumentasi.

  2. Lihat pemetaan saat ini di. ConfigMap Ganti my-cluster dengan nama klaster Anda. Ganti region-code dengan AWS Wilayah tempat cluster Anda berada.

    eksctl get iamidentitymapping --cluster my-cluster --region=region-code

    Contoh output adalah sebagai berikut.

    ARN USERNAME GROUPS ACCOUNT arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
  3. Tambahkan pemetaan untuk peran. Ganti my-role dengan nama peran Anda. Ganti eks-console-dashboard-full-access-group dengan nama grup yang ditentukan di Kubernetes RoleBinding atau objek Anda. ClusterRoleBinding Ganti 111122223333 dengan ID akun Anda. Anda dapat mengganti admin dengan nama apa pun yang Anda pilih.

    eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws: iam::111122223333:role/my-role --username admin --group eks-console-dashboard-full-access-group \ --no-duplicate-arns
    penting

    Peran ARN tidak dapat menyertakan jalur sepertirole/my-team/developers/my-role. Format ARN harus arn:aws: iam::111122223333:role/my-role . Dalam contoh ini, my-team/developers/ perlu dihapus.

    Contoh output adalah sebagai berikut.

    [...] 2022-05-09 14:51:20 [ℹ] adding identity "{arn-aws}iam::111122223333:role/my-role" to auth ConfigMap
  4. Tambahkan pemetaan untuk pengguna. Praktik terbaik IAM menyarankan agar Anda memberikan izin untuk peran, bukan pengguna. Ganti my-user dengan nama pengguna Anda. Ganti eks-console-dashboard-restricted-access-group dengan nama grup yang ditentukan di Kubernetes RoleBinding atau objek Anda. ClusterRoleBinding Ganti 111122223333 dengan ID akun Anda. Anda dapat mengganti my-user dengan nama apa pun yang Anda pilih.

    eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws: iam::111122223333:user/my-user --username my-user --group eks-console-dashboard-restricted-access-group \ --no-duplicate-arns

    Contoh output adalah sebagai berikut.

    [...] 2022-05-09 14:53:48 [ℹ] adding identity "arn:aws: iam::111122223333:user/my-user" to auth ConfigMap
  5. Lihat pemetaan di bagian lain. ConfigMap

    eksctl get iamidentitymapping --cluster my-cluster --region=region-code

    Contoh output adalah sebagai berikut.

    ARN USERNAME GROUPS ACCOUNT arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes arn:aws: iam::111122223333:role/admin my-role eks-console-dashboard-full-access-group arn:aws: iam::111122223333:user/my-user my-user eks-console-dashboard-restricted-access-group

Edit ConfigMap secara manual

  1. Buka ConfigMap untuk mengedit.

    kubectl edit -n kube-system configmap/aws-auth
    catatan

    Jika Anda menerima kesalahan yang menyatakan "Error from server (NotFound): configmaps "aws-auth" not found“, maka gunakan prosedur di Ter apkan aws-auth ConfigMap ke cluster Anda untuk menerapkan stok. ConfigMap

  2. Tambahkan prinsipal IAM Anda ke. ConfigMap Grup IAM bukan prinsipal IAM, jadi tidak dapat ditambahkan ke. ConfigMap

    • Untuk menambahkan peran IAM (misalnya, untuk pengguna federasi): Tambahkan detail peran ke mapRoles bagianConfigMap, di bawah. data Tambahkan bagian ini jika belum ada di dalam file. Setiap masuk mendukung parameter berikut:

      • rolearn: ARN IAM role untuk menambahkan. Nilai ini tidak dapat menyertakan jalur. Misalnya, Anda tidak dapat menentukan ARN seperti arn:aws: iam::111122223333:role/my-team/developers/role-name . ARN harus sebagai arn:aws: iam::111122223333:role/role-name gantinya.

      • nama pengguna: Nama pengguna dalam Kubernetes untuk memetakan ke dalam IAM role.

      • group: Grup atau daftar grup Kubernetes untuk memetakan peran. Grup dapat berupa grup default, atau grup yang ditentukan dalam clusterrolebinding ataurolebinding. Untuk informasi selengkapnya, lihat Peran default dan binding peran dalam dokumentasi Kubernetes.

    • Untuk menambahkan pengguna IAM: Prakti k terbaik IAM menyarankan Anda memberikan izin ke peran, bukan pengguna. Tambahkan detail pengguna ke mapUsers bagianConfigMap, di bawahdata. Tambahkan bagian ini jika belum ada di dalam file. Setiap entri mendukung parameter berikut:

      • userarn: ARN pengguna IAM untuk ditambahkan.

      • nama pengguna: nama pengguna dalam Kubernetes untuk memetakan ke pengguna IAM.

      • group: Grup, atau daftar grup Kubernetes untuk memetakan pengguna. Grup dapat berupa grup default, atau grup yang ditentukan dalam clusterrolebinding ataurolebinding. Untuk informasi selengkapnya, lihat Peran default dan binding peran dalam dokumentasi Kubernetes.

    === Variabel template untuk dan username groups

groupsBid username ang dan di kedua mapRoles dan mapUsers entri mendukung variabel template yang diganti AWS IAM Authenticator pada waktu otentikasi. Variabel template berikut tersedia:

{{AccountID}}

ID AWS akun 12 digit dari prinsipal IAM yang diautentikasi.

{{SessionName}}

Nama sesi peran STS, dengan @ karakter diganti oleh-. Untuk peran instans EC2, ini adalah ID instans. Untuk peran federasi, ini adalah identitas federasi. Untuk peran yang diasumsikan dengansts:AssumeRole, ini adalah nilai RoleSessionName parameter yang ditetapkan oleh pemanggil.

{{SessionNameRaw}}

Nama sesi peran STS mentah tanpa penggantian karakter apa pun.

{{AccessKeyID}}

ID kunci AWS akses yang digunakan untuk mengotentikasi permintaan.

{{EC2PrivateDNSName}}

Nama DNS pribadi dari instance EC2. Variabel ini mengharuskan nama sesi menjadi ID instans EC2 yang valid dan membuat panggilan ec2:DescribeInstances API.

penting

{{SessionNameRaw}}Nilai {{SessionName}} dan dikendalikan pengguna ketika peran diasumsikan dengansts:AssumeRole. Pemanggil menetapkan RoleSessionName parameter ke string yang hampir sewenang-wenang. Jika Anda menggunakan variabel ini di username lapangan, pemanggil yang dapat mengasumsikan peran yang dipetakan dapat menyamar sebagai nama pengguna Kubernetes apa pun yang tidak cocok dengan awalan yang dicadangkan (sepertisystem:,,,, atau). eks: aws: amazon: iam: Jika Anda menggunakan variabel-variabel ini di groups lapangan, pemanggil dapat memilih keanggotaan grup Kubernetes mereka sendiri dengan menyusun nama sesi. Hanya gunakan {{SessionName}} atau {{SessionNameRaw}} dalam username atau groups jika Anda mempercayai semua kepala sekolah yang dapat mengambil peran tersebut.

Misalnya, blok YAML berikut berisi:

  • mapRolesBagian yang memetakan instance node IAM ke grup Kubernetes sehingga node dapat mendaftarkan diri dengan cluster dan peran my-console-viewer-role IAM yang dipetakan ke grup Kubernetes yang dapat melihat semua sumber daya Kubernetes untuk semua cluster. Untuk daftar izin grup IAM dan Kubernetes yang diperlukan untuk peran my-console-viewer-role IAM, lihat. Izin yang diperlukan

  • mapUsersBagian yang memetakan pengguna admin IAM dari AWS akun default ke grup system:masters Kubernetes dan my-user pengguna dari AWS akun lain yang dipetakan ke grup Kubernetes yang dapat melihat sumber daya Kubernetes untuk namespace tertentu. Untuk daftar izin grup IAM dan Kubernetes yang diperlukan untuk pengguna my-user IAM, lihat. Izin yang diperlukan

Tambahkan atau hapus baris seperlunya dan ganti semua nilai contoh dengan nilai Anda sendiri.

# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws: iam::111122223333:role/my-role username: system:node:{{EC2PrivateDNSName}} - groups: - eks-console-dashboard-full-access-group rolearn: arn:aws: iam::111122223333:role/my-console-viewer-role username: my-console-viewer-role mapUsers: | - groups: - system:masters userarn: arn:aws: iam::111122223333:user/admin username: admin - groups: - eks-console-dashboard-restricted-access-group userarn: arn:aws: iam::444455556666:user/my-user username: my-user
  1. Simpan file dan keluar dari editor teks Anda.

Terapkan aws-auth ke cluster Anda ConfigMap

Secara otomatis aws-auth ConfigMap dibuat dan diterapkan ke cluster Anda saat Anda membuat grup node terkelola atau ketika Anda membuat grup node menggunakaneksctl. Ini awalnya dibuat untuk memungkinkan node bergabung dengan cluster Anda, tetapi Anda juga menggunakan ini ConfigMap untuk menambahkan akses kontrol akses berbasis peran (RBAC) ke prinsipal IAM. Jika Anda telah meluncurkan node yang dikelola sendiri dan belum menerap aws-auth ConfigMap kannya ke cluster Anda, Anda dapat melakukannya dengan prosedur berikut.

  1. Periksa untuk melihat apakah Anda sudah menerapkan aws-authConfigMap.

    kubectl describe configmap -n kube-system aws-auth

    Jika Anda menerima kesalahan yang menyatakan "Error from server (NotFound): configmaps "aws-auth" not found“, lanjutkan dengan langkah-langkah berikut untuk menerapkan stokConfigMap.

  2. Unduh, edit, dan terapkan peta AWS konfigurasi otentikator.

    1. Unduh peta konfigurasi.

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Dalam aws-auth-cm.yaml file, atur rolearn ke Amazon Resource Name (ARN) dari peran IAM yang terkait dengan node Anda. Anda dapat melakukan ini dengan editor teks, atau dengan mengganti my-node-instance-role dan menjalankan perintah berikut:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml

      Jangan memodifikasi baris lain dalam file ini.

      penting

      Peran ARN tidak dapat menyertakan jalur sepertirole/my-team/developers/my-role. Format ARN harus arn:aws: iam::111122223333:role/my-role . Dalam contoh ini, my-team/developers/ perlu dihapus.

      Anda dapat memeriksa output AWS CloudFormation tumpukan untuk grup node Anda dan mencari nilai-nilai berikut:

      • InstanceRoleARN — Untuk grup node yang dibuat dengan eksctl

      • NodeInstanceRole— Untuk grup simpul yang dibuat dengan AWS CloudFormation templat yang dijual Amazon EKS di Konsol Manajemen AWS

    3. Terapkan konfigurasi. Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan.

      kubectl apply -f aws-auth-cm.yaml
      catatan

      Jika Anda menerima kesalahan jenis otorisasi atau sumber daya, lihat topik Tidak sah atau akses ditolak (kubectl) pemecahan masalah.

  3. Perhatikan status simpul Anda dan tunggu sampai simpul mencapai Status Ready.

    kubectl get nodes --watch

    Masukkan Ctrl+C untuk kembali ke prompt shell.