【AWS IAMとは?】初心者にもわかりやすく解説

公開:2021/02/09
更新:2021/02/09
4 min読了の目安(約4000字TECH技術記事

はじめに

この記事ではAWSのIAMについて説明していきます。
初心者にとって非常にややこしいAWS IAMについて図解を交えつつ説明していきます。

IAMとは?

そもそもIAMとは何でしょうか?
IAMとはAWSのサービスの「認証」と「認可」の設定を行うことができるサービスになります。

認証: 相手が誰(何)なのか確認すること
認可: リソースへのアクセス権限を与えること

IAMを理解することはセキュリティ事故を防ぐ上で非常に大事になります。

IAMのきほん

IAMでは、以下の機能が用意されています。

  1. IAMユーザー
  2. IAMグループ
  3. アクセスキー
  4. IAMポリシー
  5. IAMロール

こちらの機能をそれぞれ説明していきます。

IAMユーザー

◼︎ 概要図

AWSには2つの異なるタイプのユーザーが存在します。

  1. ルートユーザー(管理者アカウント)
  2. IAMユーザー

ルートユーザー(管理者アカウント)

AWSアカウント作成した初期状態では、作成時に使用したメールアドレスとパスワードでアクセス可能で、AWSアカウントのすべてのリソースに対して完全なアクセス権限を持ちます。

この完全なアクセス権限を持つユーザーをルートユーザーと呼びます。

IAMユーザー

ルートユーザーは全てのサービスとリソースに完全なアクセス権限を持ちます。
ただ、なんでも出来てしまう為日常的には利用しないよう推奨されています。

通常は付与された権限の範囲内でAWSリソースのアクセスが可能なIAMユーザーを利用するケースが多いです。

IAMユーザーの認証にはパスワードとアクセスキー※の2パターン存在します。

※ アクセスキーはアクセスキーIDとシークレットアクセスキーのペアになります。詳細はアクセスキーの項目を参照ください。

◼︎ 比較表

ルートユーザー IAMユーザー
AWSサービス/リソースへのアクセス権限 フル権限 IAM管理者※により許可された範囲の権限
ログインID AWSアカウント登録時のEmail IMA管理者により作成されたユーザー名
運用時の利用 日常の操作には利用しない 日常の管理作業に利用

※AdministratorAcess管理権限(AWSサービスに対する全てのアクセス権限)を付与されたIAMユーザーをIAM管理者と言います。

IAMグループ

IAMユーザーは1つのAWSアカウントあたり5,000ユーザーまで作成可能です。
ユーザーごとにユーザー名/パス/所属グループ/権限を設定できます。

IAMグループはIMAユーザーの集合を管理します。
1つのAWSアカウントあたり100グループまで作成可能です。
グループごとにユーザー名/パス/権限を設定できます。

◼︎ 比較表

IAMユーザー IAMグループ
AWSアカウントの上限 5,000 100
設定可能情報 ユーザー名、パス、所属グループ、権限 ユーザー名、パス、権限
特徴 ユーザーが作成された時は何も権限がない グループを他のグループに入れる事は出来ない。グループは認証情報を持たない

◼︎ 概要図

アクセスキー

アクセスキーは、IAMユーザーの認証情報になります。

IAMユーザーの認証情報には、AWSマネージメントコントロールにログインするときのユーザー名/パスワードに加えて、AWSサービスへのAPI操作が可能なアクセスキーID/シークレットアクセスキーが存在します。

アクセスキーID/シークレットアクセスキーの2つを合わせてアクセスキーと呼びます。

アクセスキー ID (例: AKIAIOSFODNN7EXAMPLE)
シークレットアクセスキー (例: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)

IAMポリシー

IAMポリシーはAWSへのアクセスに関する権限設定を表します。

IAMポリシーは複数のユーザー/グループ/ロールにアタッチできる管理ポリシーと個々のIAMユーザー/グループ/ロールに直接権限を設定するインラインポリシーが存在します。

◼︎ 比較表

IAMポリシーの分類 特徴
管理ポリシー 複数のIAMユーザー/グループ/ロールにアタッチできるポリシー。それぞれ最大10までの管理ポリシーをアタッチ可能。(AWSがデフォルトで準備している)
インラインポリシー(カスタマー管理ポリシー) 自分でJSONを記述してポリシーを設定する。個々のIAMユーザー/グループ/ロールに直接権限を設定するポリシー

IAMポリシー設定方法

IAMポリシーに設定するアクセス権限はJSON形式で記載しEffect/Action/Resource/Conditionを設定します。

◼︎ サンプルIAMポリシーJSON

{
    "Version": "2012-10-17",
    "Statement": [
        {
	    "Effect": "Allow",
            "Action": [
                "S3:PutObject",
                "S3:GetObject",
                "S3:DeleteObject*"
            ],
            "Resource": "arn:aws:s3:::*/*",
	    "Condition": {
		"IpAddress": {
			"aws:SourceIp": "172.31.1.0/24 "
		}
	    }
        }
    ]
}

EffectではACtionで指定されるアクセス権限に対してAllow(許可)またはDeny(拒否)を指定します。

ActionではEffectの対象となるAWS操作を指定します。

Resourceでは、操作対象となるAWSリソースを指定します。

ARNの記載例

arn:aws:service:region:account:resource

service: AWSサービス名
region: AWSリージョン
account: AWSアカウントID
resource: AWSリソース名

conditionではアクセス権限が有効となる為の条件を指定します。

具体的にサンプルIAMポリシーJSONを分解して説明していきます。

{
    "Version": "2012-10-17", IAMポリシーの文法バージョン
    "Statement": [
        {
	    "Effect": "Allow", 設定を許可を許可する
            "Action": [
                "S3:PutObject",    S3に更新処理を許可する
                "S3:GetObject",    S3に取得処理を許可する
                "S3:DeleteObject*"  S3の削除処理に関する全てを許可する
            ],
            "Resource": "arn:aws:s3:::*/*", S3バケットリソースを指定する
	    "Condition": {
		"IpAddress": {
			"aws:SourceIp": "172.31.1.0/24 " IPがこの条件の時のみ有効にする
		}
	    }
        }
    ]
}

IAMロール

IAMロールはAWSサービスやアプリケーションなどのエンティティに対してAWS捜査権限を付与するための仕組みです。

もう少し簡単に一言で言うと、IAMロールはポリシーを複数アタッチして権限をひとまとめにしたものです。

例)S3の読み込み権限とEC2のフルアクセス権限をまとめたHogeRole1を作成する

IAMポリシーとIAMロール

IAMロール IAMグループ
概要 AWSのリソース(EC2とか)に付与するもので、IAMポリシーをグループ化したもの AWSへのアクセスに関する権限設定

終わりに

この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。

https://aws-cloud-tech.com