

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

# Praktik terbaik untuk peran IAM di Amazon ECS
<a name="security-iam-roles"></a>

Peran yang diperlukan Amazon ECS bergantung pada jenis peluncuran definisi tugas dan fitur yang Anda gunakan. Kami menyarankan Anda membuat peran terpisah dalam tabel alih-alih berbagi peran.


| Peran | Definisi | Saat dibutuhkan | Informasi selengkapnya | 
| --- | --- | --- | --- | 
| Peran pelaksanaan tugas | Peran ini memungkinkan Amazon ECS untuk menggunakan AWS layanan lain atas nama Anda. |  Tugas Anda di-host pada AWS Fargateatau pada instans eksternal dan: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/security-iam-roles.html) Tugas Anda di-host di salah satu AWS Fargate atau instans Amazon EC2 dan: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/security-iam-roles.html)  | [Peran IAM pelaksanaan tugas Amazon ECS](task_execution_IAM_role.md) | 
| Peran tugas | Peran ini memungkinkan kode aplikasi Anda (pada wadah) untuk menggunakan AWS layanan lain. | Aplikasi Anda mengakses AWS layanan lain, seperti Amazon S3. | [Peran IAM tugas Amazon ECS](task-iam-roles.md) | 
|  role instans kontainer | Peran ini memungkinkan instans EC2 atau instans eksternal Anda untuk mendaftar dengan cluster. | Tugas Anda di-host di instans Amazon EC2 atau instans eksternal. | [Peran IAM instans kontainer Amazon ECS](instance_IAM_role.md) | 
| Peran Amazon ECS Anywhere | Peran ini memungkinkan instans eksternal Anda untuk mengakses AWS APIs. | Tugas Anda di-host pada instance eksternal. | [Peran IAM Amazon ECS Anywhere](iam-role-ecsanywhere.md) | 
| Peran Amazon ECS CodeDeploy  | Peran ini memungkinkan CodeDeploy untuk membuat pembaruan pada layanan Anda. | Anda menggunakan jenis penyebaran CodeDeploy biru/hijau untuk menyebarkan layanan. | [Peran Amazon ECS CodeDeploy IAM](codedeploy_IAM_role.md) | 
| Peran Amazon ECS EventBridge  | Peran ini memungkinkan EventBridge untuk membuat pembaruan pada layanan Anda. | Anda menggunakan EventBridge aturan dan target untuk menjadwalkan tugas Anda. | [Peran Amazon ECS EventBridge IAM](CWE_IAM_role.md) | 
| Peran infrastruktur Amazon ECS | Peran ini memungkinkan Amazon ECS mengelola sumber daya infrastruktur di cluster Anda.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonECS/latest/developerguide/security-iam-roles.html) | [Peran IAM Infrastruktur Amazon ECS](infrastructure_IAM_role.md) | 

## Peran tugas
<a name="security-iam-task-role"></a>

Kami menyarankan Anda menetapkan peran tugas. Perannya dapat dibedakan dari peran instans Amazon EC2 yang sedang berjalan. Menetapkan setiap tugas peran selaras dengan prinsip akses yang paling tidak memiliki hak istimewa dan memungkinkan kontrol terperinci yang lebih besar atas tindakan dan sumber daya.

Saat Anda menambahkan peran tugas ke definisi tugas, agen penampung Amazon ECS secara otomatis membuat token dengan ID kredensyal unik (misalnya,`12345678-90ab-cdef-1234-567890abcdef`) untuk tugas tersebut. Token ini dan kredenal peran kemudian ditambahkan ke cache internal agen. Agen mengisi variabel lingkungan `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` dalam wadah dengan URI ID kredensyal (misalnya,`/v2/credentials/12345678-90ab-cdef-1234-567890abcdef`).

Anda dapat secara manual mengambil kredensyal peran sementara dari dalam wadah dengan menambahkan variabel lingkungan ke alamat IP agen penampung Amazon ECS dan menjalankan `curl` perintah pada string yang dihasilkan.

```
curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
```

Output yang diharapkan adalah sebagai berikut:

```
{
	"RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6",
	"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
	"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
	"Token": "IQoJb3JpZ2luX2VjEEM/Example==",
	"Expiration": "2021-01-16T00:51:53Z"
}
```

