Перейти к основному содержимому
Версия: 2.0.x

Аутентификация для доступа к ресурсам AWS

Selena поддерживает три метода аутентификации для интеграции с ресурсами AWS: аутентификация на основе профиля экземпляра, аутентификация на основе предполагаемой роли и аутентификация на основе пользователя IAM. В этом разделе описывается, как настроить учётные данные AWS с использованием этих методов аутентификации.

Методы аутентификации

Аутентификация на основе профиля экземпляра

Метод аутентификации на основе профиля экземпляра позволяет вашему cluster Selena наследовать привилегии, указанные в профиле экземпляра EC2, на котором работает cluster. Теоретически любой пользователь cluster, который может войти в cluster, может выполнять разрешённые действия с вашими ресурсами AWS в соответствии с политиками AWS IAM, которые вы настроили. Типичный сценарий для этого случая использования - когда вам не нужен контроль доступа к ресурсам AWS между несколькими пользователями cluster в cluster. Этот метод аутентификации означает, что изоляция внутри одного cluster не требуется.

Однако этот метод аутентификации всё ещё можно рассматривать как решение безопасного контроля доступа на уровне cluster, потому что администратор cluster контролирует, кто может войти в cluster.

Аутентификация на основе предполагаемой роли

В отличие от аутентификации на основе профиля экземпляра, метод аутентификации на основе предполагаемой роли поддерживает принятие роли AWS IAM для получения доступа к вашим ресурсам AWS. Подробнее см. Принятие роли.

Аутентификация на основе пользователя IAM

Метод аутентификации на основе пользователя IAM поддерживает использование учётных данных пользователя IAM для получения доступа к вашим ресурсам AWS. Подробнее см. Пользователи IAM.

Подготовка

Сначала найдите роль IAM, связанную с экземпляром EC2, на котором работает ваш cluster Selena (эта роль далее в этом разделе называется ролью экземпляра EC2), и получите ARN роли. Вам понадобится роль экземпляра EC2 для аутентификации на основе профиля экземпляра и нужны роль экземпляра EC2 и её ARN для аутентификации на основе предполагаемой роли.

Следующий шаг - создайте политику IAM на основе типа ресурса AWS, к которому вы хотите получить доступ, и конкретного сценария операции в Selena. Политика в AWS IAM объявляет набор разрешений на определённый ресурс AWS. После создания политики вам нужно прикрепить её к роли или пользователю IAM. Таким образом, роль или пользователь IAM получает разрешения, объявленные в политике, для доступа к указанному ресурсу AWS.

ВНИМАНИЕ

Для выполнения этих подготовительных действий у вас должно быть разрешение на вход в консоль AWS IAM и редактирование пользователей и ролей IAM.

Для политики IAM, которая вам понадобится для доступа к определённому ресурсу AWS, см. следующие разделы:

Подготовка для аутентификации на основе профиля экземпляра

Прикрепите политики IAM для доступа к необходимым ресурсам AWS к роли экземпляра EC2.

Подготовка для аутентификации на основе предполагаемой роли

Создание ролей IAM и прикрепление к ним политик

Создайте одну или несколько ролей IAM в зависимости от ресурсов AWS, к которым вы хотите получить доступ. См. Создание ролей IAM. Затем прикрепите политики IAM для доступа к необходимым ресурсам AWS к созданным вами ролям IAM.

Например, вы хотите, чтобы ваш cluster Selena имел доступ к AWS S3 и AWS Glue. В этой ситуации вы можете создать одну роль IAM (например, s3_assumed_role) и прикрепить к этой роли политику для доступа к AWS S3 и политику для доступа к AWS Glue. Альтернативно вы можете создать две разные роли IAM (например, s3_assumed_role и glue_assumed_role) и прикрепить эти политики к двум разным ролям соответственно (то есть прикрепить политику для доступа к AWS S3 к s3_assumed_role и политику для доступа к AWS Glue к glue_assumed_role).

