AWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に向けた知識の整理 IAMポリシー

# 概要
AWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に向けた小ネタ集。
今回はIAMポリシーについてです。

[2020年10月追記]
2回目の受験でついにプロフェッショナル試験に合格しました！
合格体験記／勉強法を以下で投稿しているので良かったら読んでください。
試験受ける予定がある方の少しでも役に立てればと思います(^^)

[AWS初心者がAWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に合格した時の勉強法](https://qiita.com/fkooo/items/17fa401f4e46ecd00675 "AWS初心者がAWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に合格した時の勉強法")

# 本題

IAMのアイデンティティ (ユーザー、ユーザーのグループ、ロール) ベースにアタッチできるポリシー（ユーザーまたはロールなどのエンティティが実行できるアクション、リソース、および条件）、リソースベースのポリシーに関する整理です。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_identity-vs-resource.html

ポリシーは実はだいぶ深い概念で一度に整理するのは難しいため今回はアイディンティティベースのポリシーです。

ポリシーの全体像としてわかりやすかったページは以下

https://dev.classmethod.jp/articles/aws-iam-policy/

AWS公式ドキュメントだと以下

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access.html

## IAM アイディンティティベースのポリシー

[アイデンティティベースのポリシー](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies.html#policies_id-based "アイデンティティベースのポリシー")

* アイデンティティ (ユーザー、ユーザーのグループ、ロール) にアタッチする
* 以下の管理ポリシーの２種類とインラインポリシーの１種類で合計３種類ある
* 管理ポリシー：以下の２種類に分類される
 * AWS管理ポリシー：AWSが職務機能用に設計されているもの
 * カスタマー管理ポリシー：AWS管理ポリシーをコピーして作成でき、カスタマイズできるもの
* インラインポリシー：単一のユーザー、グループ、またはロールに直接埋め込まれる。通常、インラインポリシーを使用することは推奨されていません。 
* [管理ポリシーとインラインポリシー](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_managed-vs-inline.html "管理ポリシーとインラインポリシー")

### AWS管理ポリシー

* 図にすると以下。ポイントは、
    * AWS管理のためアカウントを超えてアタッチできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/4bfe0d3d-3b1a-8198-9900-5fc2aec7f7f4.png)

* 職務機能単位のAWS管理ポリシーがデフォルトで用意されている
 * [職務機能のAWS管理ポリシー](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_job-functions.html "職務機能のAWS管理ポリシー")
    * 管理者:AdministratorAccess
    * 料金:Billing
  * データベース管理者:DatabaseAdministrator
  * データサイエンティスト:DataScientist
  * 開発者パワーユーザー:PowerUserAccess
  * ネットワーク管理者:NetworkAdministrator
  * セキュリティ監査人:SecurityAudit
  * サポートユーザー:SupportUser
  * システム管理者:SystemAdministrator
  * 閲覧専用ユーザー:ViewOnlyAccess

### カスタマー管理ポリシー

* 図にすると以下。ポイントは、
    * AWS管理ポリシーをコピーして作成でき、カスタマイズできる
    * AWSアカウント内の管理になるため他のアカウントにはアタッチできない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/2b8d91b8-4cc3-7364-d257-81ec5fb3ff04.png)

### インラインポリシー

* 図にすると以下。ポイントは、
    * 単一のユーザー、グループ、またはロールに直接埋め込まれる
    * 図のDynamoDB-books-appを更新する場合、EC2-accessロールとbooks-appロールの両方のインラインポリシーを更新する必要がある

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188544/842e027f-241b-adb7-4a5d-b5bc60a85735.png)

## リソースベースのポリシー

* リソースにアタッチする
    * 例えば、S3のバケットポリシー、Amazon SQS キュー、AWS Key Management Service 暗号化キーにアタッチすることができる
    * 以下の一覧でリソースベースのポリシー「あり」になっているサービス
    * https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html
* アイディンティティベースのポリシーとは違い、リソースベースのポリシーはそのリソースにアクセスできるユーザー（プリンシパル）を指定する
    * https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_compare-resource-policies.html
* ロールによる権限の委任の場合、他のアカウントがクロスアカウントする場合、作業時の権限はロールに定義された権限になり、委任される前に持っていたロールの権限は引き継がれない。リソースベースのポリシーの場合は、ロールは変わらないため今持っているロール権限もそのまま使えた上でクロスアカウントアクセスが可能となる。と、いった利点がある

## その他参考

アソシエイト資格の勉強法は以下を参照

[AWS初心者がAWS 認定ソリューションアーキテクト – アソシエイト資格試験に合格した時の勉強法](https://qiita.com/fkooo/items/e5284a4ed3c3466ffd41 "AWS初心者がAWS 認定ソリューションアーキテクト – アソシエイト資格試験に合格した時の勉強法")

プロフェッショナル資格の勉強法は以下を参照

[AWS初心者がAWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に合格した時の勉強法](https://qiita.com/fkooo/items/17fa401f4e46ecd00675 "AWS初心者がAWS 認定ソリューションアーキテクト – プロフェッショナル資格試験に合格した時の勉強法")

その他の小ネタは以下を参照

[プロレベルのTips](https://qiita.com/fkooo/items/e3c0c9a11d078619cbe0 "プロレベルのTips")
[フェデレーションとDDoS対策](https://qiita.com/fkooo/items/a6d71407b2bed42332cc "フェデレーションとDDoS対策")
[IAMポリシー](https://qiita.com/fkooo/items/45cd86fa6e71d51f12e2 "IAMポリシー")（本記事）
[DR対策](https://qiita.com/fkooo/items/cbeb13fea8b99e4b7964 "DR対策")
[IAMポリシーサンプル](https://qiita.com/fkooo/items/ae934fe9b1eb2a77f65d "IAMポリシーサンプル")