Jak określić rolę IAM dla instancji Amazon EC2 uruchamianej za pośrednictwem interfejsu wiersza polecenia AWS?

20

Korzystam z polecenia „aws ec2 run-instances” (z interfejsu wiersza poleceń AWS (CLI) ), aby uruchomić instancję Amazon EC2 . Chcę ustawić rolę IAM dla instancji EC2, którą uruchamiam. Rola IAM jest skonfigurowana i mogę z powodzeniem jej używać podczas uruchamiania instancji z internetowego interfejsu użytkownika AWS. Ale kiedy próbuję to zrobić za pomocą tego polecenia i opcji „--iam-instance-profile”, to się nie udało. Wykonanie „pomocy dla aws ec2 run-instance” pokazuje pola Arn = i Name = dla wartości. Kiedy próbuję wyszukać Arn przy użyciu „aws iam list-instance-profile”, pojawia się następujący komunikat o błędzie:

Wystąpił błąd klienta (AccessDenied): Użytkownik: arn: aws: sts :: xxxxxxxxxxxx: przejęta rola / shell / i-15c2766d nie jest autoryzowany do wykonywania: iam: ListInstanceProfiles w zasobie: arn: aws: iam :: xxxxxxxxxxxx: instancja -profil/

(gdzie xxxxxxxxxxxx to mój 12-cyfrowy numer konta AWS)

Poszukałem ciągu Arn za pośrednictwem internetowego interfejsu użytkownika i użyłem go poprzez „--iam-instance-profile Arn = arn: aws: iam :: xxxxxxxxxxxx: instance-profile / shell” w poleceniu run-instances, i to nie powiodło się z :

Wystąpił błąd klienta (UnauthorizedOperation): Nie masz uprawnień do wykonania tej operacji.

Jeśli całkowicie zrezygnuję z opcji „--iam-instance-profile”, instancja uruchomi się, ale nie będzie miała potrzebnego ustawienia roli IAM. Wydaje się, że to uprawnienie ma coś wspólnego z używaniem „--iam-instance-profile” lub dostępem do danych IAM. Powtórzyłem kilka razy w przypadku usterki AWS (zdarzają się czasem) i bez powodzenia.

Podejrzewałem, że być może istnieje ograniczenie, że instancja z rolą IAM nie może uruchomić instancji z silniejszą rolą IAM. Ale w tym przypadku instancja, w której wykonuję polecenie, ma tę samą rolę IAM, z której próbuję skorzystać. o nazwie „shell” (chociaż próbowałem też użyć innego, bez powodzenia).

  • Czy ustawienie roli IAM nie jest nawet dozwolone z poziomu instancji (poprzez poświadczenia roli IAM)?

  • Czy do korzystania z ról IAM potrzebne jest jakieś wyższe uprawnienie do roli IAM, niż jest to potrzebne do uruchomienia zwykłej instancji?

  • Czy „--iam-instance-profile” jest właściwym sposobem na określenie roli IAM?

  • Czy muszę użyć podzbioru ciągu Arn lub sformatować go w inny sposób?

  • Czy jest możliwe skonfigurowanie roli IAM, która może wykonywać dostęp do dowolnej roli IAM (może „Super Root IAM” ... tworzą tę nazwę)?

Do Twojej wiadomości, wszystko dotyczy Linuksa działającego w instancjach. Ponadto uruchamiam to wszystko z instancji, ponieważ nie mogłem zainstalować tych narzędzi na pulpicie. To i nie chcę umieszczać moich poświadczeń użytkownika IAM na żadnej pamięci AWS, zgodnie z zaleceniami AWS tutaj .

po odpowiedzi:

Nie wspomniałem o zezwoleniu na instancję uruchamiania „PowerUserAccess” (w porównaniu z „AdministratorAccess”), ponieważ nie zdawałem sobie sprawy, że w momencie zadawania pytania potrzebowałem dodatkowego dostępu. Zakładałem, że rolą IAM były „informacje” dołączone do premiery. Ale tak naprawdę to coś więcej. To jest udzielenie pozwolenia.

Skaperen
źródło

Odpowiedzi:

23

Aktualizacja

Mike Pope opublikował fajny artykuł na temat przyznawania uprawnień do uruchamiania instancji EC2 z rolami IAM (zezwolenie PassRole) na blogu bezpieczeństwa AWS , który wyjaśnia temat z punktu widzenia AWS.


Pierwsza odpowiedź

Odpowiedź Skaperena jest częściowo poprawna (+1), ale nieco nieprecyzyjna / myląca w następujący sposób (wyjaśnienie wydaje się nieco zbyt skomplikowane, aby można było dodać komentarz, stąd ta osobna odpowiedź):

Uruchomienie instancji EC2 z rolą IAM wymaga dostępu administracyjnego do narzędzia IAM.

Jest to poprawne jako takie i wskazuje na podstawowy problem, ale wymagane uprawnienia administracyjne są raczej ograniczone, więc następujący wniosek ...

