前の記事では、ルートユーザーとIAMユーザーの違いを学びました。
IAMを利用すると、AWSへアクセスするユーザーなどに 必要な権限だけを与えることができます。
では、その「権限」はどのように決めているのでしょうか?
「S3は読み取りだけできる」
といった権限はどうやって決める?
AWSでは、このようなアクセス権限を定義するために IAMポリシー(IAM Policy)を使用します。
IAMポリシーが 「誰がAWSで何をできるか」を決める権限ルール であることを理解し、基本的なポリシーを読める状態を目指します。
IAMポリシーとは?
IAMポリシーとは、 AWSリソースに対するアクセス権限を定義するルール です。
簡単に表すと、IAMポリシーでは次のようなことを決めます。
例:S3のデータを取得する
例:特定のS3バケット
Allow / Deny
IAMポリシーはどのように使われる?
IAMポリシーは、 権限を必要とするIAMのユーザーやグループ、ロールなどと 関連付けて利用します。
たとえば、 あるIAMユーザーへS3を読み取る権限を持つポリシーを設定すれば、 その権限の範囲でS3へアクセスできます。
IAMポリシーはJSON形式で記述される
IAMポリシーの内容は、 JSON(JavaScript Object Notation)形式 で記述されます。
実際のポリシーを簡単な例で見てみましょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
初めて見ると難しそうですが、 初級段階ではすべての書き方を暗記する必要はありません。
まずは、 Effect・Action・Resource の3つを読めるようになりましょう。
Effect・Action・Resourceを理解しよう
Allow または Deny
例:s3:GetObject
例:特定のS3バケット
Effect:許可するか拒否するか
Effectでは、 そのポリシーで指定した操作を 許可するのか、拒否するのかを指定します。
Action:どの操作を対象にするか
Actionでは、 AWSサービスで実行する操作を指定します。
s3:GetObject
S3オブジェクトを取得
s3:PutObject
S3へオブジェクトを保存
ec2:StartInstances
EC2インスタンスを起動
Resource:どのAWSリソースを対象にするか
Resourceでは、 その操作を どのAWSリソースに対して適用するのか を指定します。
このS3バケット内のオブジェクトを対象にする
このように対象を限定することで、 「すべてのS3バケット」ではなく 特定のバケットだけアクセス可能 といった権限制御ができます。
実際にIAMポリシーを読んでみよう
先ほどのポリシーを、 日本語に置き換えてみます。
Allow
許可する
s3:GetObject
S3オブジェクトの取得を
example-bucket/*
このバケットに対して
IAMポリシーを見るときは、 JSONを上からすべて読むのではなく、 まず Effect → Action → Resource を見ると内容を理解しやすくなります。
権限を与えていない操作はどうなる?
IAMでは、 基本的に明示的に許可されていない操作は許可されません。
そのため、 IAMユーザーを作成しただけで AWSのすべてのサービスを操作できるわけではありません。
必要な操作について、 IAMポリシーなどを通じて権限を許可する必要があります。
明示的なDenyは強い
IAMのアクセス制御では、 明示的なDeny(拒否)が非常に重要です。
S3操作を許可
特定操作を拒否
別のポリシーでAllowされていても、 該当する操作に明示的なDenyが適用される場合、 そのアクセスは拒否されます。
IAMポリシーでも「最小権限」が重要
前の記事で学んだ 最小権限の原則は、 IAMポリシーを設計するときにも重要です。
EC2:すべて
S3:すべて
RDS:すべて
IAM:すべて
S3:必要な読み取り操作のみ
IAMポリシーにはいくつか種類がある
IAMポリシーには複数の種類がありますが、 初級ではまず次の3つを押さえておきましょう。
AWSがあらかじめ作成・管理しているポリシー
利用者が作成・管理する再利用可能なポリシー
特定のIAMユーザー・グループ・ロールに直接埋め込むポリシー
AWS管理ポリシーはあらかじめ用意されているため利用しやすく、 カスタマー管理ポリシーでは 自分たちの要件に合わせて権限を細かく設計できます。
初級段階では、 「既製のポリシー」と「自分で作るポリシー」がある というイメージを持っておけば十分です。
IAMポリシーは誰に設定するの?
IAMポリシーは、 IAMユーザーだけに使用するものではありません。
ここで、 まだ学習していない IAMグループと IAMロール が登場しました。
この2つは、 AWSでアクセス権限を管理するときに非常に重要な仕組みです。
詳しい仕組みは次の記事で学びます。
理解度チェック:IAMポリシーを読んでみよう
表示されたポリシーを見て、 何が許可されているのか判断してみましょう。
このポリシーは何を許可している?
Effect・Action・Resourceに注目してください。
初心者が間違えやすいポイント
① IAMユーザーを作ればAWSを操作できる
IAMユーザーなどには、 必要な権限を適切に設定する必要があります。
② ActionとResourceは同じもの
Actionは 「何をするか」、 Resourceは 「何に対して行うか」 です。
何をする?
何に対して?
③ 権限は多いほど便利だから安全
必要以上に広い権限を付与すると、 誤操作や認証情報漏えい時の影響範囲が大きくなります。
IAMポリシーでは 最小権限の原則 を意識しましょう。
確認問題:IAMポリシーを理解できたか確認しよう
IAMポリシーの主な役割はどれですか?
IAMポリシーは、 AWSリソースに対してどの操作を許可・拒否するのかを定義します。
IAMポリシーのActionが表しているものはどれですか?
Actionでは、 s3:GetObjectなど対象となるAWS API操作を指定します。
IAMポリシーを設計するときに重要な考え方はどれですか?
AWSでは最小権限の原則に従い、 必要な操作だけを許可することが重要です。
3問に挑戦してみましょう。
まとめ
IAMポリシーは AWSへのアクセス権限を定義するルール
基本となる Effect・Action・Resource を理解する
Effectでは Allow(許可)とDeny(拒否) を指定する
IAMでは 明示的に許可されていない操作は基本的に許可されない
権限設計では 最小権限の原則 が重要
次はIAMグループとIAMロールを理解しよう
IAMポリシーによって 「何ができるのか」 を定義できることが分かりました。
では、複数のユーザーへ同じ権限をまとめて設定したい場合や、 EC2などのAWSサービスへ権限を与えたい場合は どうすればよいのでしょうか?
次の記事では、 IAMグループとIAMロールの役割や違い を学んでいきます。
次は「IAMグループとIAMロール」を学びましょう
IAMポリシーで定義した権限を、 実際のAWS環境でどのように管理・利用するのかを理解します。
特に 「グループ」と「ロール」の違い は、AWS IAMを理解するうえで重要なポイントです。
IAMグループとIAMロールを理解する →
