web-dev-qa-db-ja.com

S3バケットフォルダーへのアクセスを特定のWebサイトユーザーに制限しますか? (IAMユーザーを使用しない)

ユーザーがログインする必要のあるWebサイトがあります。ユーザーは自分の写真をアップロードおよび削除できますが、これらの写真は非公開であるため、誰もが閲覧できるように画像が公開されることはありません。

IAMポリシーを使用して、S3バケット内の異なるフォルダーへのアクセスを異なるIAMユーザーに制限できることを知っています。ただし、Webサイトのユーザーはデータベースに記録されている通常の登録ユーザー(おそらくMySQL)であり、IAMユーザーではありません。

各ウェブサイトユーザーのIAMユーザーを必要とせずにこれを設定するロジックは何ですか?あなたが提案できる良い例はありますか?それとも、このような制限を設定する簡単な方法があると考えすぎていますか?

提案を事前に感謝します。

3
Dora

もう1つのオプションは、IAMロールと認証情報なしで完全に回避し、S3 Pre-signed URLsを使用することです。事前に署名されたURLを使用すると、安全で時間制限のある画像リンクを作成できます。これにより、S3のその他のプライベートオブジェクトへの認証されていないアクセスが可能になります。言い換えると:

  • S3オブジェクトはすべてプライベートであり、Webサーバー以外の誰もそれらにアクセスできません。
  • ユーザーがログインすると、彼の画像用の署名済みURLが生成されます。これらのURLは、ユーザーにコンテンツへの一時的なアクセスを提供します(有効期間1時間など)。
  • リンクの有効期限が切れると(たとえば1時間後)、ユーザーの画像へのアクセスは提供されなくなります。

このようにして、IAMユーザーまたはWebサイトユーザーのIAMロールなしで回避できます。

これを実装する方法の簡単なデモを次に示します。S3 Pre-signed URL demo

image uploads に署名済みのURLを使用することもできますが、少し複雑です。標準のアップロード方法を使用してサーバーに画像をアップロードする方が簡単な場合があり、サーバーはそれらをS3にアップロードします。

これは、Cognitoを使用するよりも制限されたアプローチですが、実装する方が簡単な場合があります。

それが役に立てば幸い:)

2
MLu

あなたは確かにIAM Userを必要としないでしょう、それは管理不可能です。

ユーザープールに対するユーザー認証にAWS Cognitoを使用することをお勧めします。データベース内のユーザーのリスト)。 Cognitoがログイン、ログアウト、パスワードのリセットなどをユーザーに代わって処理し、ユーザーが認証されると、アクセスを許可する一時的なAWS認証情報のセットが発行されます定義されたリソースに、あなたのケースではS3バケット内の特定のフォルダに。

詳細については、 S3バケット内のオブジェクトへのCognitoユーザーアクセスを許可する を参照してください。これはおそらくまさに必要なものです。

Cognitoを使用する際のボーナスとして、Facebook、Googleなどのログインなどのソーシャルメディアアカウントでログインできるようにするのは非常に簡単です。ユーザーIDへのソーシャルIDプロバイダーの追加を参照してください。

それが役に立てば幸い:)

2
MLu