IAMロールでEC2からS3をアクセス制御

みなさんこんにちは
花粉が飛び交う季節になり花粉症の方はスギよなくなれ!と思っているでしょう。
花粉症ではないのでいつ花粉症になるのかガクブルな、ディーネット谷口です

さて今回は、AWSのEC2からS3へのアクセスをIAMロールでアクセス制御を行いたいと思います。
まずはデフォルト状態で、EC2からS3にアクセスしようとした場合、以下のようなエラーが発生します

$ aws s3 ls bucket-policy-denet
Unable to locate credentials. You can configure credentials by running "aws configure".

デフォルトでは、認証なしでアクセスが出来ませんので、"credentials" を設定する必要があります
次のコマンドを使用することで自動で認証情報と設定ファイルが作成されます

$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:

credentials作成のデメリット

・認証情報(credentials)と設定ファイル(config)がサーバ上に存在する
・EC2毎に"aws configure"実行する必要がある

どちらかというと、認証情報がサーバ上にある事が一番の問題です
この問題を解決するのに、"IAM Roles for EC2"を利用しましょう

IAM Roleを作成

SnapCrab_NoName_2018-3-14_16-15-44_No-00.png

IAM Management ConsoleのRolesで「ロールの作成」を押下する

SnapCrab_NoName_2018-3-14_16-31-7_No-00.png
このロールを使用するサービスからEC2を選択して次へ

SnapCrab_NoName_2018-3-14_16-31-31_No-00.png
アクセス権限ポリシーから"AmazonS3FullAccess"を選択して次へ

SnapCrab_NoName_2018-3-14_16-32-18_No-00.png
ロール名を入力し、次へ

SnapCrab_NoName_2018-3-14_16-33-0_No-00.png
ロールが作成されているかを確認
無事作成されたら、EC2に作成ロールを割り当てする

EC2にロールの割り当て

SnapCrab_NoName_2018-3-14_16-34-25_No-00.png
IAMロールの割当/置換を選択

SnapCrab_NoName_2018-3-14_16-35-5_No-00.png
IAMロールの割当/置換がべ無事完了したことを確認

Role設定後の動作確認

EC2から認証情報(credentials)がない状態でアクセスが行えるか確認
Roleを指定していないと以下のような結果でしたが

$ aws s3 ls bucket-policy-denet
Unable to locate credentials. You can configure credentials by running "aws configure".

Roleの指定がされているので、S3へのアクセスが行えるようになりました

$ aws s3 ls bucket-policy-denet
2018-03-14 03:13:37         16 index.html

特に認証情報がなくても問題なくアクセスが出来るようになりました。
IAMロールを利用することでサーバ上に認証情報を置く必要がなくなりますので、
セキュリティ対策として、ロールで管理をする方式を取っていただければと思います。