Bagaimana cara menentukan peran IAM untuk instance Amazon EC2 yang diluncurkan melalui AWS CLI?

20

Saya menggunakan perintah "aws ec2 run-instances" (dari AWS Command Line Interface (CLI) ) untuk meluncurkan instance Amazon EC2 . Saya ingin menetapkan peran IAM untuk instance EC2 yang saya luncurkan. Peran IAM dikonfigurasikan dan saya dapat menggunakannya dengan sukses saat meluncurkan instance dari UI web AWS. Tetapi ketika saya mencoba melakukan ini menggunakan perintah itu, dan opsi "--iam-instance-profile", gagal. Melakukan "aws ec2 run-instance help" menunjukkan Arn = dan Name = subbidang untuk nilainya. Ketika saya mencoba mencari Arn menggunakan "aws iam list-instance-profiles" itu memberikan pesan kesalahan ini:

Terjadi kesalahan klien (AccessDenied): Pengguna: arn: aws: sts :: xxxxxxxxxxxx: asumsi-peran / shell / i-15c2766d tidak diizinkan melakukan: iam: ListInstanceProfiles pada sumber daya: arn: aws: iam :: xxxxxxxxxxxx: instance -Profil/

(di mana xxxxxxxxxxxx adalah nomor akun AWS 12 digit saya)

Saya mencari string Arn melalui web UI dan menggunakannya melalui "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell" pada perintah run-instance, dan gagal dengan :

Terjadi kesalahan klien (UnauthorizedOperation): Anda tidak berwenang untuk melakukan operasi ini.

Jika saya mengabaikan opsi "--iam-instance-profile" sepenuhnya, instance akan diluncurkan tetapi tidak memiliki pengaturan peran IAM yang saya butuhkan. Jadi izin tampaknya ada hubungannya dengan menggunakan "--iam-instance-profile" atau mengakses data IAM. Saya mengulangi beberapa kali dalam kasus gangguan AWS (kadang-kadang terjadi) dan tidak berhasil.

Saya menduga bahwa mungkin ada batasan bahwa instance dengan peran IAM tidak diizinkan untuk meluncurkan instance dengan peran IAM yang lebih kuat. Tetapi dalam kasus ini, contoh saya melakukan perintah di memiliki peran IAM yang sama yang saya coba gunakan. bernama "shell" (meskipun saya juga mencoba menggunakan yang lain, tidak beruntung).

  • Apakah menetapkan peran IAM bahkan tidak diizinkan dari sebuah instance (melalui kredensial peran IAM-nya)?

  • Apakah ada beberapa izin peran IAM yang lebih tinggi diperlukan untuk menggunakan peran IAM, daripada yang diperlukan untuk hanya meluncurkan contoh sederhana?

  • Apakah "--iam-instance-profile" cara yang tepat untuk menentukan peran IAM?

  • Apakah saya perlu menggunakan subset dari string Arn, atau memformatnya dengan cara lain?

  • Apakah mungkin untuk mengatur peran IAM yang dapat melakukan akses peran IAM apa pun (mungkin "Super Root IAM" ... mengarang nama ini)?

FYI, semuanya melibatkan Linux yang berjalan pada instance. Juga, saya menjalankan semua ini dari sebuah instance karena saya tidak bisa menginstal alat ini di desktop saya. Itu dan saya tidak ingin menempatkan kredensial pengguna IAM saya pada penyimpanan AWS seperti yang disarankan oleh AWS di sini .

setelah dijawab:

Saya tidak menyebutkan izin peluncuran contoh "PowerUserAccess" (vs "AdministratorAccess") karena saya tidak menyadari akses tambahan diperlukan pada saat pertanyaan diajukan. Saya berasumsi bahwa peran IAM adalah "informasi" yang melekat pada peluncuran. Tetapi sebenarnya lebih dari itu. Itu adalah pemberian izin.

Skaperen
sumber

Jawaban:

23

Memperbarui

Mike Pope telah menerbitkan artikel yang bagus tentang Pemberian Izin untuk Meluncurkan Mesin Virtual EC2 dengan Peran IAM (Izin PassRole) di Blog Keamanan AWS , yang menjelaskan materi pelajaran dari sudut pandang AWS.


Jawaban awal

Jawaban Skaperen sebagian benar (+1), tetapi sedikit tidak tepat / menyesatkan sebagai berikut (penjelasannya agak terlalu rumit untuk dikomentari, oleh karena itu jawaban yang terpisah ini):

Untuk meluncurkan instance EC2 dengan peran IAM memerlukan akses administratif ke fasilitas IAM.

Ini benar seperti itu dan menunjuk ke masalah yang mendasarinya, tetapi izin administratif yang diperlukan agak terbatas, sehingga kesimpulan berikut ...

Karena peran IAM memberikan izin, jelas ada masalah keamanan yang harus diatasi. Anda tidak ingin peran IAM menjadi sarana untuk memungkinkan eskalasi izin.

... agak menyesatkan, sejauh masalah keamanan potensial dapat diatasi dengan benar. Subjek dibahas dalam Pemberian Aplikasi yang Berjalan di Amazon EC2 Instances Akses ke Sumber Daya AWS :

