2017-01-13 8 views
1

사용자가 S3에서 사진을 업로드/다운로드 할 수있게 해주는 EC2의 웹 앱을 호스팅하고 있습니다. EC2와 S3는 같은 지역에 있습니다.AWS S3에서 다운로드 할 수 없습니다 : 액세스가 거부되었습니다

자격 증명 : 공식 문서 다음은 자격 증명이 자동으로 내가 만든 (s3fullAccess 권한)에 IAM 역할 공급 EC2에 연결해야합니다.

문제 : 사용자 (브라우저에서)는 사진을 다운로드 할 수는 없지만 성공적으로 업로드 할 수 있습니다. 다운로드 링크는 aws-sdk 님의 getSignedUrl() 방법으로 생성되었습니다.

오류 메시지 :

InvalidAccessKeyId : 당신이 제공하는 AWS 액세스 키 ID가 우리의 기록에 존재하지 않습니다.

먼저 사용자가 성공적으로 자료를 업로드 할 수 있으므로 access key이 올바른 것으로 보입니다.

내 생각 엔 사용자가 브라우저에서 링크를 클릭하여 다운로드하기 때문에 EC2와 S3간에 상호 작용이 없으므로 다운로드 할 때 IAM 역할이 사용되지 않습니다. 그러나 EC2 자격 증명으로 signedDownloadUrl이 생성되지 않습니까? 그리고 쿼리 문자열에 액세스 키 쌍이 모두 제공됩니다. 그래서 내 추측은 잘못되었을 수도 있습니다 ..

어떤 제안이나 아이디어라도 감사하겠습니다.

내가 IAM 사용자를 작성하지 않은

편집, 만 IAM 역할을한다. 이것이 중요한지 모르겠다.

+0

S3 버킷에 대한 직접 링크에서 다운로드를 시도 했습니까? 예 .http : //s3-us-west-1.amazonaws.com/BUCKET/PATH/TO/IMAGE.jpeg' 또는 'http : // BUCKET.s3.amazonaws.com/PATH/TO/IMAGE.jpeg'. 동일한 오류 메시지가 표시되면 버킷 및 CORS의 권한을 확인하십시오. 그러나 EC2 및 S3의 도메인이 서로 다른지 여부에 따라 다릅니다. – zer00ne

+0

@ zer00ne 액세스가 거부되었습니다. 링크 앞에 잠금 아이콘이 있습니다. –

+0

@ zer00ne 오류 메시지가 다릅니다. 웹 앱의 '잘못된 액세스 키 ID'및 s3 관리 콘솔의 '액세스 거부'입니다. EC2와 S3도 같은 지역에 있습니다. –

답변

1

ASIA...입니다. IAM 역할에 대한 임시 자격 증명 집합의 임시 액세스 키 ID입니다. 역할 자격 증명은 이며 항상 임시입니다. AKIA...은 IAM 사용자입니다.

여기에서 문제는 자격 증명을 수반하는 x-amz-security-token이 S3 서명 된 URL을 생성 한 서명 과정에서 사용되지 않았기 때문에 서명 된 URL에 표시되지 않지만 여기에 있어야합니다. 작업.

임시 보안 자격 증명 [...]을 사용하여 요청을 서명하는 경우 x-amz-security-token 헤더를 추가하여 요청에 해당 보안 토큰을 포함시켜야합니다.

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#UsingTemporarySecurityCredentials

당신이 x-amz-security-token을 포함하지 않는 경우, 시스템은이 IAM의 소련 데이터베이스에 액세스 키 ID를 찾아야한다 가정하고, 어떤이 원인이 발견되지 않습니다 InvalidAccessKeyId : 입력하신 AWS 액세스 키 ID가 Google의 기록 오류에 존재하지 않습니다.

이미 생성 된 URL에 추가 할 수 없습니다. 그것은 서명 과정에 통합되어야합니다.

+0

고맙습니다. 작동합니다. 이전에 인증하기 위해 환경 변수를 사용하고 있었기 때문에'x-amz-security-token'을 포함하는 것을 잊었습니다. –

관련 문제