如何使用IAM服务在AWS中按实例类型限制实例启动

问题描述 投票:3回答:3

我正在使用该策略将RunIstances仅限制为特定的实例类型和特定的区域。当我在测试用户下运行启动向导或仿真时,出现“隐式拒绝”错误。

这里是政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1::instance/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:InstanceType": [
            "t1.micro",
            "m1.small"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1::image/ami-*",
        "arn:aws:ec2:us-east-1::subnet/*",
        "arn:aws:ec2:us-east-1::network-interface/*",
        "arn:aws:ec2:us-east-1::volume/*",
        "arn:aws:ec2:us-east-1::key-pair/*",
        "arn:aws:ec2:us-east-1::security-group/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:CreateSecurityGroup",
        "ec2:DeleteSecurityGroup",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:CreateKeyPair"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

有人可以指出这个问题吗?

amazon-web-services amazon-ec2 policy amazon-iam
3个回答
2
投票

在资源块中,在arn行的两个“:”之间插入星号,以指定所有帐户,或将其替换为您的帐号。

"arn:aws:ec2:us-east-1:*:instance/*"

"arn:aws:ec2:us-east-1:*:image/ami-*",
"arn:aws:ec2:us-east-1:*:subnet/*",
"arn:aws:ec2:us-east-1:*:network-interface/*",
"arn:aws:ec2:us-east-1:*:volume/*",
"arn:aws:ec2:us-east-1:*:key-pair/*",
"arn:aws:ec2:us-east-1:*:security-group/*"

1
投票

请参阅IAM策略生成器工具。您的代码看起来不正确的语法。

首先,允许EC2中的所有操作。接下来,拒绝EC2中的特定操作。

允许在EC2中执行所有操作的示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "NotAction": "ec2:*",
      "Resource": "*"
    }
  ]
}

拒绝在特定区域创建资源的示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyTheseActions",
      "Effect": "Deny",
      "Action": [
        "ec2:RunInstances",
        "ec2:StartInstances"
      ],
      "Resource": "arn:aws:ec2:us-west-1",
      "Resource": "arn:aws:ec2:us-east-1", 
      "Resource": "arn:aws:ec2:eu-west-1",
      "Resource": "arn:aws:ec2:sa-east-1",
      "Resource": "arn:aws:ec2:ap-northeast-1",
      "Resource": "arn:aws:ec2:ap-southeast-1",
      "Resource": "arn:aws:ec2:ap-southeast-2"
    }
  ]
}

0
投票

目前,更简单的控制对AWS区域,EC2和RDS实例大小和类型的访问的方法可能是将IAM策略与Condition(可选)策略元素一起使用-让您指定生效策略的条件

我们将使用Condition语句来设置AWS IAM策略,这将严格为3 more cost effective-> AWS regions提供完整的AWS EC2RDS服务。分别是:

  • us-east-1(美国北弗吉尼亚州)
  • us-east-2(美国,俄亥俄州)
  • us-west-2(美国俄勒冈州)

将不允许所有其他区域,此策略还设置了同时启动EC2RDS实例的条件访问控制。而不是指定所有可能运行的type/class实例,我们在语句中使用Deny效果,该效果允许通过实例大小(microsmallmedium和[ C0])。这具有防止其他任何策略覆盖该块的进一步效果。

large

此政策不能保护我们免受什么侵害?

  • 这并不限制通过其他服务部署的实例的大小-最重要的是,通过自动扩展组或EKS。
  • 我们不以任何方式限制给定用户启动的实例总数。正常限制在这里有帮助,但仅通过策略无法确定当前正在运行多少实例。
  • 我们不限制成本,只是增加一些保护。如果您要为费用超支或峰值设置警报,则需要查看“结算”控件。
    • { "Version": "2012-10-17", "Statement": [ { "Sid": "MultiServiceFullAccessCustom", "Effect": "Allow", "Action": [ "ec2:*", "rds:*" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "aws:RequestedRegion": [ "us-east-1", "us-east-2", "us-west-2" ] } } }, { "Sid": "Ec2RunInstanceCustomSize", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:instance/*" ], "Condition": { "ForAnyValue:StringNotLike": { "ec2:InstanceType": [ "*.nano", "*.micro", "*.small", "*.medium", "*.large" ] } } }, { "Sid": "RdsFullAccessCustomSize", "Effect": "Deny", "Action": [ "rds:CreateDBInstance", "rds:CreateDBCluster" ], "Resource": [ "arn:aws:rds:*:*:db:*" ], "Condition": { "ForAnyValue:StringNotLike": { "rds:DatabaseClass": [ "*.micro", "*.small", "*.medium", "*.large" ] } } } ] }
    • terraform-aws-cost-billing-alarm
    • terraform-aws-cost-budget
    • terraform-aws-lambda-nuke
  • 我们不需要任何多因素身份验证(MFA)进行角色切换。假定登录的用户已经在使用某种形式的第二因素进行身份验证。这主要是由于与MFA一起使用CLI带来的复杂性增加,并且角色更改仅是为了允许替代,而不是允许提升到另一个安全域这一事实。您可能想要添加功能;添加起来并不难,并且可以带来合理的保护。
  • 我们仅考虑实例启动,但是您可能会考虑谁可以关闭或终止实例,因为这可能会导致停机或数据丢失。

参考链接

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.