AWSでルートユーザーはなるべく使うな!というのは常々言われていると思います。
私はめんどくさくてずっとルートユーザーでログインしていたのですが、流石にアンキュアすぎると感じたので今回はAWSでIAMユーザーを作りつつ、IAMってなんなのかを理解したいと思います。
IAMとはなんなのか
IAM(Identity and Access Managemet)
は、AWSにおいて下の赤いマークが特徴的なサービスの一つです。
認証認可を行うサービスで、AWSリソースを安全に管理するサービスです。
ユーザーの権限管理やサービス同士でどのような連携を許可するかなどを設定することで、AWSサービスを安全に使用することができます。
IAMの主な構成要素として、IAMポリシー
、IAMユーザー(IAMグループ)
、IAMロール
の3つがあります。
IAMポリシー
AWSリソースに対してどのようなことをしてもいいのかというアクセス許可に関する権限を示したものをポリシーと言います。
これらを後述するIAMユーザーやIAMロールに紐づけることで、特定のAWS使用者やサービスに制限をかけることができ、安全なAWS運用ができるようになります。
IAMユーザー(グループ)
AWSを利用する目的で、AWSアカウントを通して作成されたIAMエンティティのことです.
IAMユーザーは先述したIAMポリシーを紐づけることで、特定のユーザーに権限を割り振ることができます。
長期的な認証情報として使うことができて、アクセスキーとシークレットアクセスキーが発行されます。
そして、一人のユーザーもしくは一つのアプリケーションに紐づけることができます。
また、複数IAMユーザーに権限を割り振りたい時の仕組みとして、IAMグループというものもあります。
IAMロール
こちらもIAMユーザーと一緒で、AWSを利用する目的でAWSアカウントを通して作成されたIAMエンティティです。
IAMユーザーと同じくIAMポリシーと結びつけることで、ユーザーに権限を割り振ることができます。
しかし、IAMロールはIAMユーザーとは異なり、認証情報は一時的であり、複数ユーザーや複数アプリケーションに割り振ることができます。
AWSのベストプラクティスとしては、IAMロールを使ってリソース操作されていることが推奨されており、STSにリクエストして一時的な認証情報)を受け取り、それを使ってリソースを操作します。
IAMの構成要素は以下のようになっています。
名称 | 特徴 |
---|---|
IAMユーザー | 長期的な認証情報、紐づけられる対象は一つ |
IAMロール | 短期的な認証情報、紐づけられる対象は複数 |
IAMポリシー | 権限内容 |
AWSのルートユーザーは基本的に使わない!
ルートユーザーとは、AWSアカウント作成時に作成されるユーザーのことです。
AWSでは、ルートユーザーは基本的に使わない方針としています。
理由としては、権限の制限ができないという理由がとても大きいです。
-
個人使用の場合
個人使用の場合はルートユーザーでいいじゃないかと思われるかと思いますが、万が一ログイン用の認証情報やアクセスキーが悪意のある人物に漏れてしまうと、ルートユーザーの持つ全リソースにアクセスできてしまいます。
IAMユーザーを作成してそれを普段使いしておくと、万が一漏れても権限に制限があるのでリソースの悪用を制限することができます。 -
複数使用の場合
企業アカウントでは、一つのAWSアカウントを使って複数のIAMユーザーとプロジェクト毎に作成したIAMロール等を使用して作業を行います。
全社員がルートユーザーを使ってしまうと全社員がAWSアカウントの持つ全リソースにアクセスできるようになってしまうのでかなり問題があります。
これらのセキュリティ的な理由からルートユーザーは使わずにIAMユーザーを使ってログインすることをお勧めします。
設定してみる
IAMユーザーを作成する
まずIAMユーザーを作成します。
下のように設定しています。
IAMグループを作成する
IAMユーザー
への一括権限管理をしやすくするために、IAMグループ
を作成します。
IAMユーザー
を追加すると許可をどうするかを選択します。
許可オプションはユーザーをグループに追加
として、その下にあるグループを作成
というボタンを押します。
グループの作成画面は下のようになっています。
今回は許可ポリシーをつけずに作成します。
作成したグループを選択して、IAMユーザーを作成すると下のような画面になります。
このCSVファイルを一応ダウンロードしておきます。
IAMグループ用のポリシーを選択する
先ほど作成したIAMグループ
のポリシーを作成します。
IAM
のサイドバーからユーザーグループを選択し、許可の欄からインラインポリシー
の作成を選択します。
下のような画面になるので、アクセス許可をJSONポリシーとして定義します。
今回は、IAMユーザーで行えてほしい最小限の構成として下のようにしてみました。
とりあえず、IAMユーザーをリストとして表示するのと、コスト関連が見れるようにしました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListUsers" //iamユーザーのリスト表示
],
"Resource": [
"arn:aws:iam::*:*"
]
},
{
"Effect": "Allow",
"Action": [
"aws-portal:ViewBilling", //コスト関連
"aws-portal:ViewUsage",
"ce:*"
],
"Resource": [
"*"
]
}
]
}
上のJSONを記述して次へ
を押すことで下のようにポリシー名と許可されている項目が表示されるので、ポリシーの作成を選択します。そうすることでIAMグループ
にポリシーがアタッチされます。
IAMロールを作成する
次にIAMロール
を作成します。
今回は管理者権限を持ったロールを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::[アカウントID]:user/test1"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
サインインしてみる
awsのアカウント上部に表示されているアカウントID
とcsvファイルに書かれいてるユーザー名
とパスワード
をサインイン画面に入力します。
スイッチロールしてみる
先ほど先述した通り、セキュアに使用するにはIAMユーザー
ではなくIAMロール
に権限を与えて、そのロールを使用していきます。
なのでスイッチロール
をしていきます。
アカウント名が表示されている部分をクリックすると下の画像のような表示が出てきます。
ロールの切り替え
を選択します。
IAMロール名
を先ほど作成したロール名にして、ロールの切り替えを作成します。
アカウント名だった部分がIAMロール名
になったら、そのIAMロールにスイッチロールできています。
最後に
このような形でルートユーザーではなく、IAMユーザーでログイン、IAMロールでリソースを使っていくことで安全にAWSリソース運用ができます。
気になった方はぜひ運用してみてください!
AWS関連の記事