web-dev-qa-db-ja.com

PassRoleを除くIAMを除くすべてを許可するIAMポリシーを作成する

ユーザーがIAMロールを、S3バケットへの読み取り専用権限を許可するEC2インスタンスに関連付けることができるように、IAMポリシーを変更しようとしています。

私たちのチームはAWSでかなりのR&Dを行っているので、特権の昇格を可能にするIAM以外のすべてのAWSサービスへのアクセスを制限するのは嫌です。

この質問 の情報を使用してiam:PassRoleを追加しましたが、ポリシーはシミュレーターで検証できません。

{
"Statement": [
    {
        "Effect": "Allow",
        "NotAction": "iam:*",
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": "iam:PassRole",
        "Resource": "arn:aws:iam::ACCOUNTID:role/MYROLE"
    }
]
}

2番目のステートメントのリソースを"Resource": "*"に変更すると、検証が成功し、シミュレーターがPassRoleが明示的に許可されていることを示し、IAMの他のすべてが暗黙的に拒否され、S3のすべてが明示的に許可されます。

名前付きの役割で何が間違っていますか?すべての人にPassRoleを許可することで、セキュリティにどのような影響がありますか(ポリシーシミュレーターが機能していないと想定しています)。私が望むことを達成するためのより良い方法はありますか?

6
Dan Caseley

私には、これはPolicy Simulatorのバグのようです。アマゾン自身でさえあなたと同じようにポリシーを宣言します 彼らの例では 。シミュレーターは文句を言いますが、実際にこのポリシーをユーザーに添付することはうまくいきます。

名前付きの役割で何が間違っていますか?

私の知る限り、何もありません。

すべての人にPassRoleを許可することで、セキュリティにどのような影響がありますか(ポリシーシミュレーターが機能していないと想定しています)。

さて、あなたはどんな役割に対しても_iam:PassRole_アクションを許可するでしょう。これは基本的に、このポリシーを持つユーザーが、IAMロールがアタッチされたEC2インスタンスを起動できることを意味します。 上記でリンクしたAWSドキュメント でも説明されています:

または、このポリシーでリソースを「*」として指定することで、IAMユーザーにすべてのロールへのアクセスを許可できます。ただし、自分の役割(存在するもの、または後で作成するもの)を使用してインスタンスを起動するユーザーに、不要または必要のない権限が付与されているかどうかを検討してください。

3
Bazze