Созданные вами роли IAM будут приняты ролью экземпляра EC2 cluster Selena для доступа к указанным ресурсам AWS.

В этом разделе предполагается, что вы создали только одну предполагаемую роль s3_assumed_role и добавили к этой роли политику для доступа к AWS S3 и политику для доступа к AWS Glue.

Настройка доверительных отношений

Настройте вашу предполагаемую роль следующим образом:

  1. Войдите в консоль AWS IAM.

  2. На левой панели навигации выберите Access management > Roles.

  3. Найдите предполагаемую роль (s3_assumed_role) и нажмите на её имя.

  4. На странице сведений о роли нажмите вкладку Trust relationships, а затем на вкладке Trust relationships нажмите Edit trust policy.

  5. На странице Edit trust policy удалите существующий JSON-документ политики и вставьте следующую политику IAM, в которой вы должны заменить <cluster_EC2_iam_role_ARN> на ARN роли экземпляра EC2, который вы получили выше. Затем нажмите Update policy.

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "<cluster_EC2_iam_role_ARN>"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }

Если вы создали разные предполагаемые роли для доступа к разным ресурсам AWS, вам нужно повторить предыдущие шаги для настройки других предполагаемых ролей. Например, вы создали s3_assumed_role и glue_assumed_role для доступа к AWS S3 и AWS Glue соответственно. В этой ситуации вам нужно повторить предыдущие шаги для настройки glue_assumed_role.

Настройте вашу роль экземпляра EC2 следующим образом:

  1. Войдите в консоль AWS IAM.

  2. На левой панели навигации выберите Access management > Roles.

  3. Найдите роль экземпляра EC2 и нажмите на её имя.

  4. В разделе Permissions policies страницы сведений о роли нажмите Add permissions и выберите Create inline policy.

  5. На шаге Specify permissions нажмите вкладку JSON, удалите существующий JSON-документ политики и вставьте следующую политику IAM, в которой вы должны заменить <s3_assumed_role_ARN> на ARN предполагаемой роли s3_assumed_role. Затем нажмите Review policy.

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Action": ["sts:AssumeRole"],
    "Resource": [
    "<s3_assumed_role_ARN>"
    ]
    }
    ]
    }

    Если вы создали разные предполагаемые роли для доступа к разным ресурсам AWS, вам нужно указать ARN всех этих предполагаемых ролей в элементе Resource предыдущей политики IAM и разделить их запятой (,). Например, вы создали s3_assumed_role и glue_assumed_role для доступа к AWS S3 и AWS Glue соответственно. В этой ситуации вам нужно указать ARN s3_assumed_role и ARN glue_assumed_role в элементе Resource в следующем формате: "<s3_assumed_role_ARN>","<glue_assumed_role_ARN>".

  6. На шаге Review Policy введите имя политики и нажмите Create policy.

Подготовка для аутентификации на основе пользователя IAM

Создайте пользователя IAM. См. Создание пользователя IAM в вашей учётной записи AWS.

Затем прикрепите политики IAM для доступа к необходимым ресурсам AWS к созданному вами пользователю IAM.

Сравнение методов аутентификации

Следующая диаграмма даёт общее объяснение различий в механизме между аутентификацией на основе профиля экземпляра, аутентификацией на основе предполагаемой роли и аутентификацией на основе пользователя IAM в Selena.

Сравнение методов аутентификации

Построение подключений к ресурсам AWS

Параметры аутентификации для доступа к AWS S3

