[アップデート]ECS TaskにIAMロールを付与することができるようになりました

docker

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

ECSにアップデートがありました!

今までECS TaskでIAMロールを利用する場合は、EC2インスタンスに付与したIAMロールを利用していました。この場合、EC2上で動くコンテナは共通のIAMロールを利用する必要がありました。つまり、Task(コンテナ単位)でのロール割当は行えませんでした。

今回のアップデートで、ECS上のTask(コンテナ)単位でIAMロールを付与できるようになりました。これにより、Taskに対して最小限の権限を付与することができます。

環境

以下で試してみました。

  • ECSの環境はGet startedから作成
  • EC2に付与されているIAMロールの権限を削除
  • ECS Task用のIAMロールの作成
  • EC2にログイン、コンテナ上でS3にアクセスしてみる

やってみた

ECS環境の作成

まずは、ECS環境を構築します。Get startedより、キーペア以外は全てデフォルトで作成しました。

20160715-ecs-task-iam-role-1

ECSに付与されているIAMロールを確認します。ECSに関する権限のみであることを確認します。後で、ECSのtask側に権限付与することでアクセス可能かを試します。

20160715-ecs-task-iam-role-2

ECS Task用のIAMロールの作成

ECS Task用のIAMロールを作成します。作成時、ロールタイプにAmazon EC2 Container Service Task Roleを選びます。

20160715-ecs-task-iam-role-3

また、ポリシーにはAmazonS3FullAccessをアタッチしておきます。

20160715-ecs-task-iam-role-4

ECS TaskにIAMロールをアタッチ

Task Definitions > console-sample-app-static > Create new revision を選択します。Task Roleが選択できるようになっているので選択します。

20160715-ecs-task-iam-role-5

Cluster > default > sample-webapp > Update より、Task Definitionで先ほど作成したrevisionを選択します。

20160715-ecs-task-iam-role-6

これで設定は終わりです。

コンテナからS3へアクセス可能か試してみた。

EC2にログインし、さらにコンテナ上からS3へアクセス可能か確認してみます。

まずは、コンテナにログインしてAWS CLIをインストールします。

$ ssh -i ~/.ssh/chiba-key.pem ec2-user@xx.xx.xx.xx
$ docker ps
CONTAINER ID        IMAGE                            COMMAND                   CREATED              STATUS              PORTS                NAMES
f2f349839a9f        httpd:2.4                        "sh -c '/bin/sh -c \"e"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   ecs-console-sample-app-static-7-simple-app-92d3f8bcf9c69e945d00
442f92a35aff        amazon/amazon-ecs-agent:latest   "/agent"                  2 minutes ago        Up 2 minutes                             ecs-agent
$ docker exec -it f2f349839a9f /bin/bash
$ apt-get update -y
$ apt-get install -y curl unzip python
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
$ aws --version
aws-cli/1.10.48 Python/2.7.9 Linux/4.4.14-24.50.amzn1.x86_64 botocore/1.4.38

※注意事項:以下のSDKバージョンを満たす必要があります。

AWS CLI: 1.10.47
C++: 0.12.19
CoreCLR: 3.2.6-beta
GO: 1.2.5
Java: 1.11.16
.NET: 3.1.6
Node.js: 2.4.7
PHP: 3.18.28
Ruby: 2.3.22

では、S3バケット一覧を取得してみます。

$ aws s3 ls
2016-04-05 23:50:20 XXXX
2016-05-06 16:13:04 XXXX
・・・

取得できました!

さいごに

ECSも機能がどんどん追加されており、今回はセキュリティ部分の追加となります。今まではEC2側で権限を制御するひつようがありましたが、今回のアップデートによりTask単位での権限制御が可能となりました。将来的にEC2を利用する感覚で、コンテンを利用する日が近づいている気がします。今後の追いかけます!

参考

AWS Cloud Roadshow 2017 福岡