Menggunakan IAM peran 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 IAM peran untuk memberikan izin ke aplikasi yang berjalan di instans Amazon EC2

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

Sebagai gantinya, Anda dapat dan harus menggunakan IAM peran untuk mengelola kredensil sementara untuk aplikasi yang berjalan di instans AmazonEC2. Saat Anda menggunakan peran, Anda tidak perlu mendistribusikan kredenal jangka panjang (seperti kredenal masuk atau kunci akses) ke instans Amazon. EC2 Sebagai gantinya, peran menyediakan izin sementara yang dapat digunakan aplikasi saat mereka melakukan panggilan ke AWS sumber daya lain. Saat meluncurkan EC2 instans Amazon, Anda menentukan IAM peran yang akan diasosiasikan dengan instance tersebut. Aplikasi yang berjalan pada instance kemudian dapat menggunakan kredenal sementara yang disediakan peran untuk menandatangani permintaan. API

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

catatan

Hanya satu peran yang dapat ditetapkan ke EC2 instans Amazon pada satu waktu, dan semua aplikasi pada instance berbagi peran dan izin yang sama. Saat memanfaatkan Amazon ECS untuk mengelola EC2 instans Amazon, Anda dapat menetapkan peran ke ECS tugas Amazon yang dapat dibedakan dari peran EC2 instans Amazon yang dijalankannya. 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.

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

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

catatan

Meskipun peran biasanya ditetapkan ke EC2 instans Amazon saat Anda meluncurkannya, peran juga dapat dilampirkan ke EC2 instans Amazon yang sedang berjalan. Untuk mempelajari cara melampirkan peran ke instance yang sedang berjalan, lihat IAMPeran untuk Amazon EC2.

Bagaimana cara kerja peran untuk EC2 instans Amazon?

Pada gambar berikut, pengembang menjalankan aplikasi pada EC2 instance Amazon yang memerlukan akses ke bucket S3 bernamaphotos. Administrator membuat peran Get-pics layanan dan melampirkan peran tersebut ke EC2 instans Amazon. Peran ini mencakup kebijakan izin yang memberikan akses hanya-baca ke bucket S3 tertentu. Ini juga mencakup kebijakan kepercayaan yang memungkinkan EC2 instans Amazon untuk mengambil peran dan mengambil kredensi 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 EC2 instans Amazon yang mengakses sumber daya AWS
  1. Administrator menggunakan IAM untuk membuat Get-pics peran. Dalam kebijakan kepercayaan peran, administrator menetapkan bahwa hanya EC2 instans Amazon yang dapat mengambil peran tersebut. Dalam kebijakan izin peran, administrator menentukan izin hanya-baca untuk bucket photos.

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

    catatan

    Jika Anda menggunakan IAM konsol, profil instance dikelola untuk Anda dan sebagian besar transparan bagi Anda. Namun, jika Anda menggunakan AWS CLI atau API untuk membuat dan mengelola peran dan EC2 instans Amazon, maka Anda harus membuat profil instance 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, aplikasi memperoleh kredensil keamanan sementara dari metadata EC2 instans Amazon, seperti yang dijelaskan dalam Mengambil Kredensial Keamanan dari Metadata Instance. Ini adalah kredensial keamanan sementara yang mewakili peran tersebut dan berlaku untuk periode waktu yang terbatas.

    Dengan beberapa AWS SDKs, pengembang dapat menggunakan penyedia yang mengelola kredenal keamanan sementara secara transparan. (Dokumentasi untuk individu AWS SDKs menjelaskan fitur yang didukung oleh itu SDK untuk mengelola kredensi.)

    Atau, aplikasi bisa mendapatkan kredensi sementara langsung dari metadata instance dari 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.

    Kredensi keamanan sementara yang tersedia pada instans secara otomatis diperbarui sebelum kedaluwarsa sehingga set 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 kredensil sehingga aplikasi tidak perlu menyertakan logika tambahan untuk menyegarkan kredensil. 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 kategori. iam/security-credentials/role-name

Izin diperlukan untuk menggunakan peran dengan Amazon EC2

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

Kebijakan contoh berikut memungkinkan pengguna untuk menggunakan AWS Management Console untuk meluncurkan instance dengan peran. Kebijakan ini mencakup wildcard (*) untuk memungkinkan pengguna meneruskan peran apa pun dan melakukan EC2 tindakan Amazon yang terdaftar. ListInstanceProfilesTindakan ini memungkinkan pengguna untuk melihat semua peran yang tersedia di Akun AWS.

