テクノロジー

【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 と親睦を深めてみてください〜。

この記事を書いた人

著者近影

カンタービレ 編集部

CANTABILEはALHの「はたらく」を伝えるメディアです。キャリア・カルチャー・テクノロジーを歌うように楽しくお届けします。 このライターの他の記事を見る

この記事をシェアする

採用情報RECRUITING Info.