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

Posted

技术标签:

【中文标题】如何创建 IAM 策略以根据子网名称标签控制对 Amazon EC2 资源的访问?【英文标题】:How do I create an IAM policy to control access to Amazon EC2 resources based on the subnet name tag? 【发布时间】:2017-11-10 01:05:29 【问题描述】:

我需要限制特定用户角色在任何 VPC 的公有子网中执行任何 EC2 实例操作。有没有办法通过利用子网标签来实现这一点?我知道如何使用 EC2 资源标签来控制对 EC2 资源的访问,如下面的代码 sn-p 所示,但在我的情况下,我需要基于 vpc 或子网标签。有没有类似 vpc:ResourceTag 条件的东西我可以利用?


                "Effect" : "Allow",
                "Action" : "ec2:*",
                "Resource" : "*",
                "Condition" : 
                     "StringEquals" : 
                          "ec2:ResourceTag/UserName" : "$aws:username"
                     

【问题讨论】:

【参考方案1】:

我不确定您所说的“子网标签”是什么意思,但您似乎无法使用 IAM 来根据子网类型(即公共与私有)进行限制。这是有道理的,因为您可以通过添加或删除路由轻松更改子网类型。

如果您需要阻止某些用户对某些 EC2 实例执行操作,请在 EC2 实例上使用标签,并根据标签使用允许或拒绝规则。来自blog 宣布这一点:


  "Version": "2012-10-17",
  "Statement": [
    
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances",      
        "ec2:RebootInstances",
    "ec2:TerminateInstances"
      ],
      "Condition": 
        "StringEquals": 
          "ec2:ResourceTag/critical":"true"
        
      ,
      "Resource": [
        "arn:aws:ec2:your_region:your_account_ID:instance/*"

      ],
      "Effect": "Deny"
    
  ]

为了更安全一点,请确保拒绝编辑或删除标签!

【讨论】:

我需要限制某些用户组在公有子网中创建 EC2 实例。目前,所有子网都有一个名称标签,用于指示子网是公有还是私有,如下所示:subnet-CIDR-REGION-Type (ex. 10.0.4.0-ap-southeast-2-Public) 您可以将 StringEquals 替换为 StringLike,将“critical”更改为您的标签名称,并使用以 public 结尾的值。如果您命名标签子网-CIDR-Region-type,而不是值,那么这将不起作用。【参考方案2】:

@Chris 感谢您为我提供的提示:我使用了以下语句,但无法在我标记的公共子网中启动实例


    "Version": "2012-10-17",
    "Statement": [
        
            "Condition": 
                "StringLike": 
                    "ec2:ResourceTag/Name": "*public*"
                
            ,
            "Action": [
                "ec2:Run*",
                "ec2:Terminate*",
                "ec2:Cancel*",
                "ec2:Create*",
                "ec2:Delete*",
                "ec2:Modify*",
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "arn:aws:ec2:ap-southeast-2:106625493890:subnet/*",
            "Effect": "Deny",
            "Sid": "DenyInstanceActionsForPublicSubnets"
        ,

【讨论】:

以上是关于如何创建 IAM 策略以根据子网名称标签控制对 Amazon EC2 资源的访问?的主要内容,如果未能解决你的问题,请参考以下文章

如何重命名 AWS 客户 IAM 策略?

AWS IAM-如何禁止用户通过控制台进行更改,但允许通过CLI更改API

我们能否将 Amazon S3 IAM 策略传播到 FSx 以获得光泽文件系统?

重命名 IAM 角色

我可以搜索现有 IAM 策略以查找特定操作吗?

如何使用 Terraform 创建没有代入角色策略的 AWS IAM 角色?