aws s3 загрузка не удалась только в производственной среде, но была успешна в локальной среде - PullRequest
0 голосов
/ 12 сентября 2018

Я попытался загрузить изображение, используя aws-sdk, multer-s3.В моем локальном окружении загрузка изображения была успешной, но в производственной среде (aws lambda) она завершалась неудачно, статус ошибки 403 запрещен.Но мой лицензионный ключ aws и секретный ключ такие же, как в локальной среде.Также я успешно проверил ключ AWS в производственной среде.

Я думаю, что разница между двумя другими средами - ничто. Что мне не хватает?

Я даже пытался установить ключ aws в своем коде маршрутизатора, как показано ниже, но он также не удался.

AWS.config.accessKeyId = 'blabla';
AWS.config.secretAccessKey = 'blalbla';
AWS.config.region = 'ap-northeast-2';

и вот моя политика

{
    "Id": "Policy1536755128154",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1536755126539",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::elebooks-image/*",
            "Principal": "*"
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Обновите прикрепленную политику S3 Bucket для пользователя в соответствии с приведенной ниже политикой:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                        "s3:GetBucketLocation",
                        "s3:ListAllMyBuckets"
                      ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET",
                "arn:aws:s3:::YOUR-BUCKET/*"
            ]
        }
    ]
}

она работает на моем сервере.

0 голосов
/ 12 сентября 2018

Я не работал с AWS Lambda, но я знаком с S3. Когда вы используете AWS SDK в своей локальной среде, вы, вероятно, используете пользователя root с полным доступом по умолчанию, поэтому он просто будет работать.

Однако в случае с Lambda, согласно следующему извлечению из документации, вы должны убедиться, что роль IAM, указанная вами при создании функции Lambda, имеет соответствующие разрешения для выполнения s3: putObject для этого сегмента.

Разрешения для вашей функции Lambda. Независимо от того, что вызывает функцию Lambda, AWS Lambda выполняет функцию, принимая роль IAM (роль выполнения), указанную вами при создании функции Lambda. Используя политику разрешений, связанную с этой ролью, вы предоставляете функции Lambda необходимые ей разрешения. Например, если вашей функции Lambda необходимо прочитать объект, вы предоставляете разрешения для соответствующих действий Amazon S3 в политике разрешений. Дополнительные сведения см. В разделе «Управление разрешениями: использование роли IAM (роль выполнения)».

См. Написание политик IAM: как предоставить доступ к корзине S3

...