Политика AWS S3 Bucket

Я создал простую политику для доступа к определенному сегменту для аутентифицированного пользователя (ключ доступа / пароль). Ниже приводится политика

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

Но пользователь не может получить к нему доступ. если я заменил Resource на "arn:aws:s3:::*", он будет работать, но покажет все сегменты присоединенному пользователю.

3 ответа

Решение

Попробуйте это вместо этого:

{
  "Statement": [
    {
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::xxxxxxx",
        "arn:aws:s3:::xxxxxxx/*"
      ]
    }
  ]
}

Вам необходимо предоставить доступ к корзине (/*), а затем к самой корзине, которая является той частью, которую вам не хватает.

Как предположил Э.Дж.Бреннан, вы можете добавить саму корзину в список ресурсов, но это даст пользователю право на удаление самой корзины. Если вы просто хотите, чтобы они просматривали корзину и могли изменять объекты внутри нее, вы можете предоставить список доступа к корзине в дополнение к тому, что у вас есть:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::xxxxxxx"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::xxxxxxx/*"
            ]
        }
    ]
}

В Nodejs вы можете сделать это так:

      const policy = {
  Version: '2012-10-17',
  Statement: [
    {
      Sid: 'PublicListGet',
      Effect: 'Allow',
      Principal: '*',
      Action: ['s3:List*', 's3:Get*', 's3:Put*'],
      Resource: [`arn:aws:s3:::${bucketName}`, `arn:aws:s3:::${bucketName}/*`]
    }
  ]
};

const bucketPolicyParams = {
  Bucket: bucketName,
  Policy: JSON.stringify(policy)
};

await s3.putBucketPolicy(bucketPolicyParams).promise();
Другие вопросы по тегам