23.5. Сценарий: разделение доступа на чтение и запись в S3-хранилище #
По умолчанию функция duckdb.create_simple_secret() создаёт сопоставление пользователей для роли PUBLIC, что позволяет всем ролям подключаться к S3-хранилищу. Однако Postgres Pro ищет сопоставление пользователей в следующем порядке: сначала для определённой роли, затем для PUBLIC. Если сопоставление пользователей для определённой роли найдено, оно имеет приоритет перед PUBLIC.
Этот механизм можно использовать, чтобы предоставлять разным ролям разные права на S3-хранилище. Например, можно ограничить право на запись в S3-хранилище, предоставив право только на чтение роли PUBLIC, а также право на чтение и запись другой роли.
Важно
Не предоставляйте право USAGE на Foreign Data Wrapper duckdb каким-либо ролям, кроме администратора Postgres Pro AXE. Роль с этим правом может создать внешний сервер с любыми параметрами подключения к S3-хранилищу и сопоставления пользователей для любой роли. Это позволяет перезаписать сопоставление пользователей другой роли с отличающимся ключом доступа и секретным ключом доступа.
Чтобы настроить этот сценарий:
Создайте внешний сервер и сопоставление пользователей для роли
PUBLICс правом только на чтение из S3-хранилища:CREATE SERVER simple_s3_secret TYPE 'S3' FOREIGN DATA WRAPPER duckdb OPTIONS ( region 'регион', url_style 'формат_URL', provider 'поставщик_учётных_данных', endpoint 'URL_конечной_точки', scope 'ограничение_применения', validation '', use_ssl 'true_или_false' ); CREATE USER MAPPING FOR PUBLIC SERVER simple_s3_secret OPTIONS ( key_id 'ключ_доступа_только_на_чтение', secret 'секретный_ключ_доступа_только_на_чтение', session_token 'токен_безопасности_сеанса' );Где:
регион: регион, в котором размещается S3-хранилище.Необязательный параметр.
формат_URL: формат URL, который используется для доступа к бакету внутри S3-хранилища.Возможные значения:
path: имя бакета включено в путь URL, напримерstorage.example.com/my-bucket.Необязательный параметр.
поставщик_учётных_данных: указывает, как предоставляются ключ доступа и секретный ключ доступа.Возможные значения:
''(пустая строка): использовать предоставленныеключ_доступа_только_на_чтениеисекретный_ключ_доступа_только_на_чтение.Необязательный параметр.
URL_конечной_точки: URL конечной точки (endpoint) S3-хранилища.Необязательный параметр.
ограничение_применения: префикс пути бакета, ограничивающий применение секрета к определённому расположению в S3-хранилище.Значение по умолчанию: '' (пустая строка) означает, что секрет применяется ко всем путям в S3-хранилище.
Необязательный параметр.
validation: служебный параметр, оставьте его пустым.true_или_false: указывает, следует ли шифровать взаимодействие между Postgres Pro AXE и S3-хранилищем.Необязательный параметр.
ключ_доступа_только_на_чтениеисекретный_ключ_доступа_только_на_чтение: ключ доступа и секретный ключ доступа с правом только на чтение из S3-хранилища.токен_безопасности_сеанса: временный токен безопасности сеанса, необходимый при использовании временных учётных данных (short-lived credentials, STS).Значение по умолчанию: '' (пустая строка) означает, что используется постоянный ключ доступа.
Необязательный параметр.
Создайте сопоставление пользователей для роли с правом на чтение и запись в S3-хранилище:
CREATE USER MAPPING FOR
имя_ролиSERVER simple_s3_secret OPTIONS ( key_id 'ключ_доступа_на_чтение_и_запись', secret 'секретный_ключ_доступа_на_чтение_и_запись', session_token 'токен_безопасности_сеанса' );Где:
имя_роли: роль с правом на чтение и запись в S3-хранилище.ключ_доступа_на_чтение_и_записьисекретный_ключ_доступа_на_чтение_и_запись: ключ доступа и секретный ключ доступа с правом на чтение и запись в S3-хранилище.токен_безопасности_сеанса: временный токен безопасности сеанса, необходимый при использовании временных учётных данных (short-lived credentials, STS).Значение по умолчанию: '' (пустая строка) означает, что используется постоянный ключ доступа.
Необязательный параметр.
В результате:
Если роль
имя_ролиначинает операцию в S3-хранилище, Postgres Pro применяет сопоставление пользователей для этой роли с правом на чтение и запись.Если какая-либо роль, кроме
имя_роли, начинает операцию в S3-хранилище, Postgres Pro применяет сопоставление пользователей для ролиPUBLICс правом только на чтение.