Редактирование ACL объекта
В объектном хранилище S3 доступ к объектам можно гибко настраивать с помощью ACL (списков управления доступом). Это особенно полезно, если вы хотите вручную задать, кто и что может делать с конкретными объектами — например, разрешить чтение, редактирование или делегировать полные права другим пользователям.
При каждом новом применении ACL старые настройки полностью перезаписываются.
- AWS CLI
- Python API
Если AWS CLI еще не установлен, установите и настройте его. Для работы с объектным хранилищем используйте команды s3api и s3.
AWS CLI. Редактирование ACL объекта
Просмотр текущих прав доступа к объекту
В терминале выполните команду:
aws s3api get-object-acl \
--bucket <bucket_name> \
--key <object_name>
Укажите:
<bucket_name> — имя бакета;
<object_name> — имя объекта.
Применение предустановленных ACL
Если нужно быстро задать типичный шаблон доступа, можно воспользоваться предустановленными ACL.
В терминале выполните команду:
aws s3api put-object-acl \
--bucket <bucket_name> \
--key <object_name> \
--acl <type_acl>
Укажите:
<bucket_name> — имя бакета;
<object_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=<идентификатор> — для конректных пользователей;
uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers — все аутентифицированные пользователи;
uri=http://acs.amazonaws.com/groups/global/AllUsers — все пользователи интернета.
Пример команды
В терминале выполните команду:
aws s3api put-object-acl \
--bucket my-bucket \
--key reports/summary.pdf \
--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_object_acl(bucket_name, object_key):
try:
response = s3.get_object_acl(Bucket=bucket_name, Key=object_key)
print("Owner:", response.get('Owner'))
print("Grants:")
for grant in response.get('Grants', []):
print(grant)
except ClientError as e:
print(f"Ошибка получения ACL: {e}")
get_object_acl('<bucket_name>', '<object_name>')
Укажите:
<bucket_name> — имя бакета;
<object_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_predefined_acl(bucket_name, object_key, acl_type):
try:
s3.put_object_acl(Bucket=bucket_name, Key=object_key, ACL=acl_type)
print(f"ACL '{acl_type}' применен к объекту {object_key}")
except ClientError as e:
print(f"Ошибка применения ACL: {e}")
set_predefined_acl('<bucket_name>', '<object_name>', 'public-read')
Укажите:
<bucket_name> — имя бакета;
<object_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=<идентификатор> — для конректных пользователей;
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_object_acl(bucket_name, object_key, grants):
try:
owner = s3.get_object_acl(Bucket=bucket_name, Key=object_key)['Owner']
s3.put_object_acl(
Bucket=bucket_name,
Key=object_key,
AccessControlPolicy={
'Grants': grants,
'Owner': owner
}
)
print(f"Индивидуальные ACL установлены для объекта '{object_key}' в бакете '{bucket_name}'.")
except ClientError as e:
print(f"Ошибка: {e}")
grants = [
{
'Grantee': {
'Type': 'CanonicalUser',
'ID': '<user_id>',
},
'Permission': '<type_acl>'
}
]
set_custom_object_acl('<bucket_name>', '<object_name>', grants)
Укажите:
<bucket_name> — имя бакета;
<user_id> — ID пользователя;
<object_name> — имя объекта;
<type_acl> — предопределенные правила ACL.
Подробнее об объектах см. в статье Об объектах.