AWS CLIを介して起動されるAmazon EC2インスタンスのIAMロールを指定するにはどうすればよいですか?


20

「aws ec2 run-instances」コマンド(AWS Command Line Interface(CLI)から)を使用してAmazon EC2インスタンスを起動しています。起動するEC2インスタンスIAMロールを設定したい。IAMロールが設定され、AWSウェブUIからインスタンスを起動するときにそれを正常に使用できます。しかし、そのコマンドと「--iam-instance-profile」オプションを使用してこれを実行しようとすると、失敗しました。「aws ec2 run-instances help」を実行すると、値のArn =およびName =サブフィールドが表示されます。「aws iam list-instance-profiles」を使用してArnを検索しようとすると、次のエラーメッセージが表示されます。

クライアントエラー(AccessDenied)が発生しました:ユーザー:arn:aws:sts :: xxxxxxxxxxxx:assumed-role / shell / i-15c2766dの実行は許可されていません:リソースのiam:ListInstanceProfiles:arn:aws:iam :: xxxxxxxxxxxx:instance -プロフィール/

(xxxxxxxxxxxxはAWSの12桁のアカウント番号です)

Web UIでArn文字列を検索し、run-instancesコマンドで「--iam-instance-profile Arn = arn:aws:iam :: xxxxxxxxxxxx:instance-profile / shell」でそれを使用しましたが、失敗しました:

クライアントエラー(UnauthorizedOperation)が発生しました:この操作を実行する権限がありません。

「--iam-instance-profile」オプションを完全に省略した場合、インスタンスは起動しますが、必要なIAMロール設定はありません。そのため、許可は「--iam-instance-profile」の使用またはIAMデータへのアクセスに関係しているようです。AWSの不具合(時々起こる)の場合に何度か繰り返しましたが、成功しませんでした。

IAMロールを持つインスタンスが、より強力なIAMロールを持つインスタンスを起動することは許可されないという制限があるのではないかと考えました。しかし、この場合、コマンドを実行しているインスタンスは、使用しようとしているのと同じIAMロールを持っています。「shell」と名付けられました(私は別のものを試してみましたが、運はありません)。

  • IAMロールの設定は、インスタンスから(IAMロール認証情報を介して)許可されていませんか?

  • IAMロールを使用するために、プレーンインスタンスを起動するために必要なものよりも高いIAMロール許可が必要ですか?

  • 「--iam-instance-profile」はIAMロールを指定する適切な方法ですか?

  • Arn文字列のサブセットを使用する必要がありますか、それとも他の方法でフォーマットする必要がありますか?

  • IAMロールアクセスを実行できるIAMロールをセットアップすることは可能ですか(「スーパールートIAM」...この名前を構成する場合があります)?

参考までに、すべてはインスタンス上で実行されるLinuxに関係しています。また、これらのツールをデスクトップにインストールできなかったため、これらすべてをインスタンスから実行しています。それに加えて、ここで AWSが推奨するように、IAMユーザー認証情報をAWSストレージに配置したくありません。

回答後:

「PowerUserAccess」(vs.「AdministratorAccess」)の起動インスタンス許可については言及しませんでした。質問が行われた時点で追加のアクセスが必要であることに気づかなかったためです。IAMの役割は打ち上げに付随する「情報」であると想定しました。しかし、それは本当にそれ以上です。それは許可の付与です。

回答:


23

更新

Mike Popeは、AWSの観点から主題を説明するIAMロールでEC2インスタンスを起動するアクセス許可の付与(PassRoleアクセス許可)に関する素晴らしい記事をAWSセキュリティブログに公開しました。


初期回答

Skaperenの答えは部分的に正しい(+1)が、次のようにわずかに不正確/誤解を招く(説明はコメントには少々複雑すぎるようであるため、この別個の答え)。

IAMロールでEC2インスタンスを起動するには、IAM機能への管理アクセスが必要です。

これはそれ自体正しいものであり、根本的な問題を指し示していますが、必要な管理権限はかなり制限されているため、次の結論になります...

