How to use AWS resources without long-lived AWS credentials(1) - Rails with AWS Opsworks.

今年2月末に「ブログ是非書いてください!」と言われ、早5ヶ月。ようやく時間がとれたので初めてブログ書いてみます @ourass です。

できるだけセキュアな運用を心がけたいっていうところで AWS の Long-lived AWS credentials(いわゆる「アクセスキーID」と「シークレットアクセスキー」の組み合わせ)を使わずに、AWS OpsWroks 上で Rails から AWS のリソースにアクセスするための設定(前準備)をご紹介します。
せっかちさんの為に先にまとめを書いちゃいます。

まとめ

1. EC2インスタンスのための IAM Role を用意する
2. OpsWorks のレイヤーの設定で IAM Role を指定する

1. EC2 インスタンスのための IAM Role を用意する

AWS IAM管理コンソールから「Roles」>「Create New Role」と辿り、「Amazon EC2」を選択して EC2 インスタンスに必要な権限を付与します。この例ではS3の "bucket-name" という名前のバケットへのフルアクセス権を与えています。
f:id:techinterfirm:20140806131332p:plain

ポリシーの具体的な設定方法については次が参考になります。
AWS リソースの管理に関するポリシーの例 - AWS Identity and Access Management

S3 以外にもSES、SQS、SNS などサービスに必要なリソースに関する権限を与えます。
f:id:techinterfirm:20140806131401p:plain

2. OpsWorks のレイヤーの設定で IAM Role を指定する

AWS OpsWorks管理コンソールから「Layers」>「Rails App Server の Security の Edit」と辿り、作成した IAM Role を割当てます。
f:id:techinterfirm:20140806131347p:plain

以上で設定は終わりです。
あとは Rails 側でリソースを使うための工夫が必要になりますが、それはまた別の日にご紹介できればと思います。

参考資料

IAM roles for EC2 instancesを使ってみる | Developers.IO
クラスメソッド株式会社さんの記事にはいつもお世話になってます。この場を借りてお礼申し上げます。