2017-07-17 163 views
0

我正在對EC2執行一些測試,並且想限制已運行實例的權限,僅描述其他實例(例如,如果它請求創建一個新的,該請求應該被拒絕)。如何爲正在運行的EC2實例分配新權限

我創建了以下策略的IAM角色:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Deny", 
      "Action": [ 
       "ec2:DescribeInstances", 
       "ec2:DescribeImages", 
       "ec2:DescribeKeyPairs", 
       "ec2:DescribeSecurityGroups", 
       "ec2:DescribeAvailabilityZones", 
       "ec2:RunInstances", 
       "ec2:TerminateInstances", 
       "ec2:StopInstances", 
       "ec2:StartInstances" 
      ], 
      "Resource": "*" 
     } 
    ] 
} 

這在理論上應該阻止我創造當我登錄的已運行實例的新實例,但它沒有(我使用boto庫爲測試,與ec2.run_instances())。

任何幫助將不勝感激。

+0

*「理論上這應該阻止我在登錄已運行的實例時創建新實例。」*僅當您使用該實例的角色憑據時。如果您使用其他*憑據,則可以執行任何憑據允許的操作。你能澄清一點,你究竟在做什麼? –

+0

@ Michael-sqlbot你發現確切的問題:)謝謝。你能否在回答中寫下這件事,以便我能接受它? –

+0

我不想錯誤地描述問題......問題是,您認爲實例角色策略會影響來自實例的所有API請求,而不管憑據如何?或者你已經在實例上存儲了一些IAM憑證,並且他們在沒有意識到的情況下被使用? –

回答

0

附加到IAM實例角色的策略僅影響使用實例角色憑證進行的請求。它對使用其他憑證(例如訪問密鑰ID和IAM用戶的祕密)所做的請求沒有任何影響,即使請求來自實例上運行的代碼。

在這種情況下,在這裏,有意外的特權可用,可能的解釋是另一組憑據存儲在實例中,並且代碼使用那些沒有開發人員意識到的憑據。

這也許是一個很好的例子,說明它被認爲是的最佳實踐在EC2上運行的代碼中使用角色憑證,並且不在實例上存儲其他憑證。

相關問題