2016-08-19 50 views
1

我正在嘗試在使用AWS ECS的碼頭集裝箱內運行boto3 python腳本。我的腳本需要訪問SQS(獲取&刪除消息)和Lambda(許可搜索和運行)。AWS ECS碼頭集裝箱Boto3 IAM權限

爲了讓Docker容器在我的本地機器上運行,我能夠使用以下docker run命令將我的aws憑證傳遞到docker容器中。

docker run -v ~/.aws:/root/.aws

最近ECS宣佈:

Amazon ECS now supports IAM roles for tasks. When you specify an IAM role for a task, its containers can then use the latest versions of the AWS CLI or SDKs to make API requests to authorized AWS services. Learn More

我附上一個任務IAM角色的任務,但一旦運行,我得到以下錯誤的任務:

Unable to run task ECS was unable to assume the role that was provided for this task. Please verify that the role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role.

任何想法,將不勝感激。

+1

Boto3還不支持IAM角色ECS任務 - http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#task-iam-roles-最低 - SDK(我也學會了這種困難的方式...試圖部署的東西,沒有工作,然後我想通了) –

+0

感謝您的答覆。很高興知道IAM角色不適用於Boto3。我正在研究這個帖子作爲一個解決方案,但一直沒有能夠得到它的工作。 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html –

回答

1

Boto3爲其API函數使用botocore庫,它允許爲每個Boto3版本提供一系列botocore版本,所以即使您擁有最新的Boto3版本,也可能沒有最新的botocore。

Botocore支持版本號爲1.4.37的ECS IAM角色,因此如果您將環境中的底層botocore更新爲至少該版本,則應該能夠使用ECS IAM角色執行任務功能。

4

看起來Boto現在支持IAM任務角色,但無論如何,當Boto客戶端嘗試發出請求時(而不是在嘗試啓動任務時)這會是一個問題。

此處的問題在錯誤消息中定義。或者:

1)您的用戶沒有爲任務角色定義的iam:PassRole權限。這可以通過編輯您的用戶的政策有類似如下的聲明中加入:

{ 
    "Effect": "Allow", 
    "Action": "iam:PassRole", 
    "Resource": "arn:aws:iam::<account>:role/<role name>" 
} 

2)你想分配給任務沒有正確的信任關係的任務的角色。將以下信任策略添加到ECS任務角色,以確保它可以由任務承擔。

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Service": "ecs-tasks.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRole" 
    } 
    ] 
}