[レポート] IAMとバケットポリシーを使ったS3のアクセス制御ハンズオン #reinvent #SPL209

re:Invent 2019で行われたSpotlight Lab「Using IAM and Bucket Policies with Amazon S3」のレポートです。
2019.12.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSを愛する皆さま、こんにちは。
コンサルティング部の西野(@xiye_gen)です。

re:Invent 2019もあっという間に前半戦が終わってしまいましたね。
本ブログはAWS re:Invent 2019 Spotlight Lab「Using IAM and bucket policies with Amazon S3」のレポートです。

目次

Spotlight Lab概要

タイトル

Using IAM and Bucket Policies with Amazon S3

概要

Explore scenarios that use AWS Identity and Access Management (IAM) and bucket policies to grant access to Amazon Simple Storage Service (Amazon S3) and its resources.

IAMとバケットポリシーを使ってS3へのアクセス制御を学ぼう!というSpotlight Labです。

レポート

「AWSの認定資格はそこそこ取得したけど、アクセス権限周り結構複雑だしあんまり触ったこと無いな…」という危機感にかられ、ラスベガスの地からAWSを触ってきました。

そもそもSpotlight Labとは?

弊社の林による紹介記事があるのでこちらをご参照ください。 Spotlight Labの雰囲気がよくわかります。

本Spotlight Labの学習目標

このSpotlight Labには以下の4つの学習目標が設定されていました。

  • アプリケーションからS3のリソースにアクセスできるよう設定する
  • S3バケットへのアクセスを制御するバケットポリシーを作成する
  • S3バケットへのアクセスを制御するインスタンスプロファイルを使用する
  • バケットポリシーとIAMポリシーを併用した際に「明示的な拒否」のポリシーがどのように評価されるのかを知る

Lab環境構成図

  • パブリックサブネットにあるEC2がパブリックIPを持っておりインターネットからアクセス可能
  • S3へはVPC Endpointを経由して接続

Spotlight Labを開始すると予めこのような環境が構築されています。
あとは後述する流れに沿ってハンズオンを進めていくだけです。

本Spotlight Labの流れ

  • Task1: 起動されているのEC2インスタンスに(SSH)接続する
  • Task2: EC2内に用意されているWebアプリケーションを起動し、ファイルをアップロード
    • Webアプリケーションのコンフィグファイルにアクセスキー・シークレットアクセスキーをハードコーディング
    • Webアプリケーションの起動
    • ブラウザから当該アプリケーションにアクセス
    • ファイルをWebブラウザ経由でS3にアップロード→成功
  • Task3: ハードコーディングしたアクセスキーをアプリケーションのコンフィグから削除
    • コンフィグファイルを開きアクセスキー・シークレットアクセスキー部分をコメントアウト
    • 再度ブラウザでWebページにアクセスした後、ファイルをアップロード→失敗
    • EC2にS3へのアクセス許可ポリシーが付与されたIAMロールをアタッチ→再度アップロード→成功
  • Task4: バケットポリシーによるアクセスが可能であることを確認
    • Putのポリシーが無いIAMロールをEC2にアタッチ→アップロードに失敗
    • Putを許可したバケットポリシーを作る→アップロード成功
  • Task5: VPC Endpoint経由のアクセスのみを許可しているか確かめる
    • ルートテーブルからVPC Endpointへの経路を削除
    • アップロード→失敗
    • ルートテーブルにVPC Endpointへの経路を再度設定
    • アップロード→成功
  • Task6: IAMポリシーとバケットポリシーの衝突をためす
    • オブジェクトのPutを「明示的に拒否」するバケットポリシーを作成し対象バケットに付与
    • バケットへのオブジェクトのPutを許可するIAMロールをEC2インスタンスにアタッチ
    • ファイルをアップロード→失敗
    • 対象バケットのバケットポリシーを削除する
    • ファイルをアップロード→成功

終わりに

あらゆる分野に言えることですが、理解のためには「やってみる」ことが重要です。複雑でわかりづらいものであればあるほどそれが有効です。

とはいえ、何もわからない状態でドキュメントを睨みつつやってみるのはなかなか難しいと思います。Spotlight Labはそんな状況のあなたに有効ですので、機会があったらぜひチャレンジしてみてください。

このブログがほんの少しでも世界を良くできれば嬉しいです。
コンサルティング部の西野(@xiye_gen)がお送りしました。