はじめに
AWS (Amazon Web Services) を使い始めると、必ず出会うのが IAM (Identity and Access Management) です。IAMは、AWSリソースへのアクセスを安全に管理するための仕組みで、いわばAWSのセキュリティの要と言えるでしょう。今回は、AWS初心者でも理解できるよう、IAMポリシーの基本的な仕組みを解説していきます。
IAMポリシーとは?
IAMポリシーは、誰がどのAWSリソースにアクセスできるかを定義するルールセットです。例えば、特定のユーザーにS3バケットへの読み取りアクセス権を与えたり、特定のロールにEC2インスタンスの起動権限を与えたりすることができます。
IAMポリシーの構成要素
IAMポリシーは、ステートメントと呼ばれる一連のルールで構成されています。各ステートメントは、以下の5つの要素で構成されます。
-
効果 (Effect): ステートメントがアクセスを許可するのか拒否するのかを指定します。
Allow
(許可) またはDeny
(拒否) のいずれかになります。 - プリンシパル (Principal): アクセスを許可または拒否されるエンティティを指定します。ユーザー、グループ、ロールなどが含まれます。
-
アクション (Action): プリンシパルが実行できる操作を指定します。例えば、
s3:GetObject
(S3オブジェクトの取得)、ec2:RunInstances
(EC2インスタンスの起動) などがあります。 -
リソース (Resource): プリンシパルがアクセスできるAWSリソースを指定します。例えば、
arn:aws:s3:::my-bucket
(S3バケットmy-bucket
) やarn:aws:ec2:ap-northeast-1:123456789012:instance/i-1234567890abcdef0
(EC2インスタンスi-1234567890abcdef0
) などがあります。 - 条件 (Condition): ステートメントが適用される追加の条件を指定します。例えば、特定のIPアドレスからのアクセスのみ許可する、特定の時間帯のみアクセスを許可するなどがあります。
IAMポリシーの評価
IAMポリシーは、ステートメントマッチングと呼ばれるプロセスを使用して評価されます。ステートメントマッチングでは、IAMはリクエストされたアクションと認可コンテキストを比較して、ステートメントがマッチするかどうかを判断します。
例えば、ユーザーAがS3バケット my-bucket
からオブジェクトを取得しようとした場合、IAMは以下のようなプロセスでステートメントを評価します。
- ユーザーAにアタッチされているIAMポリシーを取得します。
- ユーザーAのリクエスト (S3オブジェクトの取得) と認可コンテキスト (ユーザーAのアカウント、IPアドレスなど) を取得します。
- IAMポリシー内の各ステートメントを評価し、リクエストとマッチするステートメントを探します。
- マッチするステートメントが見つかった場合、そのステートメントの効果に基づいてアクセスを許可または拒否します。
- マッチするステートメントが見つからなかった場合、アクセスは拒否されます。
IAMポリシーの種類
IAMポリシーは、主に以下の3つの種類があります。
- IDベースのポリシー: ユーザーやグループに直接アタッチされ、きめ細かなアクセス権を管理するために使用されます。
- サービスコントロールポリシー: AWS組織全体で適用され、広範なセキュリティ上の制限を管理するために使用されます。
- リソースベースのポリシー: S3バケットやEC2インスタンスなどのリソースに直接アタッチされ、リソースへのアクセスを管理するために使用されます。
まとめ
IAMポリシーは、AWSリソースへのアクセスを管理するための強力なツールです。IAMポリシーを使用して、適切なアクセス権をユーザーやグループに付与し、AWS環境のセキュリティを強化することができます。AWSを使い始める際には、IAMポリシーについて理解しておくことが重要です。
参考資料
IAM Policy Evaluation Series: AWS IAM policy language explained