2014-06-25 201 views
8

我試圖使用IAM角色創建通過ansible EC2實例,但我同時發動新的實例,我得到錯誤AWS EC2實例創建:錯誤

failed: [localhost] => (item= IAMRole-1) => {"failed": true, "item": " IAMRole-1"} 
msg: Instance creation failed => UnauthorizedOperation: You are not authorized to perform 
this operation. Encoded authorization failure message: Ckcjt2GD81D5dlF6XakTSDypnwrgeQb0k 
ouRMKh3Ol1jue553EZ7OXPt6fk1Q1-4HM-tLNPCkiX7ZgJWXYGSjHg2xP1A9LR7KBiXYeCtFKEQIC 
W9cot3KAKPVcNXkHLrhREMfiT5KYEtrsA2A-xFCdvqwM2hNTNf7Y6VGe0Z48EDIyO5p5DxdNFsaSChUcb 
iRUhSyRXIGWr_ZKkGM9GoyoVWCBk3Ni2Td7zkZ1EfAIeRJobiOnYXKE6Q 

而IAM角色具有完全EC2訪問,以下政策

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Action": "ec2:*", 
     "Effect": "Allow", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "elasticloadbalancing:*", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "cloudwatch:*", 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": "autoscaling:*", 
     "Resource": "*" 
    } 
    ] 
} 

請任何建議。

回答

10

這裏的問題不在於IAM Role for Amazon EC2本身,而是您(即您使用的AWS憑證)似乎缺少在開始時將該角色「傳遞」到所請求的EC2實例所需的iam:PassRole權限,見權限要求內Granting Applications that Run on Amazon EC2 Instances Access to AWS Resources與Amazon EC2使用角色的詳細信息:

要與角色啓動一個實例,開發者必須有權限 推出的Amazon EC2實例,並允許通過IAM角色。

以下示例策略允許用戶使用AWS Management 控制檯啓動具有角色的實例。該政策允許用戶 通過任何角色並通過指定 星號(*)執行所有Amazon EC2操作。 ListInstanceProfiles操作允許用戶查看所有在AWS賬戶上可用的角色 。

通過使用亞馬遜EC2控制檯

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
    "Effect": "Allow", 
    "Action": [ 
     "iam:PassRole", 
     "iam:ListInstanceProfiles", 
     "ec2:*" 
    ], 
    "Resource": "*" 
    }] 
} 

之所以通過PassRole許可,需要通過這種間接授予任何角色啓動一個實例 用戶權限

示例策略是能力限制用戶在啓動實例時用戶可以傳遞給Amazon EC2實例的角色

這有助於防止用戶運行應用程序,該應用程序的權限超過了用戶的權限 - 也就是說, 可以獲得較高的權限。例如,假設 用戶Alice只有權啓動Amazon EC2實例, 可以與Amazon S3存儲桶一起工作,但她傳遞給Amazon EC2 實例的角色有權與IAM和DynamoDB配合使用。在這種情況下,Alice可能能夠啓動該實例,登錄該實例,獲取臨時 安全證書,然後執行她未獲得授權的IAM或DynamoDB操作。

您可能需要閱讀我的回答How to specify an IAM role for an Amazon EC2 instance being launched via the AWS CLI?更詳盡的解釋,這也鏈接到麥克教皇的好文章約Granting Permission to Launch EC2 Instances with IAM Roles (PassRole Permission),這從一個角度AWS角度解釋了主題。