web-dev-qa-db-ja.com

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

「aws ec2 run-instances」コマンドを使用して( AWSコマンドラインインターフェイス(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ロールがあります。 「シェル」という名前です(私は別のものを使ってみましたが、運がありませんでした)。

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

  • プレーンなインスタンスを起動するためだけに必要なものよりも、IAMロールを使用するために必要ないくつかのより高いIAMロール権限がありますか?

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

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

  • すべてのIAMロールアクセスを実行できるIAMロールを設定することは可能ですか(おそらく「スーパールートIAM」...この名前を構成しています)?

参考までに、すべてがインスタンスで実行されているLinuxに関係しています。また、デスクトップにこれらのツールをインストールできなかったため、これらすべてをインスタンスから実行しています。それと、AWSのアドバイスに従って、IAMユーザーの資格情報をAWSストレージに配置したくない ここ

回答後:

「PowerUserAccess」(対「AdministratorAccess」)の起動インスタンス権限については触れませんでした。質問が行われたときに、追加のアクセスが必要であることに気付いていなかったためです。 IAMの役割は、ローンチに付随する「情報」であると想定しました。しかし、それだけではありません。許可の付与です。

21
Skaperen

更新

Mike Popeが AWSセキュリティブログIAMロールでEC2インスタンスを起動するためのアクセス許可(PassRole Permission) に関する素晴らしい記事を公開しました。これは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インスタンス自体であり、Scaperenが概説したキャッチ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権限であり、技術的には管理上の性質ですが、これはそれほど広範囲ではありません。もちろん、上記のサンプルポリシーでは、リストを使用して権限を昇格させ、使用可能な役割を渡すことができます。ただし、これは、ユースケースで渡すことが望まれる/安全なロールのみを指定することで防止できます。これについては、セクションで概説しています。AmazonEC2インスタンスに渡すことができるロールを制限する(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"
    }]
}
24
Steffen Opel

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

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

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

1
Skaperen