どうも、Shinyaです。
この記事では、AWS IAMを使用してAWSのリソースへの適切なアクセス管理を行う方法について書いていきます。
AWSでAWSアカウントを作成した方であれば、「ルートユーザー」と呼ばれる管理者アカウントを必ず持っています。しかし、このルートユーザーはアカウントに紐づくAWSの全てのリソースへのアクセスや操作が可能ないわゆる特権的なユーザーです。この事から、ルートユーザーを常用することは情報セキュリティ上極力避けるべきです。
そのため、ルートユーザーの代わりに、作業に必要なアクセス権のみを付与したIAMユーザーを作成し運用するようにしましょう。そうすると、強すぎる権限を持つユーザーを常用することで発生しうる様々な事故を未然に防ぐことができます。
こういった重要な事は人の感覚に任せずに、世のため人のためにシステム的に制御するようにしましょう。
事前準備
この記事ではAWS IAMを使用するため、なによりAWSアカウントが必要になります。そのため、まだAWSアカウントを作成していない方は、公式AWSサイトからAWSアカウントを作成するようにしてください。
IAMユーザーを作成する
それでは、早速AWSでIAMユーザーを作成していきましょう。
IAMのダッシュボードへアクセスする
まずは、AWSマネジメントコンソールにサインインしてください。
画面の上部にある検索ボックスに「IAM」と入力してエンターキーを押してください。そうすると、次の画像のようにサービスの検索結果一覧に「IAM」が表示されますのでクリックしてください。

上記の検索結果から「IAM」をクリックすると、IAMユーザーを管理するためのダッシュボードに遷移します。

ユーザーグループを作成する
個々のIAMユーザーを作成する前に、アクセス権の管理に非常に便利なユーザーグループを作成してみましょう。
個々のユーザーのアクセス権の管理はたしかに重要ですが、IAMユーザーを作成する度に個々の権限をアタッチしていくのはとても大変です。また、個々のIAMユーザーに特有の権限をアタッチしてしまうと、ユーザーの数が増加すればするほど管理が非常に困難になります。
その代わりに、「ユーザーグループ」という概念があり、これを使用することで役職や部署などに応じてユーザーグループに権限をあらかじめアタッチしておき、後で作成したIAMユーザーをそのユーザーグループに追加することで一括で標準的な権限をアタッチすることが可能になります。
ユーザーグループを使えば、後で一部のIAMユーザーから権限を除去する際にも、そのIAMユーザーをユーザーグループから削除するだけですし、逆に権限を復活させる場合もそのユーザーグループにIAMユーザーを再度追加するだけです。
次に IAM グループの重要な特徴を示します。
- ユーザーグループは多くのユーザーを持つことができ、ユーザーは複数のグループに属することができます。
- ユーザーグループを入れ子形式にすることはできません。ユーザーグループにはユーザーのみを含めることができ、他の IAM グループを含めることはできません。
- AWS アカウント 内のユーザーすべてを自動的に含むデフォルトのユーザーグループはありません。このようなユーザーグループが必要な場合は、そのユーザーグループを作成し、新たなユーザーを 1 人 1 人割り当てる必要があります。
- AWS アカウント の IAM リソースの数とサイズは、グループの数や、ユーザーがメンバーになることができるグループの数などには制限があります。詳細については、「IAM と AWS STSクォータ」を参照してください。
以下の図は、小企業の簡単なサンプルを示しています。企業の所有者は、企業の成長に伴い、他のユーザーを作成して管理するための
Admins
ユーザーグループを作成します。Admins
ユーザーグループは、Developers
ユーザーグループとTest
ユーザーグループを作成します。これらの IAM グループはそれぞれ、AWS (ジム、ブラッド、DevApp1 など) とやりとりするユーザー (人員とアプリケーション) で構成されます。各ユーザーは、それぞれ一連の認証情報をもっています。この例では、各ユーザーは 1 つのユーザーグループに属しています。しかし、ユーザーは複数の IAM グループに属することができます。AWS公式ガイドラインの「IAM ユーザーグループ」から抜粋
ユーザーグループの作成はIAMダッシュボードの左側にあるサイドメニューから行うことができます。サイドメニューから「アクセス管理」の中にある「ユーザーグループ」をクリックしてください。

