如果实例ID与IAM策略中的实例ID不匹配,则限制IAM角色附加到EC2实例

时间:2017-05-31 19:17:29

标签: amazon-web-services amazon-iam

我正在尝试创建IAM策略,该策略限制将IAM角色传递给EC2实例,如果实例ID不等于i-1234567890abcd

政策中没有错误,但此政策也没有任何影响。如果我从以下策略中删除Condition,它可以正常工作,但它会将角色限制为附加到任何EC2实例。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": ["iam:PassRole"],
      "Resource": ["arn:aws:iam::000000000000:role/MyEC2InstanceSpecificRole"],
      "Condition": {
        "ArnNotEquals": {
          "ec2:SourceInstanceARN": "arn:aws:ec2:us-east-1:000000000000:instance/i-1234567890abcd"
        }
      }
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

我怀疑这是不可能的。

Granting a User Permissions to Pass a Role to an AWS Service文档声明:

  

要将角色(及其权限)传递给AWS服务,用户必须具有将角色传递给服务的权限。这有助于管理员确保只有经过批准的用户才能使用授予权限的角色配置服务。要允许用户将角色传递给AWS服务,您必须向用户的IAM用户,角色或组授予PassRole权限。

     

当用户将角色ARN作为参数传递给使用该角色为服务分配权限的任何API时,该服务会检查该用户是否具有iam:PassRole权限。要限制用户仅传递已批准的角色,可以使用IAM策略声明的Resources元素过滤iam:PassRole权限。

同样在Using an IAM Role to Grant Permissions to Applications Running on Amazon EC2 Instances上声明:

  

PassRole不是与RunInstances或ListInstanceProfiles相同的API操作。相反,只要角色ARN作为参数传递给API(或控制台代表用户执行此操作),AWS就会检查该权限。它可以帮助管理员控制哪些用户可以传递哪些角色。

PassRole的正常用例是确保用户不再向AWS Services授予应允许自己使用的权限。它试图避免非Admin用户将Admin角色传递给服务的情况,然后使用该服务来访问通常不允许访问的资源。例如,启动具有Admin角色的Amazon EC2实例,以便他们可以登录到该实例并发出他们通常无权使用的Admin命令。

上述文档建议评估PassRole权限以确认其权限以将某个角色转移到某个服务 ,而不是该服务的方式将使用角色本身(例如,然后将其分配给EC2实例以生成STS凭证)。