【AWS IAM】リソースベースのポリシーだけでアクセス許可を付与できるようです。
こんばんは。横浜事業所のYUです。
AWS を本格的に学び出して 2 年弱、IAM とはかなり打ち解けて仲良くなれたと思っていたのですが、まだまだこの子の事をちゃんと理解できていませんでした...。
今回は、改めて IAM の「リソースベースのポリシー」の挙動について確認をしたので、内容を共有します。
AWS Identity and Access Management (IAM) とは?
IAM は AWS へのサインイン (認証) や AWS リソースの操作の承認 (認可) を制御するためのサービスです。
AWS リソースの操作の許可・拒否を定義する「ポリシー」を使用する事で、各リソースを操作可能なユーザー等の制御を行い、セキュリティを高める事ができます。
参考: IAM とは
リソースベースのポリシーとは?
アクセス許可を定義する「ポリシー」は、アタッチする (割り当てる) 対象によって 2 種類に分類されます。
アイデンティティベースのポリシー
その名の通り、アイデンティティに対してアタッチするポリシーです。
このポリシーによって、アタッチされたアイデンティティが「どんな時に、どのリソースに、どんなアクションを」実行する事が可能かを設定できます。
アクセスする側にアタッチするポリシーです。
IAM アイデンティティ
識別し、グループ化するために使用される IAM リソースオブジェクト。IAM ユーザーにポリシーをアタッチすることができます。ユーザー、グループ、およびロールなどがあります。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/intro-structure.html#intro-structure-terms
リソースベースのポリシー
その名の通り、リソースに対してアタッチするポリシーです。
このポリシーによって、アタッチされたリソースが「どんな時に、どのリソースに、どんなアクションを、誰に」実行される事が可能かを設定できます。
アクセスされる側にアタッチするポリシーです。
また、リソースベースのポリシーは全ての AWS リソースにアタッチ可能というわけではありません。
アタッチ可能なリソースについては 公式ドキュメント をご参照ください。
参考: アイデンティティベースおよびリソースベースのポリシー
挙動確認
「あるユーザーにあるリソースへのアクセスを許可したい場合、アイデンティティベースのポリシーでの明示的許可は必須で、リソースベースのポリシーも使うならそっちでも明示的許可が必要」と思っている人はいないでしょうか?
私は思っていました!!
ですが、どうやらそうではないらしいという事で、実際にリソースベースのポリシーの挙動を確認してみます。
事前準備
挙動確認を実施するにあたり、以下のリソースを準備します。
- IAM ユーザー: initial
アクセス権限として、S3 バケットと S3 オブジェクトの一覧表示のみを許可するアイデンティティベースのポリシーを付与しておきます。
- s3:ListAllMyBuckets
- s3:ListBucket - S3 バケット: resource-policy-test-bucket
- S3 オブジェクト: test.txt
作成した S3 バケット (resource-policy-test-bucket) の直下に配置しておきます。
リソースベースのポリシー無しでの挙動確認
まずは、S3 バケットにリソースベースのポリシー (バケットポリシー) を設定しない状態で挙動確認を行います。
S3 オブジェクトのダウンロードを試みます。
エラーになりました。
どこにも「S3 オブジェクトのダウンロード」を許可する設定をしていないので、当然です。
リソースベースのポリシー有りでの挙動確認
では続いて、S3 バケットにリソースベースのポリシー (バケットポリシー) を設定した状態で挙動確認を行います。
IAM ユーザー「initial」に「S3 オブジェクトのダウンロード」を許可するバケットポリシーを設定しました。
先ほどと同様に、 S3 オブジェクトのダウンロードを試みます。
なんという事でしょう...ダウンロードできました。
アイデンティティベースのポリシーでアクセス許可を付与していなくても、リソースベースのポリシーだけでアクセス許可を付与できるという事ですね!
注意点
上記の挙動確認は、あくまでも 1 つの AWS アカウント内におけるものでした。
アカウントを跨いだアクセス許可を付与する場合は、アイデンティティベース、リソースベース両方の設定が必要なようです。
まとめ
今回は「リソースベースのポリシーだけでアクセス許可を付与できる」という事を確認できました。
「アイデンティティベースのポリシーで明示的に許可してないから大丈夫~♪」なんて思っていた時期もありましたが、とんだ勘違いでした...。
アクセス制御は、誤って設定してしまうと大変な事故に繋がりかねません。
AWS の 責任共有モデル においても、アクセス管理は「お客様の "クラウドにおけるセキュリティ" 責任」と位置付けられています。
システムを守る事はもちろん、私たち自身を守るためにも、IAM とは早急にマブダチになる必要がありますね!
ぜひ皆さんも IAM と親睦を深めてみてください〜。