2016-02-29 103 views
1

IAM policy variables S3資源相當冷靜,讓你創建通用的合併政策,例如,允許用戶訪問路徑中的S3存儲桶基於他們的用戶名,如:授予訪問基於角色名

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Action": ["s3:GetObject","s3:PutObject","s3:DeleteObject"], 
      "Effect": "Allow", 
      "Resource": "arn:aws:s3:::fooCorp-user-files/${aws:username}/*" 
     }, 
     { 
      "Action": "s3:ListBucket", 
      "Effect": "Allow", 
      "Resource": "arn:aws:s3:::fooCorp-user-files" 
     } 
    ] 
} 

我的問題是,如何使用角色(附加到EC2實例)而不是用戶帳戶完成此操作?

我有許多具有獨特IAM用戶帳戶的應用程序服務器,這些用戶帳戶鏈接到類似於上面的通用政策。這隔離了每個用戶/應用程序可訪問的文件,而無需創建多個策略。

我想切換這些服務器使用roles代替,但似乎並沒有成爲像aws:rolename同等IAM變量。

The docs表示當使用分配給EC2實例的角色時,aws:username變量未設置,而aws:userid[role-id]:[ec2-instance-id](這也沒有幫助)。

這真的看起來像你應該能夠做的事情..或者我是以這種錯誤的方式來?

回答

0

(跨張貼到AWS S3 IAM policy for role for restricting few instances to connect to S3 bucket based in instance tag or instance id

而不是使用aws:SourceArn的,使用aws:userid

您提到的Request Information That You Can Use for Policy Variables文檔有表示包含的aws:userid各種值的表:

對於分配給Amazon EC2實例作用,它被設置爲role-id:ec2-instance-id

因此,您可以使用角色ID用於啓動Amazon EC2實例以允許訪問的角色或實例ID

例如,這一個是基於角色ID

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "SID123", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*" 
      ], 
      "Resource": [ 
       "*" 
      ], 
      "Condition": { 
       "StringLike": { 
        "aws:userid": [ 
         "AROAIIPEUJOUGITIU5BB6*" 
        ] 
       } 
      } 
     } 
    ] 
} 

當然,如果你要基於角色ID分配權限,那麼你可以很容易地授予中的權限角色本身。

這一個是基於實例ID

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "SID123", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*" 
      ], 
      "Resource": [ 
       "*" 
      ], 
      "Condition": { 
       "StringLike": { 
        "aws:userid": [ 
         "*:i-03c9a5f3fae4b630a" 
        ] 
       } 
      } 
     } 
    ] 
} 

實例ID將保持與實例,但是,如果一個新的實例啓動一個新的將被分配,即使是從同亞馬遜機器圖像(AMI)。

+0

第二個例子對我來說似乎不對。 – Sirex

+0

以什麼方式?實例ID是正在推出的新的更長的ID之一。 –

+0

無視。我誤讀了它 – Sirex