IAMロールはアクセス許可を付与するため、明らかにセキュリティ上の問題に対処する必要があります。IAMロールは、許可のエスカレーションを許可する手段にはなりたくないでしょう。

...潜在的なセキュリティ問題に適切に対処できる限り、少し誤解を招く可能性があります。件名は、Amazon EC2インスタンスで実行されるアプリケーションのAWSリソースへのアクセスの許可に記載されています

IAMロールを使用して、Amazon EC2インスタンスで実行されるアプリケーションの認証情報を管理できます。ロールを使用する場合、AWS認証情報をAmazon EC2インスタンスに配布する必要はありません。代わりに、アプリケーションがAmazon EC2で実行され、他のAWSリソースを呼び出すときに必要となるアクセス許可を持つロールを作成できます。開発者は、Amazon EC2インスタンスを起動するときに、インスタンスに関連付けるために作成したロールを指定できます。インスタンスで実行されるアプリケーションは、ロール認証情報を使用してリクエストに署名できます。

さて、手元のユースケースでは、言及された開発者[Amazon EC2インスタンスを起動する]は、実際にはEC2インスタンスそのものであり、Skaperenが概説したキャッチ22セキュリティ問題をもたらすようです。Amazon EC2でロールを使用するために必要なアクセス許可セクションのサンプルポリシーに示されているように、実際にはそうではありません。

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

ですからiam:PassRole、当然のことながら、上記のサンプルポリシーは、まだ上場し、順番にすべての可能な役割を渡すことによって、権限を昇格できるようになる-実際には唯一のIAMの許可が必要で、しばらく技術的に行政の自然のされ、これは広範囲に及ぶということではありませんしかし、これは手元のユースケースに渡すことが望ましい/安全なロールのみを指定することで防ぐことができます-これはセクション「Amazon EC2インスタンスに渡すことができるロールを制限する(PassRoleを使用)」で説明されています

PassRoleアクセス許可を使用して、ユーザーが既に付与されているよりも多くのアクセス許可を持つAmazon EC2にロールを渡し、そのロールの昇格された権限でアプリケーションを実行できないようにすることができます。ロールポリシーで、PassRoleアクションを許可し、リソース(arn:aws:iam :: 111122223333:role / ec2Roles / *など)を指定して、特定のロールまたはロールセットのみをAmazon EC2インスタンスに渡すことができることを示します。

それぞれのサンプルポリシーは、手元のユースケースと完全に一致することを示しています。つまり、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"
    }]
}

iam:PassRoleについての情報をありがとう。それは私が以前に学んだよりも詳細であり、このようにパーミッションを設定することでできる以上のことを示しています。
スカペレン

1

IAMロールでEC2インスタンスを起動するには、IAM機能への管理アクセスが必要です。これは、新しいインスタンスが起動を行うインスタンスとまったく同じ役割を持つ場合でも適用されます。私が起動したインスタンスには「PowerUserAccess」権限があり、インスタンスの起動は許可されていましたが、IAMロールアクセスは許可されていませんでした。起動中のインスタンスのアクセス許可を「AdministratorAccess」に進めると、機能しました。

IAMロールはアクセス許可を付与するため、明らかにセキュリティ上の問題に対処する必要があります。IAMロールは、許可のエスカレーションを許可する手段にはなりたくないでしょう。ただし、これはまた、IAMロールを付与するために、起動するインスタンスが「AdministratorAccess」を持っているか、インスタンス内からユーザーアクセス/シークレットキーを使用する必要があることを意味します(推奨されません)。これにより、IAMロールを付与できます。

インスタンスを起動するのと同じ権限(同じIAMロール)でインスタンスを起動できると便利ですが、EC2またはIAMにはこのレベルの粒度がないか、これを安全に検証する手段がありません。


1
あなたは根本的な問題を正しく分析/記述しましたが(+1)、あなたの結論はわずかに不正確/誤解を招きます-IAMが潜在的なセキュリティ問題にどのように対処しているかを適切に説明するために別の回答を追加しました。
ステフェンオペル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.