Перейти к основному содержимому

Аутентификация в ресурсах AWS

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

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

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

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

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

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

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

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

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

Подготовка

Сначала найдите роль IAM, связанную с экземпляром EC2, на котором работает ваш кластер 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.

Например, вы хотите, чтобы ваш кластер 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 кластера 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, например, при создании external catalog или файловых внешних таблиц или при загрузке, резервном копировании или восстановлении данных из 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, которая имеет привилегии на ваш bucket 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, например, при создании external catalog, настройте параметры аутентификации для доступа к 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, вы должны указать этот параметр.

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

External catalog

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

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

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

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

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

  • Если вы используете Hive metastore в вашем кластере 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 в вашем кластере 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 в вашем кластере 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 в вашем кластере 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 в вашем кластере 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 в вашем кластере 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"
    );

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

Файловые внешние таблицы должны быть созданы в вашем внутреннем catalog с именем 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://starrocks-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://starrocks-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://starrocks-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"
);