contoh Contoh kebijakan yang memberikan izin kepada pengguna untuk menggunakan EC2 konsol Amazon untuk meluncurkan instance dengan peran apa pun
{ "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 EC2 instans Amazon (menggunakan) PassRole

Anda dapat menggunakan PassRole izin untuk membatasi peran mana yang dapat diteruskan pengguna ke EC2 instans Amazon saat pengguna meluncurkan instance. 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 bahwa pengguna Alice memiliki izin hanya untuk meluncurkan EC2 instans Amazon dan bekerja dengan bucket Amazon S3, tetapi peran yang dia berikan ke EC2 instance Amazon memiliki izin untuk bekerja dengan dan Amazon DynamoDB. IAM Dalam hal ini, Alice mungkin dapat meluncurkan instance, masuk ke dalamnya, mendapatkan kredensil keamanan sementara, dan kemudian melakukan atau tindakan IAM DynamoDB yang tidak dia otorisasi.

Untuk membatasi peran mana yang dapat diteruskan pengguna ke EC2 instans Amazon, Anda membuat kebijakan yang mengizinkan PassRole tindakan tersebut. Anda kemudian melampirkan kebijakan ke pengguna (atau ke IAM grup yang menjadi milik pengguna) yang akan meluncurkan EC2 instans Amazon. Di Resource elemen kebijakan, Anda mencantumkan peran atau peran yang diizinkan diteruskan pengguna ke EC2 instans Amazon. Saat pengguna meluncurkan instance dan mengaitkan peran dengannya, Amazon EC2 memeriksa apakah pengguna diizinkan untuk melewati peran itu. 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

PassRolebukan API tindakan dengan cara yang sama seperti itu RunInstances atau ListInstanceProfiles apa adanya. Sebagai gantinya, ini ARN adalah izin yang AWS memeriksa setiap kali peran 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 hal ini, ini memastikan bahwa pengguna diizinkan untuk melampirkan peran tertentu ke EC2 instance Amazon.

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

Kebijakan contoh berikut memungkinkan pengguna menggunakan Amazon EC2 API untuk meluncurkan instance dengan peran. ResourceElemen menentukan Amazon Resource Name (ARN) peran. Dengan menentukanARN, kebijakan memberi pengguna izin 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.

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

Memungkinkan peran profil instans untuk beralih ke peran dalam akun lain

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

Bayangkan Anda menggunakan dua Akun AWS dan Anda ingin mengizinkan aplikasi yang berjalan pada EC2 instance Amazon untuk menjalankan AWS CLIperintah di kedua akun. Asumsikan bahwa EC2 instance Amazon ada di akun111111111111. Instance tersebut menyertakan peran profil abcd instance yang memungkinkan aplikasi melakukan tugas Amazon S3 hanya-baca di bucket dalam akun my-bucket-1 yang sama. 111111111111 Namun demikian, aplikasi tersebut juga harus diizinkan untuk menjalankan efgh peran lintas akun untuk mengakses my-bucket-2 bucket Amazon S3 dalam akun 222222222222.

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

Peran profil EC2 instans abcd Amazon harus memiliki kebijakan izin berikut untuk mengizinkan aplikasi mengakses bucket my-bucket-1 Amazon S3:

Akun 111111111111 Kebijakan abcd Izin Peran

{ "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:::my-bucket-1/*", "arn:aws:s3:::my-bucket-1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

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

Akun 111111111111 Kebijakan abcd Kepercayaan Peran

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

Anggap bahwa efgh peran lintas akun memungkinkan tugas Amazon S3 hanya baca di bucket my-bucket-2 dengan akun 222222222222 yang sama. Untuk melakukannya, peran lintas akun efgh harus memiliki kebijakan izin berikut:

Akun 222222222222 Kebijakan efgh Izin Peran

{ "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:::my-bucket-2/*", "arn:aws:s3:::my-bucket-2" ] } ] }

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

Akun 222222222222 Kebijakan efgh Kepercayaan Peran

{ "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 EC2 instans Amazon, Anda perlu menggunakan IAM konsol untuk membuat peran, meluncurkan EC2 instance Amazon 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 EC2 instans Amazon, lihat informasi berikut: