クラウド
AWS IAMロールとポリシーの違いとは?使い分けと許可の決まり方
- IAM ロール
- IAM ポリシー
- AWS IAM
- クラウド
- ロールとポリシーの違い
- 信頼ポリシー
- 明示的な拒否
- 権限ポリシー
- AssumeRole
- 一時的な認証情報
- IAM Identity Center
- 外部 ID
- SCP
- 最小権限
- IAM Access Analyzer
- 自動推論
目次
サーバーで動くプログラムにクラウドを操作させるには、認証情報を渡す必要がある。長く使えるアクセスキーを配ると、サーバーが増えるたびに配り直し、漏れたときに備えて入れ替える手間がかかる。そこで、アクセスキーを配らずに、決まった相手だけが、短い期限の認証情報をその都度受け取れるようにする方法がある。
ただし、受け取った認証情報で何ができるかは、一つの規則だけでは決まらない。組織全体の禁止事項なども重なる。
AWS の IAM で、ロールとポリシーは何が違い、どう使い分けるのか。複数のポリシーが重なったとき、AWS は許可と拒否をどう決めるのか。
IAM のポリシーは、どの操作を、どのリソースに許すか(または拒むか)を書いた文書である。IAM ロールは、ポリシーを付けた ID(AWS を操作する主体)で、信頼ポリシーが認めた相手だけが一時的に引き受けて使う。AWS はリクエストを既定で拒否し、明示的な拒否が一つでもあれば拒否する。許可は、原則として、許可を与えるポリシーに書かれていて、かつ、上限を決めるポリシーの内側にあるときだけ出る。
一つのロールに、四つのリクエストを当てる
※ この節の数値は説明のための仮定で、測定値ではありません。
ある会社が、EC2 のインスタンス(AWS の仮想サーバー)で動く集計プログラムに、S3 のバケット sales-reports のファイルを読ませたいとする。管理者は report-reader という名前の IAM ロールを作り、インスタンスに付けた。会社のアカウントは、複数のアカウントをまとめる AWS Organizations の組織にメンバーとして入っていて、組織の管理者は SCP(組織のアカウントで使える権限の上限)を付けている。かかっているポリシーは次の三つである。
| ポリシー | 書いてある |
|---|---|
| 信頼ポリシー | EC2 は、 |
| 権限ポリシー | sales-reports の |
| SCP | S3 の |
この設定に、四つのリクエストを当てる。ロールの認証情報は、AWS の STS(Security Token Service)というサービスが発行する。
- EC2と集計プログラムSTS1. EC2 が、インスタンスのために report-reader を引き受けたい
- STSEC2と集計プログラム2. 信頼ポリシーが EC2 を認めている。期限のある認証情報を渡す
- 社員STS3. report-reader を引き受けたい
- STS社員4. 信頼ポリシーに社員は書かれていない。拒否する
- EC2と集計プログラムsales-reports5. 集計プログラムが、ロールの認証情報でファイルを読む
- sales-reportsEC2と集計プログラム6. 権限ポリシーが許し、SCP も許している。ファイルを返す
- EC2と集計プログラムsales-reports7. 集計プログラムが、ファイルを消そうとする
- sales-reportsEC2と集計プログラム8. 権限ポリシーは許すが、SCP が削除を拒否している。拒否する
ロールを引き受けられるかどうか(1〜4)を決めたのは信頼ポリシーで、引き受けた後に何ができるか(5〜8)を決めたのは権限ポリシーと SCP である。最後の削除では、許可があっても、拒否が書かれていれば通らない。
IAM ポリシーとは:何を許すかを書いた文書
IAM(Identity and Access Management)は、AWS のアカウントの中の ID と、その権限を管理するサービスである。IAM ポリシーは、権限を書いた文書で、ほとんどは JSON の形で書く1。文ごとに、許すか拒むか(Effect)、操作(Action)、対象のリソース(Resource)を書き、必要なら条件(Condition)を加える2。あるバケットのファイルを読むことだけを許すポリシーは、次のようになる。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
arn:aws:s3:::example-bucket/* は、このバケットのすべてのファイルを表す。* は「すべて」を表す記号で、ワイルドカードと呼ぶ。
ポリシーは、付ける先で二つに分かれる。ユーザーやロールなどの ID に付けて、その ID が何をできるかを書くものを ID ベースのポリシーと呼ぶ。S3 のバケットなどのリソースに付けて、誰がそのリソースを使えるかを書くものを、リソースベースのポリシーと呼ぶ1。
IAM ロールとは:信頼ポリシーと権限ポリシーを持つ ID
IAM ロールも ID の一つである。AWS は、ロールには二つのポリシーを付けると説明している3。
ロールを使う側は、ロールを引き受ける(AssumeRole)操作をして、期限のある認証情報を受け取る。期限が切れた認証情報は使えなくなる4。
ロールとポリシーの違いは、次のようにまとめられる。ポリシーは、何を許すかを書いた文書で、それだけでは誰も使えない。ロールは、ポリシーを付ける ID で、決まった誰か一人のものではなく、信頼ポリシーが認めた相手が、必要なときに引き受けて使う。
ロールは 2012 年 6 月に、EC2 で動くプログラムにアクセスキーを配る手間をなくす仕組みとして加わった。認証情報の受け渡しと入れ替えは、AWS が自動で行う5。
ロールとポリシーの使い分け:相手ごとの渡し方
AWS は、人の利用者にも、AWS の上で動くプログラムにも、期限のある認証情報を使わせるよう求めている6。そのため、権限は多くの場合ロールを通じて渡し、渡す相手によって仕組みを使い分ける。
| 権限を | 渡し方 |
|---|---|
| 会社の | IAM Identity Center で |
| AWS の | EC2 の |
| 外部の | 相手を |
人の利用者については、AWS は IAM Identity Center で、アカウントへのアクセスと権限を一か所で管理するよう勧めている6。Identity Center で「権限セット」を割り当てると、各アカウントに IAM ロールが作られ、権限セットのポリシーがそのロールに付く7。
外部の会社については、外部 ID を使う。外部 ID は、外部の会社が顧客ごとに決める識別子で、秘密の値ではない8。顧客は、自分のロールの信頼ポリシーに「この外部 ID が付いた依頼だけを認める」と書く。こうしておけば、別の顧客が他人のロールを指定して外部の会社に依頼しても、その依頼には別の顧客の外部 ID が付くので、他人のロールは引き受けられない。AWS は、外部 ID で防ぐこの問題を「混乱した代理」の問題と呼んでいる9。
許可の決まり方:既定は拒否、明示的な拒否が優先
リクエストに複数のポリシーがかかるとき、AWS は次の三つの規則で判定する10。
- 既定は拒否する。 どのポリシーも許していないリクエストは拒否される。これを暗黙の拒否と呼ぶ。アカウントを作ったときの ID であるルートユーザーは、この既定の拒否の対象にならない10。
- 明示的な拒否が一つでもあれば拒否する。 どの種類のポリシーでも、当てはまる「Deny」が一つあれば、ほかにどんな許可があっても拒否になる10。
- 許可は、原則として、与えるポリシーと上限のポリシーの両方を満たすときに出る。 許可を与えるポリシーのどれかに「Allow」があり、上限を決めるポリシーがあればそのすべてが許しているとき、リクエストは許可される1011。
ポリシーは、この判定での働きで二つに分かれる1。
| 働き | 主な |
|---|---|
| 許可を | ID ベースの |
| 上限を | 組織の |
同じアカウントの中では、原則として、許可を与えるポリシーは、どれか一つに許可があれば足りる。上限のポリシーは、すべてが許していなければならない11。ただし、ロールを引き受けるときは、ID ベースのポリシーに許可があっても、信頼ポリシーがその相手を許していなければ引き受けられない10。
AWS の Well-Architected フレームワークは、セキュリティの柱の最初の設計原則で、最小権限の原則を実装するよう求めている12。既定で拒否する仕組みの下では、許可を書いた操作しか通らないので、必要な操作と、必要なリソースだけを書けば、権限は最小になる。
ポリシーは、人の手では確かめにくい
規則は短くても、ポリシーが実際に何を許すかを確かめるのは難しい。AWS の Neha Rungta は 2022 年の論文で、一つのポリシーでも、文と条件が多いと、文どうしの働きを人の手で確かめるのは難しいと書いている13。実務者の Scott Piper は 2019 年に、IAM のポリシーは書くのも理解するのも難しく、AWS 自身もときどき誤ると書いた14。Policy Sentry の作者 Kinnaird McQuade は、手で書く手間が大きいので、利用者は AWS が用意した既製のポリシーやワイルドカードに頼りがちだと書いている15。
AWS は、この問いに計算で答える道具を作った。2018 年に論文で報告した Zelkova は、ポリシーを数学的に解析して、「このリソースに、特定の利用者はアクセスできるか」といった問いに答える16。2019 年に公開した IAM Access Analyzer は、論理と数学による推論(自動推論)で、リソースのポリシーが許すすべてのアクセスの経路を求める17。Rungta によれば、AWS は問いを「このポリシーは正しいか」から「誰がアクセスできるか」に変え、Zelkova を土台に Access Analyzer を作った。道具は誰がアクセスできるかの一覧を示し、セキュリティの担当者が、それぞれを直すべきか、認めてよいかを判断する13。
ポリシーは何を許すかを、ロールは誰が使うかを決める
IAM のポリシーは、どの操作を、どのリソースに許すか、または拒むかを書いた文書である。IAM ロールは、ポリシーを付ける ID で、信頼ポリシーが認めた相手が引き受け、期限のある認証情報で使う。AWS は、人には IAM Identity Center を、プログラムにはサービスに付けるロールを、外部の会社には外部 ID を条件にしたロールを使うよう勧めている。
AWS は、リクエストを既定で拒否し、明示的な拒否を優先し、許可を与えるポリシーと上限を決めるポリシーを重ねて判定する。重ねることで、組織とアカウントの管理者が、それぞれの範囲で権限を絞れる。その代わり、ポリシーが実際に何を許すかは目で追いにくく、AWS は、あるリソースに誰がアクセスできるかを計算して一覧にする道具を用意している。
出典17件
-
AWS「Policies and permissions in AWS Identity and Access Management」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html — JSON の文書、九つの種類、管理ポリシーとインラインポリシー、許可を与えないポリシー。 ↩ ↩2 ↩3
-
AWS「IAM JSON policy elements: Statement」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_statement.html ↩
-
AWS「IAM roles」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html — 二つのポリシー、信頼ポリシー、ロールの連鎖。日本語版は、ロールを作るアカウントの向きと「引き受ける」の訳が英語版と食い違うため、英語版によった。 ↩ ↩2 ↩3
-
AWS「Temporary security credentials in IAM」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html ↩
-
Anders Samuelsson「IAM roles for EC2 instances – Simplified Secure Access to AWS service APIs from EC2」AWS News Blog(Jeff Barr 名義の投稿)、2012年6月11日、2026年10月16日取得. https://aws.amazon.com/blogs/aws/iam-roles-for-ec2-instances-simplified-secure-access-to-aws-service-apis-from-ec2/ ↩
-
AWS「Security best practices in IAM」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html — 人とワークロードへの一時的な認証情報、IAM Identity Center での一元管理。 ↩ ↩2
-
AWS「Manage AWS accounts with permission sets」(IAM Identity Center ユーザーガイド)2026年10月16日取得. https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html ↩
-
AWS「Access to AWS accounts owned by third parties」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html ↩
-
AWS「The confused deputy problem」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html ↩
-
AWS「How AWS enforcement code logic evaluates requests to allow or deny access」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic_policy-eval-denyallow.html — 例外として、リソースベースのポリシーがユーザーやロールのセッションを直接指定して許すと、境界とセッションポリシーの暗黙の拒否は効かない。 ↩ ↩2 ↩3 ↩4 ↩5
-
AWS「Policy evaluation logic」2026年10月16日取得. https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html — ID ベースとリソースベースの和、境界との積、SCP と RCP。 ↩ ↩2
-
AWS「Security foundations」(AWS Well-Architected Framework, Security Pillar)2026年10月16日取得. https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/security.html — 「強力なアイデンティティ基盤を実装する」。 ↩
-
Neha Rungta「A Billion SMT Queries a Day」CAV 2022, LNCS 13371, pp. 3–18、2022年、2026年10月16日取得. https://cdn.amazon.science/1e/e9/6aa1bd1a4203a8869f29d3bb3bff/a-billion-smt-queries-a-day.pdf ↩ ↩2
-
Scott Piper「How to audit AWS IAM and resource policies」Summit Route、2019年3月26日、2026年10月16日取得. https://summitroute.com/blog/2019/03/26/how_to_audit_aws_iam_and_resource_policies/ — Piper は CloudMapper や IAM のリンター Parliament を作った(同サイトのトップページ). https://summitroute.com/ ↩
-
Kinnaird McQuade「Policy Sentry」README、Salesforce、2019年〜、2026年10月16日取得. https://github.com/salesforce/policy_sentry — McQuade は 2020年1月、Salesforce のセキュリティチームが公開した道具として、同社のエンジニアリングブログで Policy Sentry を紹介した. https://engineering.salesforce.com/salesforce-cloud-security-automating-least-privilege-in-aws-iam-with-policy-sentry-b04fe457b8dc/ ↩
-
John Backes ほか「Semantic-based Automated Reasoning for AWS Access Policies using SMT」FMCAD 2018、2018年、2026年10月16日取得. https://d1.awsstatic.com/Security/pdfs/Semantic_Based_Automated_Reasoning_for_AWS_Access_Policies_Using_SMT.pdf ↩
-
AWS「Introducing AWS Identity and Access Management (IAM) Access Analyzer」2019年12月2日、2026年10月16日取得. https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-aws-identity-and-access-management-access-analyzer/ ↩
この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。