

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
<a name="iamserviceaccounts"></a>

**Tip**  
 `eksctl`[mendukung konfigurasi izin berbutir halus ke aplikasi yang menjalankan EKS melalui Asosiasi Identitas Pod EKS](pod-identity-associations.md) 

Amazon EKS mendukung [Roles](https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html#access-policy-permissions) 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](iam-policies.md), dan mempertimbangkan untuk menggunakan IRSA sebagai gantinya, Anda tidak boleh mencampur keduanya.

## Cara kerjanya
<a name="iam-how-works"></a>

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 penerimaan](https://github.com/aws/amazon-eks-pod-identity-webhook/) yang menyuntikkan kredensial sesi AWS ke dalam pod masing-masing peran berdasarkan anotasi pada Akun Layanan yang digunakan oleh pod. Kredensi akan diekspos oleh variabel `AWS_ROLE_ARN` & `AWS_WEB_IDENTITY_TOKEN_FILE` lingkungan. Mengingat versi AWS SDK terbaru digunakan (lihat [di sini](https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html#access-policy-permissions) 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
<a name="_usage_from_cli"></a>

**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 akun`roleOnly`/`--role-only`layanan, peran akan selalu dibuat.

```
eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --role-only --role-name=<customRoleName>
```

Bila 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](https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html#access-policy-permissions)].

```
eksctl create iamserviceaccount --cluster=<clusterName> --name=<serviceAccountName> --attach-role-arn=<customRoleARN>
```

Untuk memperbarui izin peran akun layanan yang dapat Anda jalankan`eksctl update iamserviceaccount`.

**catatan**  
 `eksctl delete iamserviceaccount`menghapus Kubernetes `ServiceAccounts` meskipun tidak dibuat oleh. `eksctl`

## Penggunaan dengan file konfigurasi
<a name="_usage_with_config_files"></a>

Untuk mengelola `iamserviceaccounts` menggunakan file konfigurasi, Anda akan mencari untuk mengatur `iam.withOIDC: true` dan daftar akun yang Anda inginkan di bawah`iam.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](general-nodegroups.md#node-include) 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` dan`cert-manager`, sebagai singkatan untuk daftar kebijakan.

Kebijakan terkenal yang didukung dan properti lainnya `serviceAccounts` didokumentasikan [pada skema konfigurasi](https://geoffcline.github.io/eksctl-schema-demo/#iam-serviceAccounts).

Anda menggunakan contoh konfigurasi berikut dengan`eksctl 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>
```

## Informasi lebih lanjut
<a name="_further_information"></a>
+  [Memperkenalkan Peran IAM Berbutir Halus Untuk Akun Layanan](https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/) 
+  [Panduan Pengguna EKS - Peran IAM Untuk Akun Layanan](https://docs.aws.amazon.com/eks/latest/userguide/access-policies.html#access-policy-permissions) 
+  [Memetakan pengguna IAM dan peran ke peran RBAC Kubernetes](iam-identity-mappings.md) 