質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

1957閲覧

S3で作成した静的ホスティングサイトで会員専用ページを作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

2クリップ

投稿2020/03/23 11:24

前提・実現したいこと

S3で作成した静的ホスティングサイトで会員専用ページを作成したいのですが、どのようにすればよいでしょうか。
Cognitoで作成したユーザーで以下のようなコードを書いてみたのですが、アクセスすることは叶いませんでした。

cognitoUser.getSession(function(err, result) { if (result) { AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: "us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", Logins: { "cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx": result.getIdToken().getJwtToken() } }); window.location.href = "https://xxxxxxxxxxxxxxxxxxxxxx.s3.amazonaws.com/private/index.html"; } });

S3のバケットポリシーは以下のように書いています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::xxxxxxxxxxxxxxxxx/*" }, { "Effect": "Deny", "NotPrincipal": { "AWS": "arn:aws:iam::xxxxxxxxxxxx:user/xxxxxxxxxxxxxx" }, "Action": "s3:*", "Resource": "arn:aws:s3:::xxxxxxxxxxxxxxx/private/index.html" } ] }

そもそもアプローチが違うのでしょうか。ご教授いただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2020/03/24 03:07

> アクセスすることは叶いませんでした ということですが、そもそも配置したファイル(index.html?)を表示することができていないということでしょうか?
退会済みユーザー

退会済みユーザー

2020/03/24 06:50 編集

そうです。配置したhtmlやcss、jsファイルなどを読み込むことができないです。 コードの補足になりますが、以下のようにCognitoの認証は通っています。 あとはIAMのロールやS3のバケットポリシーの設定次第だと思うのですが。。。 ``` const email = document.getElementById("emailText").value; const password = document.getElementById("passwordText").value; const poolData = { UserPoolId: "us-east-1_xxxxxx", ClientId: "xxxxxxxxxxxxx" }; const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); const authenticationData = { Username: email, Password: password }; const authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); const userData = { Username: email, Pool: userPool, }; const cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function(result) { const idToken = result.getIdToken().getJwtToken(); // IDトークン const accessToken = result.getAccessToken().getJwtToken(); // アクセストークン const refreshToken = result.getRefreshToken().getToken(); // 更新トークン }, onFailure: function(err) { console.error(err); }, }); } ```
guest

回答1

0

もしかしたらCognito側の設定が済んでいないのかもしれないのと、バケットポリシーも見直したほうが良さそうですね。
公式ドキュメントではAmplifyを使った例が今は多数出てきますが、参考になりそうなサイトを共有します。

投稿2020/03/24 09:05

yu_1985

総合スコア7447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/24 10:50

ご返信ありがとうございます。 そのサイトみたんですよね...。 確かに認証後にS3から取得していますが、S3バケットからURLを指定して取得しているのではなく、JS上でS3オブジェクトから取得しいるのです。 私は認証後にS3バケットの構造を保ちつつURLで取得したいので。 そうしないと参照するCSSやJSが読み込めないからです。 私なりにググってみても認証処理までの解説とか、S3にPUTするとか、DBにアクセスするとかばかりで。 不可能ということは無いと信じたいので色々やってみますが、Amplifyについても調べてみます。 あと、絶賛情報受付中です。よろしくお願います。
退会済みユーザー

退会済みユーザー

2020/03/26 16:53

'参考になりそうなサイト'の方法ですが、勘違いしていました。 あの方法を行えば指定したS3ファイルにアクセスすることは可能です。 ですが、URLが署名付きURLになるので、HTMLに紐付いているcssやjsを利用することができないのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問