2

我正在尝试做的事情(继续我之前提出的一个问题:如何在 powershell 中按 IAM 角色过滤 AWS 实例并获取该实例的私有 IP 地址?)是获取具有特定属性的实例的私有 IP 地址IAM 角色。而且我有一个完美运行的代码:

$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 Role 的实例的信息。因此,如果他们尝试get-ec2instance(例如),它应该只返回相关实例的信息,而不是帐户中的所有实例。

这是我的 IAM 政策:

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

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

我将不胜感激,谢谢!

4

2 回答 2

2

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

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

于 2016-02-05T08:25:28.783 回答
1

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

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

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

请让我知道它是否适合您。

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

于 2016-02-05T08:19:19.523 回答