我正在尝试做什么(继续我之前提出的问题:How can I filter AWS Instances by IAM role in powershell and get the private ip address of that instance?)获取具有特定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
(例如),它应该仅返回相关实例的信息,而不是帐户中的所有实例。
这是我的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
仅适用于所有实例,但我不确定。
我很感激帮助,谢谢!
答案 0 :(得分:2)
到目前为止,没有选项可以限制IAM用户查看特定的EC2实例。
只有一个API调用存在 ec2-describe-instances ,它表明需要拥有所有实例的所有权限,或者没有。
答案 1 :(得分:1)
问题的原因是get-ec2instance试图描述所有实例,包括没有分配适当角色的实例。
在谈论描述EC2实例或列出S3存储桶时,您应该能够列出所有内容,否则会收到403错误。
出于安全考虑,我建议您限制使用IAM进行访问,并使用代码iteslf继续过滤您的实例。
如果它适合您,请告诉我。
P上。 S.当您决定使用IAM角色来组织您的访问时,您可能采取了错误的方式。 AWS提供了一项名为“资源标记”的功能。它的直接目的是组织您的资源并根据结构应用权限。 更多信息: http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-ec2-tag-permissions