2017-01-03 2 views
0

노드 SDK가있는 노드 j에서 내 새로운 버킷 (aws 콘솔을 통해 생성)에 액세스 할 때 문제가 발생했습니다. 단계 나는Amazon S3 - nodejs SDK에서 버킷에 액세스

  • 그래서 난 지금 루트 사용자
  • 만든
  • 가 S3에 가서 SDK에 대한 새로운 접근 키가 AWS 계정을 생성 (내가 뭔가를 놓친 경우 도와주세요) 만들어 새로운 버킷을 생성 withhin 콘솔
  • nodejs에서 나는이 물통에 무언가를 올려 놓으려고하지만 나는 더 이상의 설명이없는 '접근 거부'를 계속하고있다.

버킷과 함께 다른 영역을 시도하고 새로운 액세스 키를 생성하고 테스트 버킷 중 하나를 사용하여 모두에게 모든 기능을 사용할 수 있도록 버킷에 대한 더 낮은 권한을 설정하려고했지만 여전히 오류.

코드 비트 : 내가 놓친 거지 모르는

class SomeNodeService { 

     constructor() { 
      this.s3 = new S3({ 
       params: { 
        Bucket: 'some.bucket.which.name.is.unique', 
        accessKeyId: 'SOMEID', 
        secretAccessKey: 'SOMEID' 
       } 
      }); 
     } 

     uploadAttachment(attachment) { 
      const _this = this; 
      return co(function *() { 
       const file = yield _readFile(attachment.path, 'utf8'); 
       const key = `${KEY_PREFIX}attachment/${Date.now()}/${attachment.name}`; 
       const params = { 
        Key: key, 
        Body: file 
       }; 

       return yield _this.s3.putObject(params).promise(); 
      }); 
     } 

    } 

: S @filipebarretto 당으로


나는 새 사용자를 생성하고, 그 새로운 액세스 토큰을 생성 사용자 또한 AmazonS3FullAccess를 제공했습니다. 또한 그룹 이름 'sysadmin'을 만들고 그룹 자체에 AmazonS3FullAccess 권한을 제공 했으므로 그룹에 사용자를 할당하면 사용자에게 권한을 부여하게됩니다. 그래서 모든 나는

1) 새 그룹 SYSADM 2) 부여 그룹 권한을 만듭니다 무슨 짓을했는지 모두 "AmazonS3FullAccess"3) 새로운 사용자 XY를 작성하고 여전히 XY 사용자에 대한

하지만이 그룹 SYSADM 4) 다시 액세스 토큰에 가입 액세스가 거부 얻을 :/

+0

사용중인 자격 증명이 루트 사용자와 연결되어 있습니까? 아니면 다른 권한을 가진 다른 사용자입니까? – filipebarretto

+0

사용자를 생성하고 S3 IAM 역할을 제공했지만 AWS에 익숙하지는 않지만 액세스 토큰은 모든 후속 사용자가 아닌 루트 계정/루트 사용자에게만 바인딩되어있는 것처럼 보입니다. –

+0

질문에 입력 한 정책을 추가해주십시오. 사용자를 만들 때 해당 사용자의 자격 증명을 만들 수 있습니다. 계정 루트에 자격 증명이 없어야합니다. – filipebarretto

답변

1

, 당신이 사용을 자격 증명을 구성하려면 :

AWS.config = new AWS.Config(); 
AWS.config.accessKeyId = "accessKey"; 
AWS.config.secretAccessKey = "secretKey"; 
AWS.config.region = "region"; 

이 그렇게 할 수있는 최선의도 가장 안전한 방법이 아닙니다. 자세한 내용은 확인 : http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials.html

당신은 양동이 같은 PARAMS에서 키 정의한다

: 생성자에

const params = { 
    Key: key, 
    Body: file 
}; 

return yield _this.s3.putObject(params).promise(); 

을 만 사용

constructor() { 
    this.s3 = new S3(); 
} 

var에 S3를 = 새로운 AWS.S3();

참조 : http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

+0

같은 문제는 불행히도 도움이되지 않았습니다. (그러나 어쨌든 고마워요. –

+0

@ Jim-Y I이 답변을 보완했습니다. 그것을 밖으로 시도하십시오. – filipebarretto

+0

감사합니다. 슬프게도 문제의 원인이 될 수 없습니다. 응용 프로그램의 다른 부분에서 AWS를 다른 용도로 사용하기 때문입니다. AWS-SES와 같은 API를 이메일로 전송하는 것과 같고 우리는 내 질문에했다. 환경 변수에서 cred를 읽고이를 SES/S3 생성자에 대한 매개 변수로 제공하십시오. –

관련 문제