View a markdown version of this page

Menggunakan peran IAM untuk memberikan izin ke aplikasi yang berjalan di instans Amazon EC2 - AWS Identity and Access Management

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

Menggunakan peran IAM untuk memberikan izin ke aplikasi yang berjalan di instans Amazon EC2

Aplikasi yang berjalan pada instans Amazon EC2 harus menyertakan AWS kredenSIAL dalam permintaan AWS API. Anda dapat meminta pengembang menyimpan AWS kredenSIAL langsung di dalam instans Amazon EC2 dan mengizinkan aplikasi dalam contoh tersebut untuk menggunakan kredenSIAL tersebut. Tetapi pengembang kemudian harus mengelola kredenSIAL dan memastikan bahwa mereka dengan aman meneruskan kredenSIAL ke setiap instans dan memperbarui setiap instans Amazon EC2 ketika tiba saatnya untuk memperbarui kredenSIAL. Banyak pekerjaan tambahan.

Sebagai gantinya, Anda dapat dan harus menggunakan peran IAM untuk mengelola kreden SIAL sementara untuk aplikasi yang berjalan pada instans Amazon EC2. Saat menggunakan peran, Anda tidak perlu mendistribusikan kredenSIAL jangka panjang (seperti kredentif masuk atau kunci akses) ke instans Amazon EC2. Sebagai gantinya, peran tersebut memberikan izin sementara yang dapat digunakan aplikasi saat melakukan panggilan ke AWS sumber daya lain. Saat meluncurkan instans Amazon EC2, Anda menentukan peran IAM untuk dikaitkan dengan instans. Aplikasi yang berjalan pada instans kemudian dapat menggunakan kredensial sementara yang diberikan oleh peran untuk menandatangani permintaan API.

Menggunakan peran untuk memberikan izin ke aplikasi yang berjalan di instans Amazon EC2 memerlukan sedikit konfigurasi tambahan. Aplikasi yang berjalan pada instans Amazon EC2 disabstrahkan AWS oleh sistem operasi virtual. Karena pemisahan ekstra ini, Anda memerlukan langkah tambahan untuk menetapkan AWS peran dan izin terkaitnya ke instans Amazon EC2 dan membuatnya tersedia untuk aplikasinya. Langkah tambahan ini adalah pembuatan profil instance yang dil ampirkan ke instance. Profil instans berisi peran dan dapat memberikan kredensial sementara peran ke aplikasi yang berjalan pada instans. Kredensial sementara tersebut kemudian dapat digunakan dalam panggilan API aplikasi untuk mengakses sumber daya dan membatasi akses ke sumber daya yang ditentukan oleh peran tersebut saja.

catatan

Hanya satu peran yang dapat ditetapkan ke instans Amazon EC2 pada satu waktu, dan semua aplikasi pada instans berbagi peran dan izin yang sama. Saat memanfaatkan Amazon ECS untuk mengelola instans Amazon EC2, Anda dapat menetapkan peran ke tugas Amazon ECS yang dapat dibedakan dari peran instans Amazon EC2 yang dijalankan. Menetapkan setiap tugas peran sejalan dengan prinsip akses yang paling tidak istimewa dan memungkinkan kontrol terperinci yang lebih besar atas tindakan dan sumber daya.

Untuk informasi selengkapnya, lihat Menggunakan peran IAM dengan tugas Amazon ECS di Panduan Praktik Terbaik Layanan Kontainer Amazon Elastic.

Penggunaan peran dengan cara ini memiliki beberapa keuntungan. Karena kredenSIAL peran bersifat sementara dan diperbarui secara otomatis, Anda tidak perlu mengelola kredenSIAL, dan Anda tidak perlu khawatir tentang risiko keamanan jangka panjang. Selain itu, jika Anda menggunakan peran tunggal untuk beberapa instance, Anda dapat membuat perubahan pada satu peran tersebut dan perubahan tersebut merambat secara otomatis ke semua instance.

catatan

