1

사용자가 pdf 파일을 업로드 할 수있게하려는 Ember 앱을 작성 중이며 파일 저장을 위해 AWS S3을 사용하고 있습니다. AWS cred를 하드 코딩하고 싶지 않기 때문에 AWS Cognito를 사용하여 파일을 업로드/다운로드하려는 사용자를 S3에 인증하는 임시 자격 증명을 만듭니다. 사용자를 위해 AWS에 ID 풀을 만들고 인증 된 사용자와 인증되지 않은 사용자 (인증 된 사용자는 내 S3 버킷 중 하나에 대한 읽기 전용 액세스 권한을 얻음)에 대한 관련 IAM 역할을 구성했습니다. 내 ID 풀에 대한 인증 공급자로 Devils를 사용하는 Rails 백엔드를 사용하고 있습니다. 내 프런트 엔드 인증을 위해 Ember Simple Auth를 제공된 Devise 인증 자와 함께 사용 중이므로 토큰을 요청하려면 사용자가 로그인해야합니다.AWS Cognito 쿠키의 임시 자격증 명

1) 내 백엔드에서 AWS Cognito 식별 아이디와 토큰을 가져 오기 (새로 만들기)

2) 내 백엔드에 루비 AWS SDK에서 get_open_id_token_for_developer_identity 방법을 사용하여 : 여기 임시 자격 증명을 얻기 위해 수행하는 단계입니다 ID 및 토큰을 사용하여 CognitoIdentityCredentials 객체가 임시 자격 증명을 얻고 쿠키에 쿠키를 저장합니다 (js-cookie 사용).

코드 :

 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를 사용하고 있으며 자격 증명은 한 시간 후에 만료되며 자격 증명과 관련된 IAM 역할은 S3 버킷 중 하나에 대한 읽기 전용 액세스 만 제공합니다.

제 질문은 보안 위험이 있습니까?이 신임 정보를 쿠키로 저장하면 백엔드에서 토큰을 새로 고칠 필요가 없습니다. 그렇지 않으면이 접근법이 너무 취약해질 수 있습니까?

EDIT : 내가 생각하고있는 대체 솔루션은 프론트 엔드의 Ember 서비스에 대한 자격 증명으로 자격 증명을 저장하고 페이지가 다시로드 될 때마다 백엔드에서 토큰을 얻는 것이지만, 매우 효율적으로 보입니다.

답변

1

This previous question에는 비슷한 내용이 있습니다. 읽을 가치가 있습니다. 짧은 버전은 괜찮습니다. 자격 증명을 완벽하게 적용한 것처럼 들리므로, 저장하려고 선택하면 폭발 반지름이 제한됩니다.

지연 시간을 줄이려면 이동하는 것은 좋지 않습니다. 대기 시간을 희생 시키거나 S3에서 읽을 수있는 것의 개인 정보 보호에 관심이 있다면 원격으로 가져갈 수 있습니다.