Загрузка программного файла в корзину AWS S3 - PullRequest
1 голос
/ 22 июня 2019

Я хочу подготовить корзину AWS S3 и пользователя IAM (только с программным доступом), чтобы я мог упростить привилегию загрузки файлов только для этого пользователя.Пользователь получит идентификатор ключа доступа AWS и секретный ключ доступа для использования в простом консольном приложении Node.js или Python. Каковы минимальные шаги, необходимые для достижения этого ?

  1. Создание пользователя IAM (с программным доступом) с разрешениями no - СДЕЛАНО
  2. Создать корзину S3 и заблокировать весь публичный доступ - СДЕЛАНО
  3. Добавить политику корзины, которая выглядит следующим образом:
{
    "Version": "2012-10-17",
    "Id": "Policy1234567",
    "Statement": [
        {
            "Sid": "Stmt1234567",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::1234567890:user/someuser"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::some-bucket-name/*"
        }
    ]
}

У меня есть простойПриложение node.js, которое будет загружать данный файл в корзину:

const fs = require('fs');
const zlib = require('zlib');
const AWS = require('aws-sdk');
const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});

const bucketName = 'some-bucket-name';
const fileName = 'alargefile.iso';
var body = fs.createReadStream(fileName)
             .pipe(zlib.createGzip());

// Upload the stream
var s3obj = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  params: {
    Bucket: bucketName,
    Key: fileName
  }
});
s3obj.upload({
  Body: body
}, function(err, data) {
  if (err) {
    console.log("An error occurred", err);
  }
  else {
    console.log("Uploaded the file at", data.Location);
  }
});
Так как у пользователя нет каких-либо разрешений, нужно ли мне все еще создавать настраиваемую политику для применения в качестве разрешения для пользователя?Политики OOTB либо слишком щедры (AmazonS3FullAccess), либо слишком ограничены (AmazonS3ReadOnlyAccess).Еще одно недоразумение заключается в том, что я установил политику корзины, которая регулирует доступ к корзине для конкретного пользователя, поэтому этого будет недостаточно?

1 Ответ

2 голосов
/ 22 июня 2019

Вы также можете создать пользовательскую политику для пользователя IAM, где вы разрешаете PUTObject только для определенного сегмента.

пример:

{
    "Version": "2012-10-17",
    "Id": "Policy1234567",
    "Statement": [
        {
            "Sid": "Stmt1234567",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::some-bucket-name/*"
        }
    ]
}

Если пользователь корзины и IAM находятся в одной и той же учетной записи, вам не нужна политика корзины, если у пользователя IAM есть вышеуказанная политика.

Вам определенно нужна политика идентификации, основанная на ссылке ниже:

https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...