1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSアカウントはIAMを使ってログインしよう!

Posted at

AWSでルートユーザーはなるべく使うな!というのは常々言われていると思います。

私はめんどくさくてずっとルートユーザーでログインしていたのですが、流石にアンキュアすぎると感じたので今回はAWSでIAMユーザーを作りつつ、IAMってなんなのかを理解したいと思います。

IAMとはなんなのか

IAM(Identity and Access Managemet)は、AWSにおいて下の赤いマークが特徴的なサービスの一つです。

image.png

認証認可を行うサービスで、AWSリソースを安全に管理するサービスです。

認証認可とは

認証は、アクセスしてきたユーザ等に対して、誰なのかという身元確認を行うことです。
多くのウェブサイトではIDとパスワードでログインすると思うのですが、その際にIDとパスワードで身元確認を行なうベーシック認証というプロセスが行われています。

認可は、誰かに対してリソースへのアクセスを許可する権限を渡すことです。
違う言い方をするとアクセスレベルを決定することでもあります。
ウェブサイトにログインしても他のユーザーの個人情報とか見れないですよね。
ログインした際に、ここまでの権限しか使えないからねと権限を限定する際に認可が行われています。

AWSリソースとは

AWSリソースは、ユーザーが操作できる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にリクエストして一時的な認証情報)を受け取り、それを使ってリソースを操作します。

STSとは

STS(Security Token Service)は、一時的な認証情報を発行してくれるサービスです。

認証情報は一時的でも、何度も認証してもらうことができなくなるわけじゃない

IAMロールの使用許可をstsで発行されてからその認証情報が切れてしまうとリソース操作ができないのではないかと思われた方もいると思います。

認証情報が切れても、もう一度認証を受け取ることは可能なので、IAMユーザーでログインしっぱなしにするよりも安全に扱うことができます。

IAMの構成要素は以下のようになっています。

名称 特徴
IAMユーザー 長期的な認証情報、紐づけられる対象は一つ
IAMロール 短期的な認証情報、紐づけられる対象は複数
IAMポリシー 権限内容

AWSのルートユーザーは基本的に使わない!

ルートユーザーとは、AWSアカウント作成時に作成されるユーザーのことです。

AWSでは、ルートユーザーは基本的に使わない方針としています。

理由としては、権限の制限ができないという理由がとても大きいです。

  • 個人使用の場合
    個人使用の場合はルートユーザーでいいじゃないかと思われるかと思いますが、万が一ログイン用の認証情報やアクセスキーが悪意のある人物に漏れてしまうと、ルートユーザーの持つ全リソースにアクセスできてしまいます。
    IAMユーザーを作成してそれを普段使いしておくと、万が一漏れても権限に制限があるのでリソースの悪用を制限することができます。

  • 複数使用の場合
    企業アカウントでは、一つのAWSアカウントを使って複数のIAMユーザーとプロジェクト毎に作成したIAMロール等を使用して作業を行います。
    全社員がルートユーザーを使ってしまうと全社員がAWSアカウントの持つ全リソースにアクセスできるようになってしまうのでかなり問題があります。

これらのセキュリティ的な理由からルートユーザーは使わずにIAMユーザーを使ってログインすることをお勧めします。

設定してみる

IAMユーザーを作成する

まずIAMユーザーを作成します。

下のように設定しています。

image.png

IAMグループを作成する

IAMユーザーへの一括権限管理をしやすくするために、IAMグループを作成します。

IAMユーザーを追加すると許可をどうするかを選択します。

許可オプションはユーザーをグループに追加として、その下にあるグループを作成というボタンを押します。

image.png

グループの作成画面は下のようになっています。
今回は許可ポリシーをつけずに作成します。

image.png

作成したグループを選択して、IAMユーザーを作成すると下のような画面になります。
このCSVファイルを一応ダウンロードしておきます。
image.png

IAMグループ用のポリシーを選択する

先ほど作成したIAMグループのポリシーを作成します。

IAMのサイドバーからユーザーグループを選択し、許可の欄からインラインポリシーの作成を選択します。
image.png

下のような画面になるので、アクセス許可をJSONポリシーとして定義します。
image.png

今回は、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グループにポリシーがアタッチされます。

image.png

IAMロールを作成する

次にIAMロールを作成します。
今回は管理者権限を持ったロールを作成します。

  • ロール名の設定
    image.png

  • 許可ポリシー
    今回はAdministratorAccessを設定します。
    image.png

  • 信頼関係
    image.png
    信頼関係をJSONで記述します。
    こうすることで特定のアカウントがスイッチロールできるようになります。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::[アカウントID]:user/test1"
			},
			"Action": "sts:AssumeRole",
			"Condition": {}
		}
	]
}

AssumeRole

信頼関係に関連する話としてAssumeRoleがあります。

AssumeRoleとは、IAMロールを引き受けてユーザーやリソースに一時的に権限を与える仕組みです。

これを使うことで一時的な認証情報を特定の相手のみに与えることができます。

サインインしてみる

awsのアカウント上部に表示されているアカウントIDとcsvファイルに書かれいてるユーザー名パスワードをサインイン画面に入力します。

スクリーンショット 2025-02-04 0.11.59.png

スイッチロールしてみる

先ほど先述した通り、セキュアに使用するにはIAMユーザーではなくIAMロールに権限を与えて、そのロールを使用していきます。

なのでスイッチロールをしていきます。

アカウント名が表示されている部分をクリックすると下の画像のような表示が出てきます。

ロールの切り替えを選択します。

image.png

IAMロール名を先ほど作成したロール名にして、ロールの切り替えを作成します。

Qiita Image 3766230のコピー.jpeg

アカウント名だった部分がIAMロール名になったら、そのIAMロールにスイッチロールできています。
image.png

最後に

このような形でルートユーザーではなく、IAMユーザーでログイン、IAMロールでリソースを使っていくことで安全にAWSリソース運用ができます。

気になった方はぜひ運用してみてください!

AWS関連の記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?