AWSのIAMについてまとめてみたいと思います。
ここで触れるのは、IAMユーザー、IAMグループ、IAMロール、IAMポリシーに関してです。
AWSとやりとりをするためにユーザーまたはアプリケーションごとに発行されるものです。
AWSアカウントを発行した際に作成されるアカウントは、ルートアカウントと呼ばれるもので、全てのサービスにアクセスすることができる権限を持ったアカウントです。
そのため、日常的に使用することは推奨されておらず、代わりに権限を絞ったIAMユーザーを作成し、そちら使用することが推奨されています。
IAMユーザーをまとめたものです。 例えば、
IAMロールはエンティティにアクセス権限を付与するものです。
ここでのエンティティとは、各種AWSサービスや別のAWSアカウントなどです。
以下は、ロール作成時のエンティティ作成画面です。
例えば、S3に関する操作権限を持ったIAMロールを作成し、EC2インスタンスに付与することでEC2上のアプリケーションからS3の操作ができるようになります。
IAMユーザーやグループ、ロールに対して各サービスへのアクセス許可や制限を設定するためのものです。
IAMポリシーを適用することで上記のように運営者グループに属するユーザーはEC2とS3にアクセスでき、開発者グループに属するユーザーはS3にのみアクセス可能といった制限を行うことができます。
下記はIAMユーザーにポリシーを設定する際の画面ですが、IAMユーザーの場合は、直接ポリシーを設定するよりも、グループを使ってアクセス管理する方が推奨されてるみたいです。
アプリケーションから各種AWSのサービスを利用する際はIAMユーザー、IAMロールどちらを使用するのが良いでしょう?
結論から言うと、IAMロールを使用するのが良いと思います。
理由は、認証情報をアプリケーション側にハードコーディングする必要がないので漏洩の心配がないからです。
EC2インスタンスにS3に画像をアップロードするアプリケーションデプロイする場合を考えてみます。 IAMユーザーの場合は、作成するとアクセスキー、シークレットアクセスキーが発行されるので、この2つの認証情報をアプリケーションの設定ファイルに記載して、EC2インスタンスにアプリケーションをデプロイする必要があります。
次にIAMロールの場合ですが、IAMロールはEC2のインスタンスにS3へのアクセス権限を付与するためアプリケーションのコードに認証情報を持つ必要がありません。
そのため、認証情報をAWS側で管理してくれるIAMロールの方がアプリケーションからAWSの各種サービスを利用する際には適していると考えます。
実際にIAMロールを使用してみます。ここでは、EC2インスタンスにS3へのアクセス権限を付与します。
まずは、IAMロールの作成です。
AWSマネジメントコンソールから遷移します。
遷移したら、左のメニューからロールを選択します。
選択すると下記の画面になるので、ロールの作成を押下します。
次にどのエンティティに対してのロールを作成するか選択します。
ここでは、EC2インスタンス設定するので、AWSサービスを選択し、画面下のリンク一覧からEC2を選択し、次に進みます。
次に適用するポリシーを選択します。
AmazonS3FullAccessを選択し、次へ進みます。
必要に応じてタグをつけます。
最後にロール名を入力します。
以上でIAMロールの作成は終了です。
作成した、IAMロールをEC2インスタンスに設定します。
対象のインスタンスを選択し、アクション>インスタンスの設定>IAMロールの割り当て/置換を選択します。
この画面で、先ほど作成したIAMロールを選択して終わりです。
AWSのアクセス管理の仕組みであるIAMに関してまとめつつ、IAMロールの作成と適用に関してまとめてみました。
実際に使用する場合は、
上記なような感じが良いのかと思います。