在 IAM 策略中限制 EC2 实例的类型

Posted

技术标签:

【中文标题】在 IAM 策略中限制 EC2 实例的类型【英文标题】:Limit the type of EC2 instance in IAM policy 【发布时间】:2020-12-01 12:28:08 【问题描述】:

我想创建一个 IAM 策略,其中 IAM 用户将无法在 us-east-1 区域中启动除 t2.micro Ubuntu 之外的任何实例。我在 IAM 策略中添加了 ami,但 AWS 不仅允许 Ubuntu ami,还允许 IAM 用户启动所有实例。可能是什么问题


"Version": "2012-10-17",
"Statement": [
    
        "Sid": "TheseActionsDontSupportResourceLevelPermissions",
        "Effect": "Allow",
        "Action": [
            "ec2:Describe*"
        ],
        "Resource": "*"
    ,
    
        "Sid": "TheseActionsSupportResourceLevelPermissions",
        "Effect": "Allow",
        "Action": [
            "ec2:RunInstances",
            "ec2:TerminateInstances",
            "ec2:StopInstances",
            "ec2:StartInstances"
        ],
        "Resource": "arn:aws:ec2:us-east-1:196687784845:instance/ami-0885b1f6bd170450c"
    
]

【问题讨论】:

您是说要限制 Instance Type 并且 限制它们使用特定的 AMI?实例类型限制应放在RunInstancesModifyInstanceAttribute 上。 AMI 限制应放在RunInstances 【参考方案1】:

这应该为您指明正确的方向


   "Version":"2012-10-17",
   "Statement":[
      
         "Sid":"TheseActionsDontSupportResourceLevelPermissions",
         "Effect":"Allow",
         "Action":[
            "ec2:Describe*"
         ],
         "Resource":"*"
      ,
      
         "Sid":"TheseActionsSupportResourceLevelPermissions",
         "Effect":"Allow",
         "Action":[
            "ec2:RunInstances",
            "ec2:TerminateInstances",
            "ec2:StopInstances",
            "ec2:StartInstances"
         ],
         "Resource":"arn:aws:ec2:us-east-1:196687784845:instance/ami-0885b1f6bd170450c",
         "Condition":
            "ForAnyValue:StringLike":
               "ec2:ImageType":"t2.micro"
            
         
      
   ]

【讨论】:

使用它我也可以启动其他 amis,而我只想要 us-east-1 中的“ami-0885b1f6bd170450c”。感谢您调查它。非常感谢。 "ec2:ImageType | string like | t2.micro 不是此操作支持的条件键。"这似乎是 StartInstance、StopInstance、ec2:TerminateInstances 的错误。【参考方案2】:

如果使用了错误的实例类型或错误的 ami,我建议使用 Deny 规则来禁止启动实例。请注意,我删除了 Sid 参数,因为它是可选的。

明确的Deny 规则将覆盖任何Allow 规则。这样可以更轻松地禁止不需要的操作,而不是尝试排除允许的操作。见https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow

尝试以下方法:


   "Version": "2012-10-17",
   "Statement": [
      
         "Effect": "Allow",
         "Action": [
            "ec2:Describe*"
         ],
         "Resource": "*"
      ,
      
         "Effect": "Allow",
         "Action": [
            "ec2:RunInstances",
            "ec2:TerminateInstances",
            "ec2:StopInstances",
            "ec2:StartInstances"
         ],
         "Resource": "*"
      ,
      
         "Effect": "Deny",
         "Action": [
           "ec2:RunInstances"
         ],
         "Resource": "*",
         "Condition": 
            "StringNotLike": 
               "ec2:ImageType": "t2.micro"
            
         
      ,
      
         "Effect": "Deny",
         "Action": [
           "ec2:RunInstances"
         ],
         "NotResource": "arn:aws:ec2:us-east-1:196687784845:instance/ami-0885b1f6bd170450c"
      
   ]

【讨论】:

我试过了,它似乎允许启动每个实例,而不是“ami-0885b1f6bd170450c”。感谢回复。非常感谢。

以上是关于在 IAM 策略中限制 EC2 实例的类型的主要内容,如果未能解决你的问题,请参考以下文章

限制启动实例的 Amazon IAM 用户策略

IAM允许用户仅查看自己的实例

如何创建 IAM 策略以根据子网名称标签控制对 Amazon EC2 资源的访问?

AWS 限制 EC2 创建的策略权限

AWS IAM 策略拒绝对自动扩展组或 ECS 集群内的任何 EC2 实例的权限

AWS EC2 启动/停止实例的 IAM 策略