Versi yang lebih baru secara AWS SDKs otomatis mengambil kredensi ini dari variabel `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` lingkungan saat melakukan panggilan API. AWS Untuk informasi tentang cara memperbarui kredensil, lihat Memperbarui kredensil di [RePost AWS](https://repost.aws/questions/QUgcf1EIOPS7GZNboeAiyO9Q/renewing-aws-credentials).

Outputnya mencakup pasangan kunci akses yang terdiri dari ID kunci akses rahasia dan kunci rahasia yang digunakan aplikasi Anda untuk mengakses AWS sumber daya. Ini juga termasuk token yang AWS digunakan untuk memverifikasi bahwa kredensialnya valid. Secara default, kredenal yang ditetapkan ke tugas menggunakan peran tugas valid selama enam jam. Setelah itu, mereka secara otomatis diputar oleh agen kontainer Amazon ECS.

## Peran pelaksanaan tugas
<a name="security-iam-roles-task-execution"></a>

Peran eksekusi tugas digunakan untuk memberikan izin agen penampung Amazon ECS untuk memanggil tindakan AWS API tertentu atas nama Anda. Misalnya, saat Anda menggunakan AWS Fargate, Fargate memerlukan peran IAM yang memungkinkannya menarik gambar dari Amazon ECR dan menulis log ke Log. CloudWatch Peran IAM juga diperlukan saat tugas mereferensikan rahasia yang disimpan AWS Secrets Manager, seperti rahasia tarik gambar.

**catatan**  
Jika Anda menarik gambar sebagai pengguna yang diautentikasi, Anda cenderung tidak terpengaruh oleh perubahan yang terjadi pada batas kecepatan [tarik Docker Hub](https://www.docker.com/pricing/resource-consumption-updates). Untuk informasi selengkapnya lihat, [Autentikasi registri pribadi untuk instance kontainer](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth-container-instances.html).  
Dengan menggunakan Amazon ECR dan Amazon ECR Public, Anda dapat menghindari batasan yang diberlakukan oleh Docker. Jika Anda menarik gambar dari Amazon ECR, ini juga membantu mempersingkat waktu tarik jaringan dan mengurangi perubahan transfer data saat lalu lintas meninggalkan VPC Anda.

**penting**  
Saat Anda menggunakan Fargate, Anda harus mengautentikasi ke registri gambar pribadi menggunakan. `repositoryCredentials` Tidak mungkin menyetel variabel lingkungan agen penampung Amazon ECS `ECS_ENGINE_AUTH_TYPE` `ECS_ENGINE_AUTH_DATA` atau memodifikasi `ecs.config` file untuk tugas yang dihosting di Fargate. Untuk informasi selengkapnya, lihat [Autentikasi registri pribadi untuk tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html).

## role instans kontainer
<a name="security-iam-roles-ec2-container-instance"></a>

Kebijakan IAM `AmazonEC2ContainerServiceforEC2Role` terkelola mencakup izin berikut. Dengan mengikuti saran keamanan standar untuk memberikan hak istimewa paling rendah, kebijakan terkelola `AmazonEC2ContainerServiceforEC2Role` dapat digunakan sebagai panduan. Jika salah satu izin yang diberikan dalam kebijakan terkelola tidak diperlukan untuk kasus penggunaan Anda, buat kebijakan kustom dan hanya tambahkan izin yang Anda perlukan.
+ `ec2:DescribeTags`— (Opsional) Memungkinkan prinsipal untuk mendeskripsikan tag yang terkait dengan instans Amazon EC2. Izin ini digunakan oleh agen penampung Amazon ECS untuk mendukung propagasi tag sumber daya. Untuk informasi selengkapnya, lihat [Bagaimana sumber daya ditandai](ecs-using-tags.md#tag-resources).
+ `ecs:CreateCluster`— (Opsional) Memungkinkan prinsipal untuk membuat cluster Amazon ECS. Izin ini digunakan oleh agen penampung Amazon ECS untuk membuat `default` klaster, jika belum ada.
+ `ecs:DeregisterContainerInstance`— (Opsional) Memungkinkan prinsipal untuk membatalkan pendaftaran instans penampung Amazon ECS dari cluster. Agen penampung Amazon ECS tidak memanggil operasi API ini, tetapi izin ini tetap untuk membantu memastikan kompatibilitas mundur.
+ `ecs:DiscoverPollEndpoint`— (Diperlukan) Tindakan ini mengembalikan titik akhir yang digunakan agen penampung Amazon ECS untuk melakukan polling untuk pembaruan.
+ `ecs:Poll`— (Wajib) Memungkinkan agen penampung Amazon ECS berkomunikasi dengan bidang kontrol Amazon ECS untuk melaporkan perubahan status tugas.
+ `ecs:RegisterContainerInstance`— (Wajib) Memungkinkan prinsipal untuk mendaftarkan instance kontainer dengan cluster. Izin ini digunakan oleh agen penampung Amazon ECS untuk mendaftarkan instans Amazon EC2 dengan klaster dan untuk mendukung propagasi tag sumber daya.
+ `ecs:StartTelemetrySession`— (Opsional) Memungkinkan agen kontainer Amazon ECS berkomunikasi dengan pesawat kontrol Amazon ECS untuk melaporkan informasi kesehatan dan metrik untuk setiap wadah dan tugas.

  Meskipun izin ini tidak diperlukan, kami menyarankan Anda menambahkannya untuk mengizinkan metrik instance container untuk memulai tindakan skala dan juga menerima laporan yang terkait dengan perintah pemeriksaan kesehatan.
+ `ecs:TagResource`— (Opsional) Memungkinkan agen penampung Amazon ECS menandai klaster saat pembuatan dan menandai instance kontainer saat terdaftar ke klaster.
+ `ecs:UpdateContainerInstancesState`— Memungkinkan kepala sekolah untuk memodifikasi status instans penampung Amazon ECS. Izin ini digunakan oleh agen penampung Amazon ECS untuk pengeringan Instans Spot. 
+ `ecs:Submit*`— (Wajib) Ini termasuk tindakan `SubmitAttachmentStateChanges``SubmitContainerStateChange`,, dan `SubmitTaskStateChange` API. Mereka digunakan oleh agen penampung Amazon ECS untuk melaporkan perubahan status untuk setiap sumber daya ke bidang kontrol Amazon ECS. `SubmitContainerStateChange`Izin tersebut tidak lagi digunakan oleh agen penampung Amazon ECS tetapi tetap untuk membantu memastikan kompatibilitas mundur.
+ `ecr:GetAuthorizationToken`— (Opsional) Memungkinkan kepala sekolah untuk mengambil token otorisasi. Token otorisasi mewakili kredensi otentikasi IAM Anda dan dapat digunakan untuk mengakses registri ECR Amazon apa pun yang dapat diakses oleh prinsipal IAM. Token otorisasi yang diterima berlaku selama 12 jam.
+ `ecr:BatchCheckLayerAvailability`— (Opsional) Saat gambar kontainer didorong ke repositori pribadi Amazon ECR, setiap lapisan gambar diperiksa untuk memverifikasi apakah sudah didorong. Jika sudah didorong, maka lapisan citra dilewati.
+ `ecr:GetDownloadUrlForLayer`— (Opsional) Ketika gambar kontainer ditarik dari repositori pribadi Amazon ECR, API ini dipanggil sekali untuk setiap lapisan gambar yang belum di-cache.
+ `ecr:BatchGetImage`— (Opsional) Saat gambar kontainer ditarik dari repositori pribadi Amazon ECR, API ini dipanggil sekali untuk mengambil manifes gambar.
+ `logs:CreateLogStream`— (Opsional) Memungkinkan prinsipal untuk membuat aliran CloudWatch log Log untuk grup log tertentu.
+ `logs:PutLogEvents`— (Opsional) Memungkinkan prinsipal untuk mengunggah sekumpulan peristiwa log ke aliran log tertentu.

## Peran terkait layanan
<a name="security-iam-roles-service-linked"></a>

Anda dapat menggunakan peran terkait layanan untuk Amazon ECS untuk memberikan izin layanan Amazon ECS untuk memanggil layanan APIs lain atas nama Anda. Amazon ECS memerlukan izin untuk membuat dan menghapus antarmuka jaringan, mendaftar, dan membatalkan pendaftaran target dengan grup target. Ini juga membutuhkan izin yang diperlukan untuk membuat dan menghapus kebijakan penskalaan. Izin ini diberikan melalui peran terkait layanan. Peran ini dibuat atas nama Anda saat pertama kali Anda menggunakan layanan.

**catatan**  
Jika Anda secara tidak sengaja menghapus peran terkait layanan, Anda dapat membuatnya kembali. Untuk petunjuknya, lihat [Membuat peran terkait layanan](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html#create-service-linked-role).

## Rekomendasi peran
<a name="security-iam-roles-recommendations"></a>

Kami menyarankan Anda melakukan hal berikut saat menyiapkan peran dan kebijakan IAM tugas Anda.

### Blokir akses ke metadata Amazon EC2
<a name="security-iam-roles-recommendations-ec2-metadata"></a>

Saat menjalankan tugas di instans Amazon EC2, kami sangat menyarankan Anda memblokir akses ke metadata Amazon EC2 untuk mencegah container mewarisi peran yang ditetapkan ke instans tersebut. Jika aplikasi Anda harus memanggil tindakan AWS API, gunakan peran IAM untuk tugas sebagai gantinya.

Untuk mencegah tugas yang berjalan dalam mode **jembatan** mengakses metadata Amazon EC2, jalankan perintah berikut atau perbarui data pengguna instans. Untuk instruksi selengkapnya tentang memperbarui data pengguna sebuah instans, lihat [Artikel AWS Support](https://aws.amazon.com/premiumsupport/knowledge-center/ecs-container-ec2-metadata/) ini. Untuk informasi selengkapnya tentang mode jembatan definisi [tugas, lihat mode jaringan definisi tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#network_mode).

```
sudo yum install -y iptables-services; sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
```

Agar perubahan ini tetap ada setelah reboot, jalankan perintah berikut yang khusus untuk Amazon Machine Image (AMI) Anda:
+ Amazon Linux 2

  ```
  sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  ```
+ Amazon Linux

  ```
  sudo service iptables save
  ```

Untuk tugas yang menggunakan mode `awsvpc` jaringan, atur variabel lingkungan `ECS_AWSVPC_BLOCK_IMDS` ke `true` dalam `/etc/ecs/ecs.config` file.

Anda harus menyetel `ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST` variabel ke `false` dalam `ecs-agent config` file untuk mencegah kontainer yang berjalan di dalam `host` jaringan mengakses metadata Amazon EC2.

### Gunakan mode `awsvpc` jaringan
<a name="security-iam-roles-recommendations-awsvpc-networking-mode"></a>

Gunakan mode jaringan `awsvpc` jaringan untuk membatasi arus lalu lintas antara tugas yang berbeda atau antara tugas Anda dan layanan lain yang berjalan dalam VPC Amazon Anda. Ini menambahkan lapisan keamanan tambahan. Mode `awsvpc` jaringan menyediakan isolasi jaringan tingkat tugas untuk tugas yang berjalan di Amazon EC2. Ini adalah mode default AWS Fargate aktif. itu satu-satunya mode jaringan yang dapat Anda gunakan untuk menetapkan grup keamanan untuk tugas. 

### Gunakan informasi yang terakhir diakses untuk menyempurnakan peran
<a name="security-iam-roles-recommendations-iam-access-advisor-refine-roles"></a>

Kami menyarankan Anda menghapus tindakan apa pun yang tidak pernah digunakan atau belum digunakan selama beberapa waktu. Ini mencegah akses yang tidak diinginkan terjadi. Untuk melakukan ini, tinjau informasi terakhir yang diakses yang disediakan oleh IAM, lalu hapus tindakan yang tidak pernah digunakan atau belum digunakan baru-baru ini. Anda dapat melakukan ini dengan mengikuti langkah-langkah berikut.

Jalankan perintah berikut untuk menghasilkan laporan yang menampilkan informasi akses terakhir untuk kebijakan yang direferensikan:

```
aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1
```

gunakan `JobId` yang ada di output untuk menjalankan perintah berikut. Setelah Anda melakukan ini, Anda dapat melihat hasil laporan.

```
aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9
```

Untuk informasi selengkapnya, lihat [Memperbaiki izin AWS menggunakan informasi yang terakhir diakses](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_last-accessed.html).

### Pantau AWS CloudTrail aktivitas mencurigakan
<a name="security-iam-roles-recommendations-cloudtrail-monitoring"></a>

Anda dapat memantau AWS CloudTrail aktivitas mencurigakan apa pun. Sebagian besar panggilan AWS API dicatat AWS CloudTrail sebagai peristiwa. Mereka dianalisis oleh AWS CloudTrail Insights, dan Anda diberi tahu tentang perilaku mencurigakan apa pun yang terkait dengan `write` panggilan API. Ini mungkin termasuk lonjakan volume panggilan. Peringatan ini mencakup informasi seperti waktu aktivitas yang tidak biasa terjadi dan identitas teratas ARN yang berkontribusi pada. APIs 

Anda dapat mengidentifikasi tindakan yang dilakukan oleh tugas dengan peran IAM AWS CloudTrail dengan melihat `userIdentity` properti acara. Dalam contoh berikut, `arn` termasuk nama peran yang diasumsikan,`s3-write-go-bucket-role`, diikuti dengan nama tugas,`7e9894e088ad416eb5cab92afExample`.

```
"userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample",
    "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample",
    ...
}
```

**catatan**  
Saat tugas yang mengambil peran dijalankan pada instans penampung Amazon EC2, permintaan dicatat oleh agen penampung Amazon ECS ke log audit agen yang terletak di alamat dalam format. `/var/log/ecs/audit.log.YYYY-MM-DD-HH` Untuk informasi selengkapnya, lihat [Log Peran IAM Tugas dan Logging](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/logs.html#task_iam_roles-logs) [Insights Events for Trails](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-insights-events-with-cloudtrail.html).