Редактирование ACL бакета
ACL — это список управления доступом в объектном хранилище S3. Это полезно, если вы хотите вручную задать, кто и что может делать с конкретными бакетами — например, разрешить чтение, редактирование или делегировать полные права другим пользователям.
При каждом новом применении ACL старые настройки полностью перезаписываются.
- AWS CLI
- Python API
Если AWS CLI еще не установлен, установите и настройте его. Для работы с объектным хранилищем используйте команды s3api и s3.
AWS CLI. Редактирование ACL бакета
Просмотр текущих прав доступа к бакету
В терминале выполните команду:
aws s3api get-bucket-acl --bucket <bucket_name>
Укажите:
<bucket_name> — имя бакета.
Применение предустановленных ACL
Если нужно быстро задать типичный шаблон доступа, можно воспользоваться предустановленными ACL.
В терминале выполните команду:
aws s3api put-bucket-acl \
--bucket <bucket_name> \
--acl <type_acl>
Укажите:
<bucket_name> — имя бакета;
<type_acl> — предопределенные правила ACL.
Примеры значений <type_acl>:
private — доступ только у владельца;
public-read — все пользователи могут читать;
public-read-write — все пользователи могут читать и записывать;
authenticated-read — доступ на чтение для всех авторизованных пользователей.
Настройка индивидуальных разрешений
Если вам нужно выдать доступ конкретным пользователям или сервисам, используйте параметры --grant-*.
Примеры разрешений
--grant-read — доступ только к чтению;
--grant-full-control — полный доступ к объекту;
--grant-read-acp — возможность видеть настройки ACL;
--grant-write-acp — возможность изменять ACL.
Примеры получателей
id=<identifier> — для конкретных пользователей;
uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers — все аутентифицированные пользователи;
uri=http://acs.amazonaws.com/groups/global/AllUsers — все пользователи интернета.
Пример команды
В терминале выполните команду:
aws s3api put-bucket-acl \
--bucket my-bucket \
--grant-read id=user1 \
--grant-full-control uri=http://acs.amazonaws.com/groups/global/AllUsers
Можно комбинировать сразу несколько разрешений в одной команде.
Подробнее о бакетах см. в статье О бакетах.
Boto3 — это библиотека Python, предоставляющая программный интерфейс (SDK) для взаимодействия с объектным хранилищем S3. Подробности см. в документации AWS Boto3.
Python API. Редактирование ACL бакета
Просмотр текущих прав доступа к бакету
import boto3
from botocore.exceptions import ClientError
session = boto3.session.Session(profile_name='default') #Создает сессию с использованием профиля default. Профиль находится в файле ~/.aws/credentials.
s3 = session.client('s3', endpoint_url='$endpoint')
def get_bucket_acl(bucket_name):
try:
response = s3.get_bucket_acl(Bucket=bucket_name)
print(f"Владелец: {response['Owner']}")
print("Разрешения:")
for grant in response['Grants']:
grantee = grant['Grantee']
permission = grant['Permission']
grantee_type = grantee.get('Type')
if grantee_type == 'CanonicalUser':
print(f" ID: {grantee.get('ID')} — {permission}")
elif grantee_type == 'Group':
print(f" URI: {grantee.get('URI')} — {permission}")
except ClientError as e:
print(f"Ошибка: {e}")
get_bucket_acl('<bucket_name>')
Укажите:
<bucket_name> — имя бакета.
Применение предустановленных ACL
Если нужно быстро задать типичный шаблон доступа, можно воспользоваться предустановленными ACL.
import boto3
from botocore.exceptions import ClientError
session = boto3.session.Session(profile_name='default') #Создает сессию с использованием профиля default. Профиль находится в файле ~/.aws/credentials.
s3 = session.client('s3', endpoint_url='$endpoint')
def set_canned_acl(bucket_name, acl_type):
try:
s3.put_bucket_acl(Bucket=bucket_name, ACL=acl_type)
print(f"Предустановленный ACL '{acl_type}' применен к бакету '{bucket_name}'.")
except ClientError as e:
print(f"Ошибка: {e}")
set_canned_acl('<bucket_name>', '<type_acl>')
Укажите:
<bucket_name> — имя бакета;
<type_acl> — предопределенные правила ACL.
Примеры значений <type_acl>:
private — доступ только у владельца;
public-read — все пользователи могут читать;
public-read-write — все пользователи могут читать и записывать;
authenticated-read — доступ на чтение для всех авторизованных пользователей.
Настройка индивидуальных разрешений
Если вам нужно выдать доступ конкретным пользователям или сервисам, используйте параметры --grant-*.
Примеры разрешений
READ — доступ только к чтению;
FULL_CONTROL — полный доступ к объекту;
READ_ACP — возможность видеть настройки ACL;
WRITE_ACP — возможность изменять ACL.
Примеры получателей
id=<identifier> — для конкретных пользователей;
uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers — все аутентифицированные пользователи;
uri=http://acs.amazonaws.com/groups/global/AllUsers — все пользователи интернета.
Пример команды
import boto3
from botocore.exceptions import ClientError
session = boto3.session.Session(profile_name='default') #Создает сессию с использованием профиля default. Профиль находится в файле ~/.aws/credentials.
s3 = session.client('s3', endpoint_url='$endpoint')
def set_custom_acl(bucket_name, grants):
try:
owner = s3.get_bucket_acl(Bucket=bucket_name)['Owner']
s3.put_bucket_acl(
Bucket=bucket_name,
AccessControlPolicy={
'Grants': grants,
'Owner': owner
}
)
print(f"Индивидуальные ACL установлены для бакета '{bucket_name}'.")
except ClientError as e:
print(f"Ошибка: {e}")
# Пример вызова
grants = [
{
'Grantee': {
'Type': 'CanonicalUser',
'ID': '<user_id>',
},
'Permission': '<type_acl>'
}
]
set_custom_acl('<bucket_name>', grants)
Укажите:
<bucket_name> — имя бакета;
<user_id> — ID пользователя;
<type_acl> — предопределенные правила ACL.
Можно комбинировать сразу несколько разрешений в одном вызове.
Подробнее о бакетах см. в статье О бакетах.