ユーザーがログインする必要のあるWebサイトがあります。ユーザーは自分の写真をアップロードおよび削除できますが、これらの写真は非公開であるため、誰もが閲覧できるように画像が公開されることはありません。
IAMポリシーを使用して、S3バケット内の異なるフォルダーへのアクセスを異なるIAMユーザーに制限できることを知っています。ただし、Webサイトのユーザーはデータベースに記録されている通常の登録ユーザー(おそらくMySQL)であり、IAMユーザーではありません。
各ウェブサイトユーザーのIAMユーザーを必要とせずにこれを設定するロジックは何ですか?あなたが提案できる良い例はありますか?それとも、このような制限を設定する簡単な方法があると考えすぎていますか?
提案を事前に感謝します。
もう1つのオプションは、IAMロールと認証情報なしで完全に回避し、S3 Pre-signed URLsを使用することです。事前に署名されたURLを使用すると、安全で時間制限のある画像リンクを作成できます。これにより、S3のその他のプライベートオブジェクトへの認証されていないアクセスが可能になります。言い換えると:
このようにして、IAMユーザーまたはWebサイトユーザーのIAMロールなしで回避できます。
これを実装する方法の簡単なデモを次に示します。S3 Pre-signed URL demo
image uploads に署名済みのURLを使用することもできますが、少し複雑です。標準のアップロード方法を使用してサーバーに画像をアップロードする方が簡単な場合があり、サーバーはそれらをS3にアップロードします。
これは、Cognitoを使用するよりも制限されたアプローチですが、実装する方が簡単な場合があります。
それが役に立てば幸い:)
あなたは確かにIAM Userを必要としないでしょう、それは管理不可能です。
ユーザープールに対するユーザー認証にAWS Cognitoを使用することをお勧めします。データベース内のユーザーのリスト)。 Cognitoがログイン、ログアウト、パスワードのリセットなどをユーザーに代わって処理し、ユーザーが認証されると、アクセスを許可する一時的なAWS認証情報のセットが発行されます定義されたリソースに、あなたのケースではS3バケット内の特定のフォルダに。
詳細については、 S3バケット内のオブジェクトへのCognitoユーザーアクセスを許可する を参照してください。これはおそらくまさに必要なものです。
Cognitoを使用する際のボーナスとして、Facebook、Googleなどのログインなどのソーシャルメディアアカウントでログインできるようにするのは非常に簡単です。ユーザーIDへのソーシャルIDプロバイダーの追加を参照してください。
それが役に立てば幸い:)