

 **Bantu tingkatkan 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 **Edit halaman ini pada GitHub** tautan 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.

# Tetapkan peran IAM ke akun layanan Kubernetes
<a name="associate-service-account-role"></a>

Topik ini membahas cara mengonfigurasi akun layanan Kubernetes untuk mengambil peran AWS Identity and Access Management (IAM). Pod apa pun yang dikonfigurasi untuk menggunakan akun layanan kemudian dapat mengakses AWS layanan apa pun yang perannya memiliki izin untuk diakses.

## Prasyarat
<a name="_prerequisites"></a>
+ Sebuah klaster yang sudah ada. Jika Anda tidak memilikinya, Anda dapat membuatnya dengan mengikuti salah satu panduan di[Memulai dengan Amazon EKS](getting-started.md).
+ Penyedia IAM OpenID Connect (OIDC) yang sudah ada untuk klaster Anda. Untuk mengetahui apakah Anda sudah memilikinya atau cara membuatnya, lihat[Buat penyedia IAM OIDC untuk klaster Anda](enable-iam-roles-for-service-accounts.md).
+ Versi `2.12.3` atau yang lebih baru atau versi `1.27.160` atau yang lebih baru dari AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi pada perangkat Anda atau. AWS CloudShell Untuk memeriksa versi Anda saat ini, gunakan`aws --version | cut -d / -f2 | cut -d ' ' -f1`. Package manager seperti `yum``apt-get`,, atau Homebrew untuk macOS seringkali merupakan beberapa versi di belakang versi terbaru CLI. AWS Untuk menginstal versi terbaru, lihat [Menginstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dan [Konfigurasi cepat dengan aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) di *Panduan Pengguna Antarmuka Baris AWS Perintah*. Versi AWS CLI yang diinstal AWS CloudShell mungkin juga beberapa versi di belakang versi terbaru. Untuk memperbaruinya, lihat [Menginstal AWS CLI ke direktori home Anda](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software) di * AWS CloudShell Panduan Pengguna*.
+ Alat baris `kubectl` perintah diinstal pada perangkat Anda atau AWS CloudShell. Versinya bisa sama dengan atau hingga satu versi minor lebih awal atau lebih lambat dari versi Kubernetes dari klaster Anda. Misalnya, jika versi cluster Anda`1.29`, Anda dapat menggunakan `kubectl` versi`1.28`,`1.29`, atau `1.30` dengan itu. Untuk menginstal atau memutakhirkan `kubectl`, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).
+ `kubectl``config`File yang sudah ada yang berisi konfigurasi cluster Anda. Untuk membuat `kubectl` `config` file, lihat[Connect kubectl ke kluster EKS dengan membuat file kubeconfig](create-kubeconfig.md).

## Langkah 1: Buat Kebijakan IAM
<a name="irsa-associate-role-procedure"></a>

Jika Anda ingin mengaitkan kebijakan IAM yang ada dengan peran IAM Anda, lewati ke langkah berikutnya.

1. Buat kebijakan IAM. Anda dapat membuat kebijakan sendiri, atau menyalin kebijakan AWS terkelola yang telah memberikan beberapa izin yang Anda perlukan dan menyesuaikannya dengan persyaratan spesifik Anda. Untuk informasi selengkapnya, lihat [Membuat kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) dalam *Panduan Pengguna IAM*.

1. Buat file yang menyertakan izin untuk AWS layanan yang ingin diakses oleh Pod. Untuk daftar semua tindakan untuk semua AWS layanan, lihat [Referensi Otorisasi Layanan](https://docs.aws.amazon.com/service-authorization/latest/reference/).

   Anda dapat menjalankan perintah berikut untuk membuat contoh file kebijakan yang memungkinkan akses hanya-baca ke bucket Amazon S3. Anda dapat secara opsional menyimpan informasi konfigurasi atau skrip bootstrap di bucket ini, dan container di Pod Anda dapat membaca file dari bucket dan memuatnya ke dalam aplikasi Anda. Jika Anda ingin membuat kebijakan contoh ini, salin konten berikut ke perangkat Anda. Ganti *my-pod-secrets-bucket* dengan nama bucket Anda dan jalankan perintah.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:GetObject",
               "Resource": "arn:aws:s3:::my-pod-secrets-bucket"
           }
       ]
   }
   ```

1. Buat kebijakan IAM.

   ```
   aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
   ```

## Langkah 2: Buat dan kaitkan Peran IAM
<a name="_step_2_create_and_associate_iam_role"></a>

Buat peran IAM dan kaitkan dengan akun layanan Kubernetes. Anda dapat menggunakan salah satu `eksctl` atau AWS CLI.

### Buat dan asosiasikan peran (eksctl)
<a name="_create_and_associate_role_eksctl"></a>

`eksctl`Perintah ini membuat akun layanan Kubernetes di namespace yang ditentukan, membuat peran IAM (jika tidak ada) dengan nama yang ditentukan, melampirkan ARN kebijakan IAM yang ada ke peran, dan membuat anotasi akun layanan dengan peran IAM ARN. Pastikan untuk mengganti nilai placeholder sampel dalam perintah ini dengan nilai spesifik Anda. Untuk menginstal atau memperbarui`eksctl`, lihat [Instalasi](https://eksctl.io/installation) dalam `eksctl` dokumentasi.

```
eksctl create iamserviceaccount --name my-service-account --namespace default --cluster my-cluster --role-name my-role \
    --attach-policy-arn arn:aws: iam::111122223333:policy/my-policy --approve
