1

私はユーザーにpdfファイルをアップロードできるようにするEmberアプリケーションを作成しています。ファイルストレージにはAWS S3を使用しています。 AWSの信用証明書を厳重にコード化したくないので、AWS Cognitoを使用して、ファイルをアップロード/ダウンロードするときにS3を認証するための一時的な認証情報を作成しています。ユーザーのためにAWSにアイデンティティプールを作成し、認証されたユーザーと認証されていないユーザーに関連するIAMロールを構成しました(認証ユーザーはS3バケットの1つに読み取り専用アクセスを取得します)。私は私のアイデンティティプールの認証プロバイダとして私のRailsバックエンド(Deviseを使用しています)を使用しています。私のフロントエンド認証では、提供されたDeviseオーセンティケータでEmber Simple Authを使用しているため、トークンを要求するためにはログインする必要があります。AWS Cognitoクッキー内の一時的な資格証明

1)私のバックエンドからAWS Cognitoアイデンティティイドとトークンを取得します(新規作成)

2)私のバックエンドでのRuby AWS SDKからget_open_id_token_for_developer_identityメソッドを使用して:ここで私は一時的な資格を取得する手順は、アイデンティティIDとトークンを使用して一時的な資格情報を取得し、(js-cookieを使用して)クッキーにcredを格納するCognitoIdentityCredentialsオブジェクト。

コード:

 var AWS = window.AWS; 
     AWS.config.region = "us-west-2"; 
     AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
      IdentityPoolId: 'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 
      IdentityId: response.identity_id, 
      Logins: { 
       'cognito-identity.amazonaws.com': response.token 
      } 
     }); 
     AWS.config.credentials.get(function() { 
      var date = new Date(AWS.config.credentials.expireTime); 
      Cookies.set("cognito_creds", { accessKeyId: AWS.config.credentials.accessKeyId, secretAccessKey: AWS.config.credentials.secretAccessKey, sessionToken: AWS.config.credentials.sessionToken }, { expires: date }); 
     }); 

私はクッキーに、このようなAWSの資格情報などの重要な情報を格納することは、大きなノーノーであり、間違いなく安全ではないことを理解しています。ただし、HTTPSを使用しています.1時間後に資格情報が失効し、資格情報に関連付けられたIAMの役割は、S3バケットの1つにのみ読み取り専用アクセスを提供します。

私の質問は:これらの信用をクッキーとして保存してバックエンドからトークンを取得する必要がないようにセキュリティ上の価値があるのでしょうか?

EDIT:私が考えている代替ソリューションは、フロントエンドのEmberサービスのプロパティとしてクレデンシャルを保存し、ページがリロードされるたびにバックエンドからトークンを取得することですが、非常に効率的ですね。

答えて

1

This previous questionには、いくつかの同様の側面があります。短いバージョンはどちらでもいいですか?資格情報を完全にスコープしたように聞こえるので、あなたがそれらを保存することを選択した場合、爆発半径を制限しました。

遅延を抑えたい場合は、悪い方法ではありません。あなたがその待ち時間を犠牲にしたい場合や、S3から読み取れるもののプライバシーに関心がある場合は、リモートから取得することができます。

関連する問題