В различных сценариях, когда Selena необходимо интегрироваться с AWS S3, например, при создании внешних каталогов или файловых внешних таблиц, или при загрузке, резервном копировании или восстановлении данных из AWS S3, настройте параметры аутентификации для доступа к AWS S3 следующим образом:

  • Для аутентификации на основе профиля экземпляра установите aws.s3.use_instance_profile в true.
  • Для аутентификации на основе предполагаемой роли установите aws.s3.use_instance_profile в true и настройте aws.s3.iam_role_arn как ARN предполагаемой роли, которую вы используете для доступа к AWS S3 (например, ARN предполагаемой роли s3_assumed_role, которую вы создали выше).
  • Для аутентификации на основе пользователя IAM установите aws.s3.use_instance_profile в false и настройте aws.s3.access_key и aws.s3.secret_key как ключ доступа и секретный ключ вашего пользователя AWS IAM.

В следующей таблице описаны параметры.

ПараметрОбязательныйОписание
aws.s3.use_instance_profileДаУказывает, следует ли включить метод аутентификации на основе профиля экземпляра и метод аутентификации на основе предполагаемой роли. Допустимые значения: true и false. Значение по умолчанию: false.
aws.s3.iam_role_arnНетARN роли IAM, имеющей привилегии на ваш бакет AWS S3. Если вы используете метод аутентификации на основе предполагаемой роли для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.access_keyНетКлюч доступа вашего пользователя IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.secret_keyНетСекретный ключ вашего пользователя IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS S3, вы должны указать этот параметр.

Параметры аутентификации для доступа к AWS Glue

В различных сценариях, когда Selena необходимо интегрироваться с AWS Glue, например, при создании внешних каталогов, настройте параметры аутентификации для доступа к AWS Glue следующим образом:

  • Для аутентификации на основе профиля экземпляра установите aws.glue.use_instance_profile в true.
  • Для аутентификации на основе предполагаемой роли установите aws.glue.use_instance_profile в true и настройте aws.glue.iam_role_arn как ARN предполагаемой роли, которую вы используете для доступа к AWS Glue (например, ARN предполагаемой роли glue_assumed_role, которую вы создали выше).
  • Для аутентификации на основе пользователя IAM установите aws.glue.use_instance_profile в false и настройте aws.glue.access_key и aws.glue.secret_key как ключ доступа и секретный ключ вашего пользователя AWS IAM.

В следующей таблице описаны параметры.

ПараметрОбязательныйОписание
aws.glue.use_instance_profileДаУказывает, следует ли включить метод аутентификации на основе профиля экземпляра и аутентификацию на основе предполагаемой роли. Допустимые значения: true и false. Значение по умолчанию: false.
aws.glue.iam_role_arnНетARN роли IAM, имеющей привилегии на ваш AWS Glue Data Catalog. Если вы используете метод аутентификации на основе предполагаемой роли для доступа к AWS Glue, вы должны указать этот параметр.
aws.glue.access_keyНетКлюч доступа вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS Glue, вы должны указать этот параметр.
aws.glue.secret_keyНетСекретный ключ вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS Glue, вы должны указать этот параметр.

Примеры интеграции

Внешний каталог

Создание внешнего каталога в вашем cluster Selena означает построение интеграции с целевой системой озера данных, которая состоит из двух ключевых компонентов:

  • Файловое хранилище, такое как AWS S3, для хранения файлов таблиц
  • Хранилище метаданных, такое как Hive metastore или AWS Glue, для хранения метаданных и расположений файлов таблиц

Selena поддерживает следующие типы каталогов:

Следующие примеры создают каталог Hive с именем hive_catalog_hms или hive_catalog_glue, в зависимости от типа используемого хранилища метаданных, для запроса данных из вашего cluster Hive. Подробный синтаксис и параметры см. в Каталог Hive.

Аутентификация на основе профиля экземпляра

  • Если вы используете Hive metastore в вашем cluster Hive, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
    );
  • Если вы используете AWS Glue в вашем cluster Amazon EMR Hive, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG hive_catalog_glue
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.region" = "us-west-2"
    );

Аутентификация на основе предполагаемой роли

  • Если вы используете Hive metastore в вашем cluster Hive, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
    );
  • Если вы используете AWS Glue в вашем cluster Amazon EMR Hive, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG hive_catalog_glue
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.iam_role_arn" = "arn:aws:iam::081976408565:role/glue_assumed_role",
    "aws.glue.region" = "us-west-2"
    );