```

**penting**  
Jika akun peran atau layanan sudah ada, perintah sebelumnya mungkin gagal. `eksctl`memiliki opsi berbeda yang dapat Anda berikan dalam situasi tersebut. Untuk informasi lebih lanjut jalankan`eksctl create iamserviceaccount --help`.

### Buat dan asosiasikan peran (AWS CLI)
<a name="create_and_associate_role_shared_aws_cli"></a>

Jika Anda memiliki akun layanan Kubernetes yang ingin Anda ambil peran IAM, Anda dapat melewati langkah ini.

1. Buat akun layanan Kubernetes. Salin konten berikut ke perangkat Anda. Ganti *my-service-account* dengan nama yang Anda inginkan dan *default* dengan namespace yang berbeda, jika perlu. Jika Anda berubah*default*, namespace harus sudah ada.

   ```
   cat >my-service-account.yaml <<EOF
   apiVersion: v1
   kind: ServiceAccount
   metadata:
     name: my-service-account
     namespace: default
   EOF
   kubectl apply -f my-service-account.yaml
   ```

1. Setel ID AWS akun Anda ke variabel lingkungan dengan perintah berikut.

   ```
   account_id=$(aws sts get-caller-identity --query "Account" --output text)
   ```

1. Tetapkan penyedia identitas OIDC cluster Anda ke variabel lingkungan dengan perintah berikut. Ganti *my-cluster* dengan nama klaster Anda.

   ```
   oidc_provider=$(aws eks describe-cluster --name my-cluster --region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
   ```

1. Tetapkan variabel untuk namespace dan nama akun layanan. Ganti *my-service-account* dengan akun layanan Kubernetes yang ingin Anda ambil peran. Ganti *default* dengan namespace akun layanan.

   ```
   export namespace=default
   export service_account=my-service-account
   ```

1. Jalankan perintah berikut untuk membuat file kebijakan kepercayaan untuk peran IAM. Jika Anda ingin mengizinkan semua akun layanan dalam namespace untuk menggunakan peran, salin konten berikut ke perangkat Anda. Ganti *StringEquals* dengan `StringLike` dan ganti *\$1service\$1account* dengan`*`. Anda dapat menambahkan beberapa entri dalam `StringLike` kondisi `StringEquals` atau untuk memungkinkan beberapa akun layanan atau ruang nama mengambil peran. Untuk mengizinkan peran dari akun yang berbeda dari AWS akun yang digunakan klaster Anda untuk mengambil peran, lihat [Otentikasi ke akun lain dengan IRSA](cross-account-access.md) untuk informasi selengkapnya.

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Federated": "arn:aws:iam::123456789012:oidc-provider/$oidc_provider"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
           "StringEquals": {
             "$oidc_provider:aud": "sts.amazonaws.com",
             "$oidc_provider:sub": "system:serviceaccount:$namespace:$service_account"
           }
         }
       }
     ]
   }
   ```

1. Buat peran. Ganti *my-role* dengan nama untuk peran IAM Anda, dan *my-role-description* dengan deskripsi untuk peran Anda.

   ```
   aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
   ```

1. Lampirkan kebijakan IAM ke peran Anda. Ganti *my-role* dengan nama peran IAM Anda dan *my-policy* dengan nama kebijakan yang sudah ada yang Anda buat.

   ```
   aws iam attach-role-policy --role-name my-role --policy-arn=arn:aws: iam::$account_id:policy/my-policy
   ```

1. Beri anotasi akun layanan Anda dengan Nama Sumber Daya Amazon (ARN) dari peran IAM yang Anda inginkan untuk diasumsikan oleh akun layanan. Ganti *my-role* dengan nama peran IAM Anda yang ada. Misalkan Anda mengizinkan peran dari AWS akun yang berbeda dari akun tempat klaster Anda berada untuk mengambil peran pada langkah sebelumnya. Kemudian, pastikan untuk menentukan AWS akun dan peran dari akun lain. Untuk informasi selengkapnya, lihat [Otentikasi ke akun lain dengan IRSA](cross-account-access.md).

   ```
   kubectl annotate serviceaccount -n $namespace $service_account eks.amazonaws.com/role-arn=arn:aws: iam::$account_id:role/my-role
   ```

1. (Opsional) [Konfigurasikan titik akhir Layanan Token AWS Keamanan untuk akun layanan](configure-sts-endpoint.md). AWS merekomendasikan menggunakan titik akhir AWS STS regional alih-alih titik akhir global. Ini mengurangi latensi, menyediakan redundansi bawaan, dan meningkatkan validitas token sesi.

## Langkah 3: Konfirmasikan konfigurasi
<a name="irsa-confirm-role-configuration"></a>

1. Konfirmasikan bahwa kebijakan kepercayaan peran IAM telah dikonfigurasi dengan benar.

   ```
   aws iam get-role --role-name my-role --query Role.AssumeRolePolicyDocument
   ```

   Contoh output adalah sebagai berikut.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
               },
               "Action": "sts:AssumeRoleWithWebIdentity",
               "Condition": {
                   "StringEquals": {
                       "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:default:my-service-account",
                       "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

1. Konfirmasikan bahwa kebijakan yang Anda lampirkan pada peran Anda di langkah sebelumnya dilampirkan pada peran tersebut.

   ```
   aws iam list-attached-role-policies --role-name my-role --query "AttachedPolicies[].PolicyArn" --output text
   ```

   Contoh output adalah sebagai berikut.

   ```
    arn:aws: iam::111122223333:policy/my-policy
   ```

1. Tetapkan variabel untuk menyimpan Nama Sumber Daya Amazon (ARN) kebijakan yang ingin Anda gunakan. Ganti *my-policy* dengan nama kebijakan yang ingin Anda konfirmasi izin.

   ```
   export policy_arn=arn:aws: iam::111122223333:policy/my-policy
   ```

1. Lihat versi default kebijakan.

   ```
   aws iam get-policy --policy-arn $policy_arn
   ```

   Contoh output adalah sebagai berikut.

   ```
   {
       "Policy": {
           "PolicyName": "my-policy",
           "PolicyId": "EXAMPLEBIOWGLDEXAMPLE",
           "Arn": "arn:aws: iam::111122223333:policy/my-policy",
           "Path": "/",
           "DefaultVersionId": "v1",
           [...]
       }
   }
   ```

1. Lihat konten kebijakan untuk memastikan bahwa kebijakan tersebut menyertakan semua izin yang dibutuhkan Pod Anda. Jika perlu, ganti *1* dalam perintah berikut dengan versi yang dikembalikan pada output sebelumnya.

   ```
   aws iam get-policy-version --policy-arn $policy_arn --version-id v1
   ```

   Contoh output adalah sebagai berikut.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:GetObject",
               "Resource": "arn:aws:s3:::my-pod-secrets-bucket"
           }
       ]
   }
   ```

   Jika Anda membuat kebijakan contoh di langkah sebelumnya, maka output Anda sama. Jika Anda membuat kebijakan yang berbeda, maka *example* kontennya berbeda.

1. Konfirmasikan bahwa akun layanan Kubernetes dianotasi dengan peran tersebut.

   ```
   kubectl describe serviceaccount my-service-account -n default
   ```

   Contoh output adalah sebagai berikut.

   ```
   Name:                my-service-account
   Namespace:           default
   Annotations:         eks.amazonaws.com/role-arn: arn:aws: iam::111122223333:role/my-role
   Image pull secrets:  <none>
   Mountable secrets:   my-service-account-token-qqjfl
   Tokens:              my-service-account-token-qqjfl
   [...]
   ```

## Langkah selanjutnya
<a name="_next_steps"></a>
+  [Konfigurasikan Pod untuk menggunakan akun layanan Kubernetes](pod-configuration.md) 