

 **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
<a name="auth-configmap"></a>

**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](access-entries.md)

Akses ke cluster Anda menggunakan prinsi [ pal IAM ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal) diaktifkan oleh [AWS IAM Authenticator untuk Kubernetes](https://github.com/kubernetes-sigs/aws-iam-authenticator#readme), yang berjalan di bidang kontrol Amazon EKS. Authenticator mendapatkan informasi konfigurasinya dari `aws-auth``ConfigMap`. Untuk semua `aws-auth` `ConfigMap` pengaturan, lihat Format Konfigurasi Pen [https://github.com/kubernetes-sigs/aws-iam-authenticator#full-configuration-format](https://github.com/kubernetes-sigs/aws-iam-authenticator#full-configuration-format) uh aktif GitHub.

## Tambahkan prinsipal IAM ke cluster Amazon EKS Anda
<a name="aws-auth-users"></a>

Saat Anda membuat cluster Amazon EKS, prinsipal [ IAM ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal) 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. ](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)

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 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 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) 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-auth``ConfigMap`. Hanya peran instance node yang memiliki akses ke cluster.

1. 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 ](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) dalam dokumentasi Kubernetes.

   1. Lihat Kubernet `roles` es Anda yang ada atau. `clusterroles` `Roles`dicakup ke a`namespace`, tetapi `clusterroles` dicakup ke cluster.

      ```
      kubectl get roles -A
      ```

      ```
      kubectl get clusterroles
      ```

   1. 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 dari`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
      ```

   1. Lihat Kubernet `rolebindings` es Anda yang ada atau. `clusterrolebindings` `Rolebindings`dicakup ke a`namespace`, tetapi `clusterrolebindings` dicakup ke cluster.

      ```
      kubectl get rolebindings -A
      ```

      ```
      kubectl get clusterrolebindings
      ```

   1. 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 untuk`subjects`.

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

      ```
      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
      ```

1. Edit `aws-auth``ConfigMap`. Anda dapat menggunakan alat seperti `eksctl` untuk memperbarui `ConfigMap` atau Anda dapat memperbaruinya secara manual dengan mengeditnya.
**penting**  
Sebaiknya gunakan`eksctl`, atau alat lain, untuk mengedit`ConfigMap`. Untuk informasi tentang alat lain yang dapat Anda gunakan, lihat [ Menggunakan alat untuk membuat perubahan pada aws-auth ConfigMap ](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#use-tools-to-make-changes-to-the-aws-auth-configmap) di panduan praktik terbaik Amazon EKS. Format yang tidak benar `aws-auth` `ConfigMap` dapat menyebabkan Anda kehilangan akses ke cluster Anda.
   + Lihat langkah-langkah untuk [ mengedit configmap dengan ek ](#configmap-eksctl) sctl.
   + Lihat langkah-langkah untuk [ mengedit configmap secara manual](#configmap-manual).

### Edit ConfigMap dengan eksctl
<a name="configmap-eksctl"></a>

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 memperbarui`eksctl`, lihat [ Instal `eksctl` asi ](https://eksctl.io/installation) di dokumentasi.

1. 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
   ```

1. 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 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
   ```

1. Tambahkan pemetaan untuk pengguna. [Praktik terbaik IAM ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) 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
   ```

1. 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
<a name="configmap-manual"></a>

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 ](#aws-auth-configmap) untuk menerapkan stok. `ConfigMap`

1. 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)): ** Tambahkan detail peran ke `mapRoles` bagian`ConfigMap`, 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` atau`rolebinding`. Untuk informasi selengkapnya, lihat [ Peran default dan binding peran ](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#default-roles-and-role-bindings) dalam dokumentasi Kubernetes.
   +  **Untuk menambahkan pengguna IAM: Prakti ** [ k terbaik IAM ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) menyarankan Anda memberikan izin ke peran, bukan pengguna. Tambahkan detail pengguna ke `mapUsers` bagian`ConfigMap`, di bawah`data`. 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` atau`rolebinding`. Untuk informasi selengkapnya, lihat [ Peran default dan binding peran ](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#default-roles-and-role-bindings) dalam dokumentasi Kubernetes.

   <a name="auth-configmap-template-variables"></a>=== Variabel template untuk dan `username` `groups` 

`groups`Bid `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 dengan`sts: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 dengan`sts: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 (seperti`system:`,,,, 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:
+ `mapRoles`Bagian 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](view-kubernetes-resources.md#view-kubernetes-resources-permissions)
+ `mapUsers`Bagian 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](view-kubernetes-resources.md#view-kubernetes-resources-permissions)

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`
<a name="aws-auth-configmap"></a>

Secara otomatis `aws-auth` `ConfigMap` dibuat dan diterapkan ke cluster Anda saat Anda membuat grup node terkelola atau ketika Anda membuat grup node menggunakan`eksctl`. 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-auth``ConfigMap`.

   ```
   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 stok`ConfigMap`.

1. 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
      ```

   1. 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-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 

   1. 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`)](troubleshooting.md#unauthorized) pemecahan masalah.

1. Perhatikan status simpul Anda dan tunggu sampai simpul mencapai Status `Ready`.

   ```
   kubectl get nodes --watch
   ```

   Masukkan `Ctrl`\+`C` untuk kembali ke prompt shell.