【问题标题】:IAM policy to restrict users to instances in a specific VPC用于将用户限制在特定 VPC 中的实例的 IAM 策略
【发布时间】:2018-07-11 13:16:10
【问题描述】:

我正在尝试创建一个IAM policy 来限制用户访问特定VPC 中的所有实例。遵循我制定但不起作用的政策。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1450441260778",
            "Action": "ec2:*",
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:region:Account_num:vpc/vpc-id"
        }
    ]
}

我已在保单中填写了对应的account_numvpc-id

【问题讨论】:

  • “资源”中有错字。您拼错了“地区”。
  • @helloV 这应该没关系,因为我已经用创建 vpc 的实际区域替换了该区域。
  • 对不起。那是匆忙输入的。这是附加给用户的唯一策略吗?
  • @helloV 是的 poicy 已附加,并且在将其附加到所需的组后,甚至没有从相应的帐户中列出实例。

标签: amazon-web-services amazon-iam


【解决方案1】:

您想限制用户访问,并且您使用了allow 属性,该属性将授予访问实例的权限。这是期望的行为吗?

如果你真的想限制尝试"Effect": "Deny" in same policy 。

但是,如果您想向某些用户授予访问权限,请按照以下方式进行。

在这种情况下,以下政策对我很有效。我用它来限制开发人员开始停止实例的访问。您可以在第二个块中添加任意数量的权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances*",
                "ec2:StopInstances*"
            ],
            "Resource": "arn:aws:ec2:ap-southeast-1:ACCOUNT_ID:instance/i-32ds2a29"
        }
    ]
}

ap-southeast-1 是我案例的区域。 要控制特定 vpc 中的实例,您只需使用其 id 即可。vpc+instance_id 没有单独的 arn,您可以使用 arn:aws:ec2:region:account-id:instance/instance-id 作为 arn refer this

同样,您可以使用相同的策略来限制特定 vpc 中的用户,方法是使用 arn:aws:ec2:region:account-id:vpc/vpc-id 作为 arn,添加 Action ec2:*deny 生效。

【讨论】:

  • 它有效,我注意到 AWS 在用户界面中存在缺陷。我想以前的政策也会奏效。即使在应用策略之后,AWS 界面也会显示终止实例的选项,这在我们的策略中是不允许的,但是。当您继续终止实例时,AWS 会提醒您您无权执行该操作。
  • 这不是缺陷,而是设计使然。通过在 aws 中设置任何策略,视图上的选项永远不会被禁用,而禁用的选项来自您为执行某些操作而进行的 api 调用。它的所有功能都相同。 (它们显示了所有可能的操作,但您只能做您被允许做的事情)。
  • 是的@Ankit Kulkarni,我知道视图不应该被抹去,但应该被禁用。该选项应该在那里查看可能的可用选项,但如果用户没有足够的权限,则应禁用该选项。
【解决方案2】:

某些权限不能应用于特定资源。当您在 IAM 中检查政策时,这些权限将显示错误。

为了将用户限制为特定 VPC 并允许所有 EC2 操作,以下策略可以帮助您实现这一目标:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "NonResourceBasedReadOnlyPermissions",
        "Action": [
            "ec2:Describe*",
            "ec2:CreateKeyPair",
            "ec2:CreateSecurityGroup",
            "iam:GetInstanceProfiles",
            "iam:ListInstanceProfiles"
        ],
        "Effect": "Allow",
        "Resource": "*"
    },
    {
        "Sid": "IAMPassroleToInstance",
        "Action": [
            "iam:PassRole"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:iam::123456789012:role/VPCLockDown"
    },
    {
        "Sid": "AllowInstanceActions",
        "Effect": "Allow",
        "Action": [
            "ec2:RebootInstances",
            "ec2:StopInstances",
            "ec2:TerminateInstances",
            "ec2:StartInstances",
            "ec2:AttachVolume",
            "ec2:DetachVolume"
        ],
        "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*",
        "Condition": {
            "StringEquals": {
                "ec2:InstanceProfile": "arn:aws:iam::123456789012:instance-profile/VPCLockDown"
            }
        }
    },
    {
        "Sid": "EC2RunInstances",
        "Effect": "Allow",
        "Action": "ec2:RunInstances",
        "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*",
        "Condition": {
            "StringEquals": {
                "ec2:InstanceProfile": "arn:aws:iam::123456789012:instance-profile/VPCLockDown"
            }
        }
    },
    {
        "Sid": "EC2RunInstancesSubnet",
        "Effect": "Allow",
        "Action": "ec2:RunInstances",
        "Resource": "arn:aws:ec2:us-east-1:123456789012:subnet/*",
        "Condition": {
            "StringEquals": {
                "ec2:vpc": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-7bcd371e"
            }
        }
    },
    {
        "Sid": "RemainingRunInstancePermissions",
        "Effect": "Allow",
        "Action": "ec2:RunInstances",
        "Resource": [
            "arn:aws:ec2:us-east-1:123456789012:volume/*",
            "arn:aws:ec2:us-east-1::image/*",
            "arn:aws:ec2:us-east-1::snapshot/*",
            "arn:aws:ec2:us-east-1:123456789012:network-interface/*",
            "arn:aws:ec2:us-east-1:123456789012:key-pair/*",
            "arn:aws:ec2:us-east-1:123456789012:security-group/*"
        ]
    },
    {
        "Sid": "EC2VpcNonresourceSpecificActions",
        "Effect": "Allow",
        "Action": [
            "ec2:DeleteNetworkAcl",
            "ec2:DeleteNetworkAclEntry",
            "ec2:DeleteRoute",
            "ec2:DeleteRouteTable",
            "ec2:AuthorizeSecurityGroupEgress",
            "ec2:AuthorizeSecurityGroupIngress",
            "ec2:RevokeSecurityGroupEgress",
            "ec2:RevokeSecurityGroupIngress",
            "ec2:DeleteSecurityGroup"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "ec2:vpc": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-7bcd371e"
            }
        }
    }
]
}

为了详细了解每个语句的作用,我建议阅读 AWS 的 this blog。该政策允许用户:

  • 登录 AWS 管理控制台并转到 Amazon EC2 控制台。
  • 启动 EC2 实例,只要它们:

    在适当的 VPC 中指定子网。 指定允许的实例配置文件。

  • 在实例上启动/停止/重启/终止/附加卷/分离卷,只要它们:

    指定使用正确的实例配置文件启动的实例。

  • 删除安全组、路由、路由表、网络 ACL 和 ACL 条目,以及授权和撤销安全组入口和出口规则,只要它们位于正确的 VPC 中。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2012-05-18
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多