2016-02-05 115 views
2

我想要做的事情(繼續我之前詢問的問題:How can I filter AWS Instances by IAM role in powershell and get the private ip address of that instance?)獲取具有特定IAM角色的實例的私有IP地址。我已經得到了完美的作品代碼:AWS IAM策略通過關聯的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角色的實例的信息。因此,如果他們嘗試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僅適用於所有實例,但我不確定。

我將不勝感激,謝謝!

回答

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

+0

我看了一下你放在這裏的鏈接,但只是一個問題,'get-ec2instance'不會是這裏理想的命令,因爲這將要求查看所有實例。是否有另一個類似的命令,我可以使用它將返回實例的屬性(與IAM角色),甚至只是這些實例的私有IP地址(與IAM角色)? –

+0

以下是關於資源標記和從此網站所說的內容:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#UsingWithEC2_Actions我試圖將'arn:aws:iam :: 12356789102:iam策略的'Resource'部分中的instance-profile/TestRole'。它仍然不起作用,但有沒有辦法從那裏? –

+0

等通過一堆文件閱讀,並明白'ec2:DescribeInstances'不能被過濾,因爲該功能不受支持。我決定堅持使用我的原始代碼獲取所有實例並通過它們進行篩選!感謝您的建議雖然:) –

2

到目前爲止沒有選擇,你可以限制一個IAM用戶看到一個特定的EC2實例。

只有一個API調用存在ec2-describe-instances這表明需要具有所有實例的所有權限或沒有權限。

+0

yeap!沒有意識到'describe instances'不能被過濾):謝謝你的幫助:) –