Meskipun peran biasanya ditugaskan ke instans Amazon EC2 saat Anda meluncurkannya, peran juga dapat dilampirkan ke instans Amazon EC2 yang sedang berjalan. Untuk mempelajar cara melampirkan peran pada instans yang sedang berjalan, lihat Peran IAM untuk Amazon EC2.

Bagaimana cara kerja peran untuk instans Amazon EC2?

Pada gambar berikut, pengembang menjalankan aplikasi pada instans Amazon EC2 yang memerlukan akses ke bucket S3 bernamaamzn-s3-demo-bucket-photos. Administrator membuat peran Get-pics layanan dan melampirkan peran tersebut ke instans Amazon EC2. Peran ini mencakup kebijakan izin yang memberikan akses hanya-baca ke bucket S3 tertentu. Ini juga mencakup kebijakan kepercayaan yang memungkinkan instans Amazon EC2 untuk mengambil peran dan mengambil kredenSIAL sementara. Saat aplikasi berjalan pada instans, itu menggunakan kredensial sementara peran untuk mengakses bucket foto. Administrator tidak perlu memberikan izin kepada developer untuk mengakses bucket foto, dan developer tidak perlu membagikan atau mengelola kredensial.

Aplikasi pada instans Amazon EC2 yang mengakses AWS sumber daya.
  1. Administrator menggunakan IAM untuk membuat peran Get-pics. Dalam kebijakan kepercayaan peran, administrator menentukan bahwa hanya instans Amazon EC2 yang dapat mengambil peran tersebut. Dalam kebijakan izin peran, administrator menentukan izin hanya-baca untuk bucket amzn-s3-demo-bucket-photos.

  2. Pengembang meluncurkan instans Amazon EC2 dan menetapkan Get-pics peran ke instance tersebut.

    catatan

    Jika Anda menggunakan konsol IAM, profil instans dikelola untuk Anda dan sebagian besar transparan bagi Anda. Namun, jika Anda menggunakan API AWS CLI or untuk membuat dan mengelola peran dan instans Amazon EC2, maka Anda harus membuat profil instans dan menetapkan peran tersebut sebagai langkah terpisah. Kemudian, saat Anda meluncurkan instans, Anda harus menentukan nama profil instans dan bukan nama peran.

  3. Saat aplikasi berjalan, itu mendapatkan kredensial keamanan sementara dari metadata instans Amazon EC2, sebagaimana dijelaskan dalam Mengambil Kredensial Keamanan dari Metadata Instans. Ini adalah kredensial keamanan sementara yang mewakili peran tersebut dan berlaku untuk periode waktu yang terbatas.

    Dengan beberapa SDK AWS, developer dapat menggunakan penyedia yang mengelola kredensial keamanan sementara secara transparan. (Dokumentasi untuk AWS SDK individual menjelaskan fitur yang didukung oleh SDK tersebut untuk mengelola kredenSIAL.)

    Atau, aplikasi bisa mendapatkan kredenSIAL sementara langsung dari metadata instans Amazon EC2. Kredensial dan nilai terkait tersedia dari kategori iam/security-credentials/role-name (dalam hal ini, iam/security-credentials/Get-pics) metadata. Jika aplikasi mendapatkan kredensial dari metadata instans, itu dapat menyimpan kredensial tersebut.

  4. Dengan menggunakan kredensial sementara yang diambil, aplikasi mengakses bucket foto. Karena kebijakan terlampir pada peran Get-pics, aplikasi memiliki izin hanya-baca.

    KredenSIAL keamanan sementara yang tersedia di instans diperbarui secara otomatis sebelum kedaluwarsa sehingga kumpulan yang valid selalu tersedia. Aplikasi hanya perlu memastikan bahwa itu mendapatkan serangkaian kredensial baru dari metadata instans sebelum metadata yang sedang digunakan kedaluwarsa. Dimungkinkan untuk menggunakan AWS SDK untuk mengelola kredenSIAL sehingga aplikasi tidak perlu menyertakan logika tambahan untuk menyegarkan kredenSIAL. Misalnya, membuat instan klien dengan Penyedia Kredensial Profil Instans. Namun, jika aplikasi mendapatkan kredensial keamanan sementara dari metadata instans dan sudah menyimpannya, itu akan mendapatkan rangkaian kredensial yang diperbarui setiap jam, atau setidaknya 15 menit sebelum rangkaian yang sedang digunakan kedaluwarsa. Waktu kedaluwarsa termasuk dalam informasi yang dikembalikan dalam iam/security-credentials/role-name kategori.

