2016-08-19 21 views
1

AWS ECSを使用してdockerコンテナ内でboto3 pythonスクリプトを実行しようとしています。私のスクリプトはSQS(メッセージの削除&)とLambda(検索と実行の許可)にアクセスする必要があります。AWS ECS DockerコンテナBoto3 IAMパーミッション

私のローカルマシンで稼働しているドッカーコンテナを取得するには、次のドッカー実行コマンドを使用して、私のaws資格情報をドッキングコンテナに渡すことができました。

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はまだECSタスクのIAMの役割をサポートしていません - 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バージョンごとにさまざまなボトコアバージョンを使用できるため、最新のBoto3バージョンを使用していても最新のボトコアがない可能性があります。

ボトコアは、バージョン1.4.37のようにタスクのECS IAMロールをサポートしています。したがって、環境内のボトコアを少なくともそのバージョンに更新すると、タスク機能用の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" 
    } 
    ] 
} 
関連する問題