私はユーザーに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サービスのプロパティとしてクレデンシャルを保存し、ページがリロードされるたびにバックエンドからトークンを取得することですが、非常に効率的ですね。