Izin yang diperlukan untuk menggunakan peran dengan Amazon EC2

Untuk meluncurkan instans dengan peran, pengembang harus memiliki izin untuk meluncurkan instans Amazon EC2 dan izin untuk meneruskan peran IAM.

Kebijakan sampel berikut memungkinkan pengguna untuk menggunakan Konsol Manajemen AWS untuk meluncurkan instance dengan peran. Kebijakan ini menyertakan wildcard (*) untuk mengizinkan pengguna meneruskan peran apa pun dan melakukan tindakan Amazon EC2 yang terdaftar. T ListInstanceProfiles indakan ini memungkinkan pengguna untuk melihat semua peran yang tersedia di Akun AWS.

contoh Contoh kebijakan yang memberikan izin kepada pengguna untuk menggunakan konsol Amazon EC2 untuk meluncurkan instans dengan peran.
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "IamPassRole", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } }, { "Sid": "ListEc2AndListInstanceProfiles", "Effect": "Allow", "Action": [ "iam:ListInstanceProfiles", "ec2:Describe*", "ec2:Search*", "ec2:Get*" ], "Resource": "*" } ] }

Membatasi peran mana yang dapat diteruskan ke instans Amazon EC2 (menggunakan PassRole)

Anda dapat menggunakan PassRole izin untuk membatasi peran mana yang dapat diteruskan pengguna ke instans Amazon EC2 saat pengguna meluncurkan instans. Ini membantu mencegah pengguna menjalankan aplikasi yang memiliki izin lebih dari yang diberikan kepada pengguna—yaitu, agar dapat memperoleh hak istimewa yang ditingkatkan. Misalnya, bayangkan pengguna Alice hanya memiliki izin untuk meluncurkan instans Amazon EC2 dan bekerja dengan bucket Amazon S3, tetapi peran yang ia berikan ke instans Amazon EC2 memiliki izin untuk bekerja dengan IAM dan Amazon DynamoDB. Dalam hal ini, Alice mungkin dapat meluncurkan instans, masuk ke dalamnya, mendapatkan kredenSIAL keamanan sementara, dan kemudian melakukan tindakan IAM atau DynamoDB yang tidak diotorisasi.

Untuk membatasi peran mana yang dapat diteruskan pengguna ke instans Amazon EC2, Anda membuat kebijakan yang mengizinkan PassRole tindakan tersebut. Anda kemudian melampirkan kebijakan ke pengguna (atau ke grup IAM milik pengguna) yang akan meluncurkan instans Amazon EC2. Di Resource elemen kebijakan, Anda mencantumkan peran atau peran yang diizinkan untuk diteruskan pengguna ke instans Amazon EC2. Saat pengguna meluncurkan suatu instans dan mengaitkan peran dengannya, Amazon EC2 akan memeriksa apakah pengguna diizinkan untuk meneruskan peran tersebut. Tentu saja, Anda juga harus memastikan bahwa peran yang dapat diteruskan oleh pengguna tidak mencakup lebih banyak izin dari yang seharusnya dimiliki oleh pengguna.

catatan

PassRole bukan merupakan tindakan API dengan cara yang sama seperti RunInstances atau ListInstanceProfiles. Sebaliknya, ini adalah izin yang AWS memeriksa setiap kali peran ARN diteruskan sebagai parameter ke API (atau konsol melakukan ini atas nama pengguna). Itu membantu administrator untuk mengontrol peran mana yang dapat diteruskan oleh pengguna yang mana. Dalam kasus ini, itu memastikan bahwa pengguna diizinkan untuk melampirkan peran tertentu ke instans Amazon EC2.

