AWS BatchをFargateで起動する際のIAMロール付与
この記事の概要
intro
定期的にシェルスクリプトを実行したい要件があり
AWS Batchを使うべく検証していたところ
AWS公式ブログからFetch & Run
なるユースケースを発見しました。
これはs3バケットからECSコンテナがシェルスクリプトをダウンロード → 実行する
という一連の流れをaws batchで実行できるものです。
fetch and runをFargateで起動すると
先程示したfetch and run通りにリソースを作成しても
AWS BatchのコンピューティングリソースとしてFargate[1]を選択した場合
Unable to locate credentials
エラーが発生してしまい、S3に接続できませんでした。
Unable to locate credentials の解消
Unable to locate credentials
のエラーはecsコンテナにIAMロールが付与できていないことにより発生しています。
解消するためには、ECSタスクロールとしてIAMロールのarnを定義する必要があります。
しかし、AWS Batchのコンソールにタスクロール
に該当しそうな項目はありません。
実行ロール の欄ではない。
AWS Batch
> ジョブ定義
> プラットフォーム互換性
を見ると
実行ロール
なるものがありますが、これだけでは解消しませんでした。
これはECSタスクロールに該当しないようです。
この項目はFargateリソースに付与されるIAMではない。
正解は ジョブロール設定
ではどこの項目に指定すればよいかというと
AWS Batch
> ジョブ定義
> ジョブ設定
> ジョブロール設定
です。
ここで指定されたIAMロールがリソースに付与されるようです。
fetch and run(Fargate)に必要なロールとポリシー
今回はfetch and runをFargateで実行するために必要だったものをメモがてら記します。
実行ロール
AWS BatchからECSを呼ぶために必要なもの。
信頼エンティティ
ECSからの実行ができればOKです。
コード(クリックして開く)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"ecs-tasks.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
許可ポリシー
AWSマネージドのAmazonECSTaskExecutionRolePolicyがあればOKです。
arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
ジョブロール
信頼エンティティ
実行ロールと同じくECSからの実行ができればOKです。
許可ポリシー
- AmazonS3ReadOnlyAccess
S3からシェルスクリプトをダウンロードするために必要 - AmazonECSTaskExecutionRolePolicy
FargateでECSを実行するために必要 - 操作したいリソースに対しての許可ポリシー
outro
fetch and runですが、使い勝手がよく
インスタンスに依存しない処理を置き換えするにはうってつけだと感じました。
公式がこういったユースケースを用意してくれると、レビューを通す上でも話しやすいですね。
Discussion