そうすると、次の画像のようにユーザーグループの管理画面に遷移しますので、「グループを作成」のボタンをクリックしてください。

「グループを作成」のボタンを押すと、ユーザーグループの作成画面に遷移します。今回は例として、Amazon S3のリソースを読み取ることだけができるIAMユーザーを作成してみます。
ユーザーグループの名前は次の画像のように「S3AuditTeam」にしましたが、作成したいユーザーグループの特性に応じた任意の名前を入力してください。

上記画像と同じ画面の中央部に「ユーザーをグループに追加」というオプションがありますが、今回の例だとまだ追加対象のIAMユーザーを作成していないため一旦スキップします。
もし、これから作成するユーザーグループに追加する対象のIAMユーザーが既にある場合は、このオプションからグループにIAMユーザーを追加することで、ユーザーグループの作成時に個々のIAMユーザーに一括で権限をアタッチすることができます。

次に、このユーザーグループにアタッチする権限をポリシーの一覧から選択します。
今回作成するユーザーグループではAmazon S3のリソースに対する読み取り権限だけがあればいいので、今回は参考までにAWS公式から提供されている「AmazonS3ReadOnlyAccess」を選択します。
ポリシーの選択が完了したら「ユーザーグループを作成」をクリックしてください。

今回の例で選択した「AmazonS3ReadOnlyAccess」のポリシーにはデフォルトで以下のようにAWS Lambdaの関数からもAmazon S3のリソースを読み取れる権限がアタッチされており、Amazon S3にアップロードされている全てのリソースを取得できる権限もアタッチされています。
そのため、より厳密に読み取り可能なリソースを制限するためには、カスタムポリシーを作成することを検討してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Get*",
"s3:List*",
"s3:Describe*",
"s3-object-lambda:Get*",
"s3-object-lambda:List*"
],
"Resource": "*"
}
]
}
「ユーザーグループを作成」のボタンを押して少し待機していると、ユーザーグループの管理画面に戻りますので作成したユーザーグループが一覧に追加されていることを確認してください。

IAMユーザーを作成する
さて、いよいよユーザーグループに追加するIAMユーザーを作成していきましょう。
IAMのダッシュボードに戻り、左のサイドメニューから「ユーザー」をクリックしてください。

そうすると、次の画像のようにユーザーの管理画面に遷移しますので、「ユーザーの作成」をクリックしてください。

次に、作成するIAMユーザーの名前を入力する画面に遷移しますので、次の手順で操作してください。
- ユーザー名: 任意のユーザー名を入力
- 「次へ」のボタンをクリック

上記の画面で「次へ」のボタンをクリックすると、ユーザーにアタッチするポリシーを選択する画面に遷移します。
今回の例だと、先ほどの手順で作成したユーザーグループを使用するので、次の手順で操作してください。
- 許可のオプション: 「ユーザーをグループに追加」を選択
- ユーザーグループ: アタッチしたい権限を持つ任意のユーザーグループを選択
- 今回の例では参考までに先ほど作成した「S3AuditTeam」を選択します
- 「次へ」のボタンをクリック

そうすると、作成するIAMユーザーについての確認画面に遷移するので、表示された情報で問題がなければ「ユーザーの作成」のボタンをクリックしてください。

「ユーザーの作成」のボタンをクリックしてしばらく待機すると、ユーザーの管理画面に戻るので作成したユーザーが一覧に追加されているのを確認できます。

これで特定のリソースへのアクセス権をアタッチしたIAMユーザーの作成は完了です。
作成したIAMユーザーの詳細画面にアクセスすると、次のようにユーザーグループで指定したアクセス権だけが有効になっていることを確認できます。