Аутентификация на основе пользователя IAM

  • Если вы используете Hive metastore в вашем cluster Hive, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "false",
    "aws.s3.access_key" = "<iam_user_access_key>",
    "aws.s3.secret_key" = "<iam_user_access_key>",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
    );
  • Если вы используете AWS Glue в вашем cluster Amazon EMR Hive, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG hive_catalog_glue
    PROPERTIES
    (
    "type" = "hive",
    "aws.s3.use_instance_profile" = "false",
    "aws.s3.access_key" = "<iam_user_access_key>",
    "aws.s3.secret_key" = "<iam_user_secret_key>",
    "aws.s3.region" = "us-west-2",
    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "false",
    "aws.glue.access_key" = "<iam_user_access_key>",
    "aws.glue.secret_key" = "<iam_user_secret_key>",
    "aws.glue.region" = "us-west-2"
    );

Файловая внешняя таблица

Файловые внешние таблицы должны создаваться во внутреннем каталоге с именем default_catalog.

Следующие примеры создают файловую внешнюю таблицу с именем file_table в существующей базе данных с именем test_s3_db. Подробный синтаксис и параметры см. в Файловая внешняя таблица.

Аутентификация на основе профиля экземпляра

Выполните команду, подобную следующей:

CREATE EXTERNAL TABLE test_s3_db.file_table
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "s3://selena-test/",
"format" = "ORC",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
);

Аутентификация на основе предполагаемой роли

Выполните команду, подобную следующей:

CREATE EXTERNAL TABLE test_s3_db.file_table
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "s3://selena-test/",
"format" = "ORC",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
"aws.s3.region" = "us-west-2"
);

Аутентификация на основе пользователя IAM

Выполните команду, подобную следующей:

CREATE EXTERNAL TABLE test_s3_db.file_table
(
id varchar(65500),
attributes map<varchar(100), varchar(2000)>
)
ENGINE=FILE
PROPERTIES
(
"path" = "s3://selena-test/",
"format" = "ORC",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "us-west-2"
);

Загрузка данных

Вы можете использовать LOAD LABEL для загрузки данных из AWS S3.

Следующие примеры загружают данные из всех файлов данных Parquet, хранящихся по пути s3a://test-bucket/test_brokerload_ingestion, в таблицу test_ingestion_2 в существующей базе данных с именем test_s3_db. Подробный синтаксис и параметры см. в BROKER LOAD.

Аутентификация на основе профиля экземпляра

Выполните команду, подобную следующей:

LOAD LABEL test_s3_db.test_credential_instanceprofile_7
(
DATA INFILE("s3a://test-bucket/test_brokerload_ingestion/*")
INTO TABLE test_ingestion_2
FORMAT AS "parquet"
)
WITH BROKER
(
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-1"
)
PROPERTIES
(
"timeout" = "1200"
);

Аутентификация на основе предполагаемой роли

Выполните команду, подобную следующей:

LOAD LABEL test_s3_db.test_credential_instanceprofile_7
(
DATA INFILE("s3a://test-bucket/test_brokerload_ingestion/*")
INTO TABLE test_ingestion_2
FORMAT AS "parquet"
)
WITH BROKER
(
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/s3_assumed_role",
"aws.s3.region" = "us-west-1"
)
PROPERTIES
(
"timeout" = "1200"
);

Аутентификация на основе пользователя IAM

Выполните команду, подобную следующей:

LOAD LABEL test_s3_db.test_credential_instanceprofile_7
(
DATA INFILE("s3a://test-bucket/test_brokerload_ingestion/*")
INTO TABLE test_ingestion_2
FORMAT AS "parquet"
)
WITH BROKER
(
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "us-west-1"
)
PROPERTIES
(
"timeout" = "1200"
);