Anda dapat menggunakan peran IAM untuk mengelola kredensial untuk aplikasi yang berjalan pada instance Amazon EC2. Saat Anda menggunakan peran, Anda tidak harus mendistribusikan kredensial AWS ke mesin virtual Amazon EC2. Sebagai gantinya, Anda dapat membuat peran dengan izin yang dibutuhkan aplikasi saat dijalankan di Amazon EC2 dan melakukan panggilan ke sumber daya AWS lainnya. Saat pengembang meluncurkan instance Amazon EC2, mereka dapat menentukan peran yang Anda buat untuk dikaitkan dengan instance tersebut. Aplikasi yang berjalan pada contoh kemudian dapat menggunakan kredensial peran untuk menandatangani permintaan.

Sekarang, dalam kasus penggunaan di tangan pengembang yang disebutkan [yang] meluncurkan contoh Amazon EC2 sebenarnya contoh EC2 sendiri, yang tampaknya menghasilkan 22 masalah keamanan yang dijelaskan Skaperen. Itu tidak benar-benar terjadi meskipun seperti yang diilustrasikan oleh kebijakan sampel di bagian Izin yang Diperlukan untuk Menggunakan Peran dengan Amazon EC2 :

{
   "Version": "2012-10-17",
   "Statement": [{
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:ListInstanceProfiles",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"ec2:*",
      "Resource":"*"
    }]
}

Jadi iam:PassRolesebenarnya satu-satunya izin IAM yang diperlukan, dan sementara secara teknis bersifat administratif, ini tidak terlalu jauh - tentu saja, kebijakan sampel di atas masih akan memungkinkan untuk meningkatkan izin dengan cara mendaftar dan pada gilirannya melewati peran apa pun yang tersedia, tetapi ini dapat dicegah dengan menetapkan hanya peran yang diinginkan / aman untuk dilewati untuk kasus penggunaan yang ada - ini diuraikan dalam bagian Membatasi Peran Yang Dapat Dioper ke Instance Amazon EC2 (Menggunakan PassRole) :

Anda dapat menggunakan izin PassRole untuk mencegah pengguna meneruskan peran ke Amazon EC2 yang memiliki lebih banyak izin daripada yang telah diberikan pengguna, dan kemudian menjalankan aplikasi di bawah hak istimewa yang ditingkatkan untuk peran itu. Dalam kebijakan peran, izinkan tindakan PassRole dan tentukan sumber daya (seperti arn: aws: iam :: 111122223333: role / ec2Roles / *) untuk menunjukkan bahwa hanya peran atau rangkaian peran tertentu yang dapat diteruskan ke instance Amazon EC2 .

Kebijakan sampel masing-masing menggambarkan secara tepat sesuai dengan kasus penggunaan yang ada, yaitu memberikan izin untuk meluncurkan mesin virtual dengan peran dengan menggunakan Amazon EC2 API :

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect":"Allow",
      "Action":"ec2:RunInstances",
      "Resource":"*"
    },
    {
      "Effect":"Allow",
      "Action":"iam:PassRole",
      "Resource":"arn:aws:iam::123456789012:role/Get-pics"
    }]
}
Steffen Opel
sumber
Terima kasih atas info tentang iam: PassRole. Itu lebih detail daripada yang saya pelajari sebelumnya, itu menunjukkan lebih banyak daripada yang bisa dilakukan dengan mengkonfigurasi izin seperti ini.
Skaperen
1

Untuk meluncurkan instance EC2 dengan peran IAM memerlukan akses administratif ke fasilitas IAM. Ini berlaku bahkan jika instance baru memiliki peran yang sama persis dengan instance yang melakukan peluncuran. Contoh yang saya luncurkan dari memiliki izin "PowerUserAccess", yang memungkinkan peluncuran contoh, tetapi tidak akses peran IAM. Setelah saya mengajukan izin dalam contoh peluncuran ke "AdministratorAccess" kemudian berhasil.

Karena peran IAM memberikan izin, jelas ada masalah keamanan yang harus diatasi. Anda tidak ingin peran IAM menjadi sarana untuk memungkinkan eskalasi izin. Tetapi ini juga berarti untuk memberikan peran IAM, instance peluncuran harus memiliki "AdministratorAccess" atau menggunakan akses pengguna / kunci rahasia (dengan izin tersebut) dari dalam instance (tidak disarankan), yang akan memungkinkan pemberian peran IAM.

Mampu meluncurkan instance dengan izin yang sama (peran IAM yang sama) seperti yang dimiliki oleh instance yang melakukan launching akan berguna, tetapi EC2 atau IAM tidak memiliki tingkat granularitas ini, atau tidak memiliki sarana untuk memverifikasi ini dengan aman. .

Skaperen
sumber
1
Anda menganalisis / menggambarkan masalah mendasar dengan benar (+1), tetapi kesimpulan Anda sedikit tidak tepat / menyesatkan - Saya telah menambahkan jawaban terpisah untuk menjelaskan dengan benar bagaimana potensi masalah keamanan ditangani oleh IAM.
Steffen Opel