ListObjectV2 получает ошибку «Отказано в доступе» в AWS Lambda - PullRequest
0 голосов
/ 02 ноября 2018

Я не уверен, правильно ли я получаю разрешения, но я пытаюсь использовать listObjectsV2 в своей лямбда-функции, но получаю access denied error. Я использую без сервера.

Вот мое iAMRoleStatement

 iamRoleStatements:
    - Effect: "Allow"
      Action:
        - s3:GetObject
        - s3:ListBucket
      Resource: 
        - "arn:aws:s3:::${self:custom.bucket1}/*"
        - "arn:aws:s3:::${self:custom.bucket2}/*"

Это дает мне ответ:

{
    "errorMessage": "Access Denied",
    "errorType": "AccessDenied",
    "stackTrace": [
        "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/services/s3.js:577:35)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
        "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)",
        "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)",
        "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)",
        "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)",
        "Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)",
        "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
    ]
}

А вот и функция

const AWS = require('aws-sdk')
const apiVersion = '2006-03-01'

module.exports.index = async (event, context) => {
  const s3 = new AWS.S3({ apiVersion })
  const { path: { bucket_name } } = event
  const params = {
    Bucket: 'ml-chips-result'
  }

  return new Promise((resolve, reject) => {
    s3.listObjectsV2(params, (err, data) => {
      if (err) reject(err)
      else resolve(data)
    })
  })
  .then(data => {
    return {
      data,
      event
    }
  })
}

В соответствии с примерами, которые я нашел в документации, правильное разрешение - это ListBuckets. Но это не похоже на работу.

1 Ответ

0 голосов
/ 02 ноября 2018

Попробуйте добавить разрешение для ListBuckets для доступа к корню корзины:

  Resource: 
    - "arn:aws:s3:::${self:custom.bucket1}"
    - "arn:aws:s3:::${self:custom.bucket1}/*"
    - "arn:aws:s3:::${self:custom.bucket2}"
    - "arn:aws:s3:::${self:custom.bucket2}/*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...