みなさんこんにちは
花粉が飛び交う季節になり花粉症の方はスギよなくなれ!と思っているでしょう。
花粉症ではないのでいつ花粉症になるのかガクブルな、ディーネット谷口です
さて今回は、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を作成
IAM Management ConsoleのRolesで「ロールの作成」を押下する
アクセス権限ポリシーから"AmazonS3FullAccess"を選択して次へ
ロールが作成されているかを確認
無事作成されたら、EC2に作成ロールを割り当てする
EC2にロールの割り当て
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ロールを利用することでサーバ上に認証情報を置く必要がなくなりますので、
セキュリティ対策として、ロールで管理をする方式を取っていただければと思います。