ceph radosgw - политика корзины - сделать все объекты открытыми для чтения по умолчанию - PullRequest
0 голосов
/ 18 мая 2018

Я работаю с группой не-разработчиков, которые загружают объекты в корзину стиля s3 через radosgw.Все загруженные объекты должны быть общедоступными, но они не могут делать это программно.Есть ли способ сделать разрешение по умолчанию для публичного чтения объекта, чтобы его не нужно было каждый раз устанавливать вручную?Должен быть способ сделать это с помощью boto, но я пока не нашел примеров.Есть несколько пользователей, использующих графический интерфейс AWS, но это не вариант для меня.: (

Я создаю корзину следующим образом:

#!/usr/bin/env python

import boto
import boto.s3.connection

access_key = "SAMPLE3N84XBEHSAMPLE"
secret_key = "SAMPLEc4F3kfvVqHjMAnsALY8BCQFwTkI3SAMPLE"

conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        host = '10.1.1.10',
        is_secure=False,
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )

bucket = conn.create_bucket('public-bucket', policy='public-read')

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

>>> print bucket.get_acl()
<Policy: http://acs.amazonaws.com/groups/global/AllUsers = READ, S3 Newbie (owner) = FULL_CONTROL>

Чтобы уточнить, я знаю, что могу решить это для каждого объекта следующим образом:

key = bucket.new_key('thefile.tgz')
key.set_contents_from_filename('/home/s3newbie/thefile.tgz')
key.set_canned_acl('public-read')

Но мои конечные пользователине способны сделать это, поэтому мне нужен способ сделать это разрешением по умолчанию для загруженного файла.

1 Ответ

0 голосов
/ 21 мая 2018

Я нашел решение своей проблемы.

Во-первых, большое спасибо Джошану, который опубликовал это: https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/python/example_code/s3/s3-python-example-put-bucket-policy.py

Я заметил, что он использует библиотеку boto3, поэтому я начал использовать еедля моего соединения.

import boto3
import json

access_key = "SAMPLE3N84XBEHSAMPLE"
secret_key = "SAMPLEc4F3kfvVqHjMAnsALY8BCQFwTkI3SAMPLE"

conn = boto3.client('s3', 'us-east-1',
                    endpoint_url="http://mycephinstance.net",
                    aws_access_key_id = access_key,
                    aws_secret_access_key = secret_key)

bucket = "public-bucket"

bucket_policy = {
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::{0}/*".format(bucket)]
    }
  ]
}

bucket_policy = json.dumps(bucket_policy)
conn.put_bucket_policy(Bucket=bucket_name, Policy=bucket_policy)

Теперь, когда объект загружается в public-bucket, его можно анонимно загрузить без явной установки разрешения ключа для публичного чтения или генерации URL-адреса загрузки.

Если вы делаете это, ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО убедитесь, что ЛЮБОЙ можно скачать этот материал.Особенно, если ваша служба radosgw общедоступна в Интернете.

...