AWS CLI aracılığıyla başlatılan bir Amazon EC2 örneği için bir IAM rolü nasıl belirlenir?


20

Bir Amazon EC2 örneği başlatmak için "aws ec2 çalışma örnekleri" komutunu ( AWS Komut Satırı Arabirimi'nden (CLI) ) kullanıyorum . Başlattığım EC2 örneği için bir IAM rolü ayarlamak istiyorum . IAM rolü yapılandırılmıştır ve AWS web kullanıcı arayüzünden bir örnek başlatırken başarıyla kullanabilirim. Ancak bunu bu komutu ve "--iam-instance-profile" seçeneğini kullanarak yapmaya çalıştığımda başarısız oldu. "Aws ec2 çalışma örnekleri yardımı" yapıldığında değer Arn = ve Name = alt alanları gösterir. "Aws iam list-instance-profiles" kullanarak Arn aramaya çalıştığınızda bu hata iletisini verir:

Bir istemci hatası (AccessDenied) oluştu: Kullanıcı: arn: aws: sts :: xxxxxxxxxxxx: varsayılan rol / kabuk / i-15c2766d gerçekleştirme yetkisi yok: iam: ListInstance Kaynaktaki dosyalar: arn: an: iam :: xxxxxxxxxxxx: örnek -profil/

(burada xxxxxxxxxxxx, AWS 12 haneli hesap numaramdır)

Arn dizesini web kullanıcı arabirimi aracılığıyla aradım ve "--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell" aracılığıyla çalışma örnekleri komutunda kullandım ve bu başarısız oldu :

Bir istemci hatası (Yetkisiz Çalışma) oluştu: Bu işlemi gerçekleştirme yetkiniz yok.

"--İam-instance-profile" seçeneğini tamamen bırakırsam örnek başlatılır, ancak ihtiyacım olan IAM rol ayarına sahip olmaz. Dolayısıyla iznin "--iam-instance-profile" kullanarak veya IAM verilerine erişmeyle ilgili olduğu görülüyor. AWS aksaklıkları (bazen olur) ve başarılı olamaması durumunda birkaç kez tekrarladım.

Belki de IAM rolüne sahip bir örneğin daha güçlü bir IAM rolüne sahip bir örnek başlatmasına izin verilmediğine dair bir kısıtlama olduğundan şüphelendim. Ancak bu durumda, komutu gerçekleştirdiğim örnek, kullanmaya çalıştığım aynı IAM rolüne sahip. "Kabuk" adında (başka bir şans kullanmayı denedim, ama şanssız).

  • Bir örnekten IAM rolü ayarlanmasına izin verilmiyor mu (IAM rolü kimlik bilgileri aracılığıyla)?

  • IAM rollerini kullanmak için, basit bir örneği başlatmak için gerekenden daha yüksek IAM rolü izni var mı?

  • "--İam-instance-profile" bir IAM rolü belirtmek için uygun bir yöntem midir?

  • Arn dizesinin bir alt kümesini kullanmam veya başka bir şekilde biçimlendirmem gerekiyor mu?

  • Herhangi bir IAM rol erişimini gerçekleştirebilecek bir IAM rolü ayarlamak mümkün mü (belki bir "Süper Kök IAM" ... bu adı oluşturur)?

Bilginize, her şey bulut sunucuları üzerinde çalışıyor. Ayrıca, tüm bunları bir örnekten çalıştırıyorum çünkü bu araçları masaüstüme yükleyemedim. Bu ve IAM kullanıcı kimlik bilgilerimi burada AWS tarafından önerildiği gibi herhangi bir AWS depolama alanına koymak istemiyorum .

cevaplandıktan sonra:

"PowerUserAccess" ("AdministratorAccess" vs) başlatma örnek izin bahsetmedim çünkü soru sorulduğu anda ek erişim gerekli olduğunu fark etmedi. IAM rolünün lansmana ekli "bilgi" olduğunu varsaydım. Ama gerçekten bundan daha fazlası. İzin verilmesidir.

Yanıtlar:


23

Güncelleştirme

Mike Papa hakkında güzel bir yazı yayınladı IAM Rolleri (PassRole İzin) ile başlatın EC2 örnekleri İzni Verilmesine üzerinde AWS Güvenlik Blog bakış bir AWS noktadan konuyu açıklıyor.


İlk Yanıt

Skaperen'in cevabı kısmen doğrudur (+1), ancak aşağıdaki gibi biraz kesin / yanıltıcıdır (açıklama bir yorum için biraz fazla karmaşık görünüyor, bu nedenle bu ayrı cevap):

IAM rolü olan bir EC2 örneği başlatmak için IAM tesisine yönetici erişimi gerekir.

Bu böyle doğrudur ve altta yatan soruna işaret etmektedir, ancak gerekli idari izinler oldukça sınırlıdır, bu nedenle aşağıdaki sonuç ...

IAM rolleri izin verdiğinden, açıkça ele alınması gereken bir güvenlik sorunu vardır. IAM rollerinin izin artışına izin vermenin bir yolu olmasını istemezsiniz.

... potansiyel yanılgıların doğru bir şekilde çözülebildiği sürece biraz yanıltıcıdır. Konu , Amazon EC2 Örneklerinde Çalışan Uygulamalara AWS Kaynaklarına Erişim Verme bölümünde ele alınmıştır :

Amazon EC2 bulut sunucularında çalışan uygulamaların kimlik bilgilerini yönetmek için IAM rollerini kullanabilirsiniz. Rolleri kullandığınızda, AWS kimlik bilgilerini Amazon EC2 bulut sunucularına dağıtmanız gerekmez. Bunun yerine, uygulamaların Amazon EC2'de çalıştıklarında ihtiyaç duyacakları izinlerle bir rol oluşturabilir ve diğer AWS kaynaklarına çağrı yapabilirsiniz. Geliştiriciler bir Amazon EC2 örneği başlattığında, örnekle ilişkilendirmek için oluşturduğunuz rolü belirtebilirler. Örnek üzerinde çalışan uygulamalar, istekleri imzalamak için rol kimlik bilgilerini kullanabilir.

Şimdi, eldeki kullanım durumunda, bir Amazon EC2 örneğini başlatan söz konusu geliştiriciler aslında Sk2'nin yakaladığı 22 güvenlik sorununu ortaya çıkaran EC2 örneklerinin kendileri. Amazon EC2 ile Rol Kullanmak için Gerekli İzinler bölümündeki örnek politikada gösterildiği gibi durum böyle değildir :

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

Yani iam:PassRoleteknik olarak idari nitelikteki bu değil aslında sadece IAM izin gerekli olduğunu ve süre kadar ulaşan bu - elbette, yukarıdaki örnek politikası hala kullanılabilir herhangi bir rol geçen listeleme yoluyla ve sırayla izinleri tırmandırmaya izin verecek, ancak bu yalnızca eldeki kullanım durumu için geçmesi istenen / güvenli olan rolleri belirleyerek önlenebilir - bu, Amazon EC2 Örneklerine Hangi Rollerin Aktarılabileceğini Kısıtlama (PassRole Kullanarak) bölümünde açıklanmıştır :

PassRole iznini kullanarak, kullanıcıların daha önce izin verilenden daha fazla izni olan Amazon EC2'ye geçmesini ve ardından bu rol için yükseltilmiş ayrıcalıklar altında uygulamaları çalıştırmasını engelleyebilirsiniz. Rol ilkesinde, PassRole eylemine izin verin ve Amazon EC2 örneğine yalnızca belirli bir rolün veya rol kümesinin geçirilebileceğini belirtmek için bir kaynak belirtin (arn: aws: iam :: 111122223333: role / ec2Roles / * gibi). .

İlgili örnek politika, eldeki kullanım senaryosuyla tam olarak eşleşir, yani Amazon EC2 API'sını kullanarak rolü olan bir örnek başlatma izni verir :

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

İam: PassRole hakkında bilgi için teşekkürler. Bu, daha önce öğrendiğimden daha ayrıntılı, bu gibi izinleri yapılandırarak yapılabileceklerden çok daha fazlasını gösteriyor.
Skaperen

1

IAM rolü olan bir EC2 örneği başlatmak için IAM tesisine yönetici erişimi gerekir. Bu, yeni örnek başlatılmayı gerçekleştiren örnekle tam olarak aynı role sahip olsa bile geçerlidir. Başlattığım örnek, bir örneğin başlatılmasına izin veren ancak IAM rol erişimine izin vermeyen "PowerUserAccess" iznine sahipti. Başlatma örneğindeki izni "AdministratorAccess" e ilerlettikten sonra işe yaradı.

IAM rolleri izin verdiğinden, açıkça ele alınması gereken bir güvenlik sorunu vardır. IAM rollerinin izin artışına izin vermenin bir yolu olmasını istemezsiniz. Ancak bu aynı zamanda herhangi bir IAM rolü vermek için, başlatma örneğinin "AdministratorAccess" özelliğine sahip olması veya herhangi bir IAM rolü verilmesine izin verecek şekilde, örnek içinden (önerilmez) kullanıcı erişim / gizli anahtarları kullanması (önerilmez) anlamına gelir.

Lansmanı yapan örnekle aynı izne (aynı IAM rolü) sahip bir örnek başlatabilmek yararlı olacaktır, ancak EC2 veya IAM bu düzeyde ayrıntı düzeyine sahip değildir veya bunu güvenli bir şekilde doğrulama araçlarına sahip değildir .


1
Altta yatan sorunu doğru bir şekilde analiz ettiniz / açıkladınız (+1), ancak sonuçlarınız biraz kesin değil / yanıltıcı - Olası güvenlik sorununun IAM tarafından nasıl ele alındığını doğru bir şekilde açıklamak için ayrı bir cevap ekledim .
Steffen Opel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.