Ponieważ role IAM udzielają uprawnień, należy wyraźnie rozwiązać problem bezpieczeństwa. Nie chcesz, aby role IAM były środkiem umożliwiającym eskalację uprawnień.

... jest nieco mylące, o ile potencjalny problem bezpieczeństwa można odpowiednio rozwiązać. Temat poruszono w Przyznawanie aplikacji działających na instancjach Amazon EC2 Dostęp do zasobów AWS :

Ról IAM można używać do zarządzania poświadczeniami dla aplikacji działających w instancjach Amazon EC2. Podczas korzystania z ról nie trzeba rozpowszechniać poświadczeń AWS wśród instancji Amazon EC2. Zamiast tego możesz utworzyć rolę z uprawnieniami, których będą potrzebować aplikacje, gdy będą działać na Amazon EC2 i wykonywać połączenia z innymi zasobami AWS. Gdy programiści uruchamiają instancję Amazon EC2, mogą określić rolę, którą utworzyłeś w celu powiązania z instancją. Aplikacje działające w instancji mogą następnie użyć poświadczeń roli do podpisania żądań.

Teraz, w omawianym przypadku użycia wspomniani programiści [którzy] uruchamiają instancję Amazon EC2, w rzeczywistości same są instancjami EC2, co wydaje się przynosić problem z zabezpieczeniem catch 22 opisanym przez Skaperen. Tak jednak nie jest, jak pokazano w przykładowej polityce w sekcji Uprawnienia wymagane do używania ról z Amazon EC2 :

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

Tak więc iam:PassRolejest to jedyne wymagane zezwolenie IAM i chociaż technicznie ma ono charakter administracyjny, nie jest to tak daleko idące - oczywiście powyższa przykładowa polityka nadal pozwoliłaby na eskalację uprawnień poprzez umieszczenie w wykazie i z kolei przekazanie dowolnej dostępnej roli, ale można temu zapobiec, określając tylko te role, które są pożądane / bezpieczne do przekazania dla danego przypadku użycia - jest to opisane w sekcji Ograniczanie, które role można przekazać do instancji Amazon EC2 (Korzystanie z PassRole) :

Możesz użyć uprawnienia PassRole, aby uniemożliwić użytkownikom przekazywanie roli do Amazon EC2, która ma więcej uprawnień niż użytkownik został już przyznany, a następnie uruchamianie aplikacji z podwyższonymi uprawnieniami do tej roli. W polityce roli zezwól na działanie PassRole i określ zasób (na przykład arn: aws: iam :: 111122223333: rola / ec2Roles / *), aby wskazać, że do określonej instancji Amazon EC2 można przekazać tylko określoną rolę lub zestaw ról. .

Odpowiednia przykładowa polityka dokładnie ilustruje podany przypadek użycia, tzn. Udziela pozwolenia na uruchomienie instancji z rolą za pomocą interfejsu API Amazon EC2 :

{
  "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
źródło
Dzięki za informacje o iam: PassRole. To jest więcej szczegółów niż nauczyłem się wcześniej, pokazuje o wiele więcej niż można zrobić, konfigurując takie uprawnienia.
Skaperen
1

Uruchomienie instancji EC2 z rolą IAM wymaga dostępu administracyjnego do narzędzia IAM. Ma to zastosowanie nawet wtedy, gdy nowa instancja ma mieć dokładnie taką samą rolę jak instancja wykonująca uruchomienie. Instancja, z której uruchamiam, miała uprawnienia „PowerUserAccess”, które pozwalały na uruchomienie instancji, ale nie miały dostępu do roli IAM. Gdy podniosłem uprawnienia w instancji uruchamiania do „AdministratorAccess”, to zadziałało.

Ponieważ role IAM udzielają uprawnień, należy wyraźnie rozwiązać problem bezpieczeństwa. Nie chcesz, aby role IAM były środkiem umożliwiającym eskalację uprawnień. Ale oznacza to również, że w celu przyznania dowolnej roli IAM instancja uruchamiająca musi mieć „AdministratorAccess” lub korzystać z dostępu / tajnych kluczy użytkownika (za takim pozwoleniem) z poziomu instancji (niezalecane), co pozwoliłoby na przyznanie dowolnej roli IAM.

Przydałaby się możliwość uruchomienia instancji z tym samym zezwoleniem (ta sama rola IAM), co posiadanie przez instancję wykonującą uruchomienie, ale EC2 lub IAM albo nie mają tego poziomu szczegółowości, albo nie mają środków, aby bezpiecznie to zweryfikować .

Skaperen
źródło
1
Prawidłowo przeanalizowałeś / opisałeś podstawowy problem (+1), ale twoje wnioski są nieco nieprecyzyjne / mylące - dodałem osobną odpowiedź, aby poprawnie wyjaśnić, w jaki sposób potencjalny problem bezpieczeństwa jest rozwiązany przez IAM.
Steffen Opel