Pemberian Izin IAM akses pengguna ke Kubernetes dengan ConfigMap - Amazon EKS

Bantu tingkatkan halaman ini

Ingin berkontribusi pada panduan pengguna ini? Gulir ke bagian bawah halaman ini dan pilih Edit halaman ini GitHub. Kontribusi Anda akan membantu membuat panduan pengguna kami lebih baik untuk semua orang.

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

Pemberian Izin IAM akses pengguna ke Kubernetes dengan ConfigMap

penting

Sebuah aws-auth ConfigMap sudah usang. Metode yang disarankan untuk mengelola akses ke Kubernetes APIsadalah Entri Akses.

Akses ke klaster Anda menggunakan IAMprinsipal diaktifkan oleh Authenticator for AWS IAM Kubernetes, yang berjalan di pesawat EKS kontrol Amazon. Authenticator mendapatkan informasi konfigurasinya dari file. aws-auth ConfigMap Untuk semua aws-auth ConfigMap pengaturan, lihat Format Konfigurasi Lengkap di GitHub.

Tambahkan IAM prinsipal ke cluster Amazon Anda EKS

Saat Anda membuat EKS klaster Amazon, IAMprinsipal yang membuat klaster secara otomatis diberikan system:masters izin dalam konfigurasi kontrol akses (RBAC) berbasis peran klaster di bidang kontrol AmazonEKS. Prinsipal ini tidak muncul dalam konfigurasi yang terlihat, jadi pastikan untuk melacak prinsipal mana yang awalnya membuat cluster. Untuk memberikan IAM kepala sekolah tambahan kemampuan untuk berinteraksi dengan klaster Anda, edit bagian dalamnya aws-auth ConfigMap Kubernetes dan membuat Kubernetes rolebindingatau clusterrolebinding dengan nama a group yang Anda tentukan diaws-auth ConfigMap.

catatan

Untuk informasi lebih lanjut tentang Kubernetes konfigurasi kontrol akses berbasis peran (RBAC), lihat Menggunakan RBAC Otorisasi di Kubernetes dokumentasi.

Untuk menambahkan IAM prinsipal ke EKS cluster Amazon
  1. Tentukan kredenal mana yang kubectl digunakan untuk mengakses klaster Anda. Di komputer Anda, Anda dapat melihat kredenal mana yang kubectl digunakan dengan perintah berikut. Ganti ~/.kube/config dengan jalur 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 keluaran sebelumnya, kredensial untuk pengguna bernama admin dikonfigurasi untuk klaster bernama. my-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 IAM prinsipal lain. IAMpraktik terbaik merekomendasikan 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 Anda sudah ada Kubernetes rolesdan rolebindings atau clusterroles dan Anda clusterrolebindings dapat memetakan IAM prinsipal ke. Untuk informasi selengkapnya tentang sumber daya ini, lihat Menggunakan RBAC Otorisasi di Kubernetes dokumentasi.

    1. Lihat yang sudah ada Kubernetes rolesatauclusterroles. Rolesdicakup ke anamespace, tetapi clusterroles dicakup ke cluster.

      kubectl get roles -A
      kubectl get clusterroles
    2. Lihat detail apa pun role atau yang clusterrole dikembalikan di keluaran sebelumnya dan konfirmasikan bahwa ia memiliki izin (rules) yang Anda inginkan untuk dimiliki oleh IAM prinsipal Anda di klaster Anda.

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

      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 yang sudah ada Kubernetes rolebindingsatauclusterrolebindings. Rolebindingsdicakup ke anamespace, tetapi clusterrolebindings dicakup ke cluster.

      kubectl get rolebindings -A
      kubectl get clusterrolebindings
    4. Lihat detail apa pun rolebinding atau clusterrolebinding dan konfirmasikan bahwa ia memiliki role atau clusterrole dari langkah sebelumnya yang terdaftar sebagai roleRef 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

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

    eksctl
    Prasyarat

    Versi 0.191.0 atau yang lebih baru dari alat baris eksctl perintah yang diinstal pada perangkat Anda atau AWS CloudShell. Untuk menginstal atau memperbaruieksctl, lihat Instalasi dalam eksctl dokumentasi.

    1. Lihat pemetaan saat ini di. ConfigMap Ganti my-cluster dengan nama klaster Anda. Ganti region-code dengan tempat Wilayah AWS 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
    2. Tambahkan pemetaan untuk peran. Ganti my-role dengan nama peran Anda. Ganti eks-console-dashboard-full-access-group dengan nama grup yang ditentukan dalam Kubernetes RoleBindingatau ClusterRoleBinding objek. 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 tidak ARN dapat mencakup jalur sepertirole/my-team/developers/my-role. Format ARN harusarn: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
    3. Tambahkan pemetaan untuk pengguna. IAMpraktik terbaik merekomendasikan 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 dalam Kubernetes RoleBindingatau ClusterRoleBinding objek. 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
    4. Lihat pemetaan di lagi. 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 manually
    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 Terapkan aws-authConfigMap ke cluster Anda untuk menerapkan stokConfigMap.

    2. Tambahkan IAM prinsipal Anda ke. ConfigMap Sebuah IAM grup bukanlah IAM prinsipal, jadi tidak dapat ditambahkan keConfigMap.

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

        • rolearn: ARN IAM Peran yang harus ditambahkan. Nilai ini tidak dapat menyertakan jalur. Misalnya, Anda tidak dapat menentukan ARN sepertiarn:aws:iam::111122223333:role/my-team/developers/role-name. ARNKebutuhan untuk menjadi arn:aws:iam::111122223333:role/role-name gantinya.

        • Nama pengguna: Nama pengguna di dalam Kubernetes untuk memetakan IAM peran.

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

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

        • userarn: IAM Pengguna untuk menambahkan. ARN

        • Nama pengguna: Nama pengguna di dalam Kubernetes untuk memetakan ke IAM pengguna.

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

      Misalnya, YAML blok berikut berisi:

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

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

      Tambahkan atau hapus baris seperlunya dan ganti semua nilai contoh dengan nilai-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
    3. Simpan file dan keluar dari editor teks Anda.

Terapkan aws-authConfigMap ke cluster Anda

Secara otomatis aws-auth ConfigMap dibuat dan diterapkan ke cluster Anda ketika 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 IAM prinsipal. Jika Anda telah meluncurkan node yang dikelola sendiri dan belum menerapkannya aws-auth ConfigMap ke cluster Anda, Anda dapat melakukannya dengan prosedur berikut.

Untuk menerapkan aws-authConfigMap ke cluster Anda
  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“, maka lanjutkan dengan langkah-langkah berikut untuk menerapkan stokConfigMap.

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

    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) IAM peran 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 tidak ARN dapat mencakup jalur sepertirole/my-team/developers/my-role. Format ARN harusarn: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 berikut:

      • InstanceRoleARN— Untuk grup node yang dibuat dengan eksctl

      • NodeInstanceRole— Untuk grup simpul yang dibuat dengan AWS CloudFormation templat EKS penjual Amazon di AWS Management Console

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

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

      Jika Anda menerima kesalahan otorisasi atau jenis sumber daya, lihat Tidak sah atau akses ditolak (kubectl) di topik 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.