Mengaktifkan akses utama IAM ke klaster Anda - 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.

Mengaktifkan akses utama IAM ke klaster Anda

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

Tambahkan prinsipal IAM ke kluster Amazon EKS Anda

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

catatan

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

Untuk menambahkan prinsipal IAM ke cluster Amazon EKS
  1. Tentukan kredensil 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 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 sudah ada Kubernetes roles dan rolebindings atau clusterroles dan clusterrolebindings bahwa Anda dapat memetakan prinsipal IAM ke. Untuk informasi selengkapnya tentang sumber daya ini, lihat Menggunakan Otorisasi RBAC dalam dokumentasi. Kubernetes

    1. Lihat yang ada Kubernetes roles atauclusterroles. 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 prinsipal IAM Anda di cluster 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 ada Kubernetes rolebindings atauclusterrolebindings. 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 terbaik Amazon EKS. Format yang tidak benar aws-auth ConfigMap dapat menyebabkan Anda kehilangan akses ke cluster Anda.

    eksctl
    Prasyarat

    Versi 0.183.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 ClusterRoleBinding objek Kubernetes RoleBinding atau Anda. 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 seperti. role/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
    3. 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 dalam ClusterRoleBinding objek Kubernetes RoleBinding atau Anda. Ganti 111122223333 dengan ID akun Anda. Anda dapat mengganti pengguna saya 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 prinsip IAM Anda ke. ConfigMap Grup IAM bukanlah prinsipal IAM, sehingga 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 gantinya. arn:aws:iam::111122223333:role/role-name

        • username: Nama pengguna dalam Kubernetes untuk memetakan ke peran IAM.

        • grup: Grup atau daftar Kubernetes grup 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: Praktik 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.

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

        • grup: 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 dalam dokumentasi. Kubernetes

      Misalnya, blok YAMAL berikut berisi:

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

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

      Tambahkan atau hapus baris seperlunya dan ganti semua example valuesdengan 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 prinsip-prinsip IAM. 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) 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 seperti. role/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 berikut:

      • InstanceRoleARN — Untuk grup simpul yang dibuat dengan eksctl

      • NodeInstancePeran - Untuk grup simpul yang dibuat dengan AWS CloudFormation templat penjual Amazon EKS 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.