用于通过关联的 IAM 角色限制实例的 AWS IAM 策略

AWS IAM Policy for restricting instances by associated IAM role

我正在尝试做的(继续我之前提出的问题:)是获取具有特定 IAM 角色的实例的私有 IP 地址。我有一个完美运行的代码:

$filter = New-Object Amazon.EC2.Model.Filter -Property @{Name = "iam-instance-profile.arn"; Value = "arn:aws:iam::123456789012:instance-profile/TestRole"} 
$ec2 = @(Get-EC2Instance -Filter $filter)
$ec2instances = $ec2.instances 
$ipaddress = $ec2instances.privateipaddress

但是,现在我不想在代码中执行过滤器,而是想创建一个 IAM 策略来限制用户只能获取有关具有特定 IAM 的实例的信息角色。因此,如果他们尝试 get-ec2instance(例如),它应该只 return 有关相关实例的信息,而不是帐户中所有实例的信息。

这是我的 IAM 策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ],
            "Condition": {
                "ArnEquals": {
                    "ec2:InstanceProfile": "arn:aws:iam::12356789102:instance-profile/TestRole"
                }
            }
        }
    ]
}

然而,当我在 Powershell 上 运行 get-ec2instance 时,我被告知我无权执行该操作。我认为这可能是因为 get-ec2instance 仅适用于所有实例,但我不确定。

非常感谢您的帮助,谢谢!

问题的原因是 get-ec2instance 试图描述您的所有实例,包括没有分配适当角色的实例。

在谈论描述 EC2 实例或列出 S3 存储桶时,您应该能够列出所有内容,否则您会收到 403 错误。

我建议您仅出于安全目的限制您对 IAM 的访问,并继续使用代码 iteslf 过滤您的实例。

请告诉我它是否适合你。

P. S. 当您决定使用 IAM 角色来组织您的访问时,您可能走错了路。 AWS 提供了一项名为 "Resource tagging" 的功能。它的直接目的是组织您的资源并根据结构应用权限。 更多信息在这里: http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-ec2-tag-permissions

目前还没有可以限制 IAM 用户查看特定 EC2 实例的选项。

只有一个 API 调用存在 ec2-describe-instances,这表明需要对所有实例或 none 拥有所有权限。