contoh Contoh kebijakan yang memberikan izin pengguna untuk meluncurkan instans Amazon EC2 dengan peran tertentu

Kebijakan sampel berikut memungkinkan pengguna untuk menggunakan Amazon EC2 API untuk meluncurkan instans dengan peran. Elemen Resource menentukan Amazon Resource Name (ARN) dari peran. Dengan menentukan ARN, kebijakan memberi izin kepada pengguna untuk hanya meneruskan peran Get-pics. Jika pengguna mencoba menentukan peran yang berbeda saat meluncurkan suatu instans, tindakan tersebut gagal. Pengguna memang memiliki izin untuk menjalankan setiap instans, terlepas dari apakah mereka meneruskan suatu peran.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::111122223333:role/Get-pics" } ] }

Memungkinkan peran profil instans untuk beralih ke peran dalam akun lain

Anda dapat mengizinkan aplikasi yang berjalan di instans Amazon EC2 untuk menjalankan perintah di akun lain. Untuk melakukan ini, Anda harus mengizinkan peran instans Amazon EC2 di akun pertama untuk beralih ke peran di akun kedua.

Bayangkan Anda menggunakan dua Akun AWS dan Anda ingin mengizinkan aplikasi yang berjalan pada instans Amazon EC2 untuk menjalankan AWS CLI perintah di kedua akun. Asumsikan bahwa instance Amazon EC2 ada di akun111111111111. Instance tersebut menyertakan peran profil abcd instance yang memungkinkan aplikasi melakukan tugas Amazon S3 yang hanya dapat dibaca pada amzn-s3-demo-bucket1 bucket dalam akun yang sama111111111111. Namun demikian, aplikasi tersebut juga harus diizinkan untuk menjalankan efgh peran lintas akun untuk mengakses amzn-s3-demo-bucket2 bucket Amazon S3 dalam akun 222222222222.

Diagram menunjukkan bagaimana pengembang meluncurkan instance Amazon EC2 dengan peran untuk mendapatkan akses ke foto dalam bucket Amazon S3.

Per abcd an profil instans Amazon EC2 harus memiliki kebijakan izin berikut untuk mengizinkan aplikasi mengakses bucket amzn-s3-demo-bucket1 Amazon S3:

Akun 111111111111 Kebijakan Izin Peran abcd

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

Peran abcd harus mempercayai layanan Amazon EC2 untuk menjalankan peran tersebut. Untuk melakukannya, peran abcd harus memiliki kebijakan kepercayaan berikut:

Akun 111111111111 Kebijakan Kepercayaan Peran abcd

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "abcdTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"Service": "ec2.amazonaws.com"} } ] }

Anggap bahwa peran lintas akun efgh memungkinkan tugas Amazon S3 hanya baca di bucket amzn-s3-demo-bucket2 dalam akun 222222222222 yang sama. Untuk melakukannya, peran lintas akun efgh harus memiliki kebijakan izin berikut:

Akun 222222222222 Kebijakan Izin Peran efgh

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket2/*", "arn:aws:s3:::amzn-s3-demo-bucket2" ] } ] }

Peran efgh harus mempercayai profil instans abcd untuk menjalankannya. Untuk melakukannya, peran efgh harus memiliki kebijakan kepercayaan berikut:

Akun 222222222222 Kebijakan Kepercayaan Peran efgh

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }

Bagaimana saya memulainya?

Untuk memahami cara kerja peran dengan instans Amazon EC2, Anda perlu menggunakan konsol IAM untuk membuat peran, meluncurkan instans Amazon EC2 yang menggunakan peran tersebut, lalu memeriksa instance yang sedang berjalan. Anda dapat menguji metadata instans untuk melihat bagaimana kredensial sementara peran tersedia untuk sebuah instans. Anda juga dapat melihat bagaimana aplikasi yang berjalan pada suatu instans dapat menggunakan peran tersebut. Gunakan sumber daya berikut ini untuk mempelajari lebih banyak.

Untuk informasi selengkapnya tentang membuat peran atau peran untuk instans Amazon EC2, lihat informasi berikut: