доступ к spark s3 без настройки ключей и только с ролью IAM - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть кластер HDP на AWS, и у меня также есть один s3 (в другой учетной записи), моя версия hadoop - Hadoop 3.1.1.3.0.1.0-187

Теперь я хочу читать с s3(который находится в другой учетной записи) и обработайте, а затем запишите результат в мою s3 (ту же учетную запись, что и в кластере).

Но согласно руководству по HDP Здесь говорит, что я могу настроить только одинключи моей учетной записи или другой учетной записи.

Но в моем случае я хочу настроить два ключа учетной записи, поэтому как это сделать?

По какой-то причине безопасности другая учетная запись не можетизмените политику корзины, чтобы добавить роль IAM, которая создается в моей учетной записи, поэтому я попытался получить доступ, как показано ниже

  1. Настроил ключи другой учетной записи
  2. Добавлена ​​роль IAM (которая имеет доступполитика для моего ведра) моего аккаунта

но все же я получил ошибку ниже, когда я попытался получить доступ к своему аккаунту s3 из спарк-записи

com.amazonaws.services.s3.model.AmazonS3Exception: Код состояния: 400, Сервис AWS: Amazпо S3

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Если я правильно понял,

  1. вы хотите, чтобы ваши виртуальные машины EC2 имели доступ к корзине S3, к которой у роли IAM нет доступа
  2. у вас есть набор AWSрегистрационные данные для внешнего сегмента S3 (логин и пароль)

HDP3 имеет цепочку аутентификации по умолчанию в порядке

  1. секретов для каждого сегмента.fs.s3a.bucket.NAME.access.key, fs.s3a.bucket.NAME.secret.key
  2. секреты всей конфигурации fs.s3a.access.key, fs.s3a.secret.key
  3. env vars AWS_ACCESS_KEY и AWS_SECRET_KEY
  4. роль IAM (itвыполняет HTTP-GET для сервера 169.something, который обслуживает новый набор учетных данных роли IAM не реже одного раза в час)

Здесь вам нужно попробовать настроить некоторые секреты для каждого сегмента длятолько внешний источник (либо в файле JCEKS на всех узлах в core-site.xml, либо по умолчанию в spark. Например, если бы внешний контейнер был s3a://external, у вас было бы

spark.hadoop.fs.s3a.bucket.external.access.key AKAISOMETHING spark.hadoop.fs.s3a.bucket.external.secret.key SECRETSOMETHING

HDP3 / Hadoop 3 может обрабатывать> 1 секрет в одном и том же файле JCEKS без проблем. HADOOP-14507 . Мой код. В старых версиях вы можете указать имя пользователя: секретный в URI, ноэто такая проблема безопасности (все эти URI регистрируются, поскольку они не считаются чувствительными), эта функция была вырезана из Hadoop Теперь придерживайтесь файла JCEK с секретом для каждого сегмента, возвращаясь к роли IAM для ваших собственных данных.

Обратите внимание, что вы можете поиграть со списком аутентификации для oРендеринг и поведение: если вы добавите использовать TemporaryAWSCredentialsProvider, он также будет поддерживать сеансовые ключи, что часто удобно. <property> <name>fs.s3a.aws.credentials.provider</name> <value> org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider, org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider, com.amazonaws.auth.EnvironmentVariableCredentialsProvider, org.apache.hadoop.fs.s3a.auth.IAMInstanceCredentialsProvider </value> </property>

0 голосов
/ 27 декабря 2018

Вам нужно использовать роль профиля экземпляра EC2.Это роль IAM, которая прикреплена к вашему экземпляру: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html

Сначала вы создаете роль с разрешениями, которые разрешают доступ к s3.Затем вы присоединяете эту роль к своему кластеру HDP (группа автоматического масштабирования EC2 и EMR могут достичь этого). Конфигурация ключей доступа IAM на вашей стороне не требуется, хотя AWS по-прежнему делает это для вас в фоновом режиме.Это s3 «исходящая» часть доступа.

2-й шаг - настроить политику сегментов для разрешения доступа между учетными записями: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html Это необходимо сделать для каждого сегмента в вашемразные аккаунты.По сути, это «входящая» часть разрешения доступа s3.

Вы встретите 400, если какая-либо часть вашего доступа (т. Е. Разрешение вашей роли профиля экземпляра, ACL сегмента S3, политика сегмента, настройка блока публичного доступа и т. Д...) в цепочке разрешений отказано.На входящей стороне гораздо больше слоев.Поэтому, чтобы начать работать, если вы не являетесь экспертом по IAM, попробуйте начать с очень открытой политики (используйте подстановочный знак '*), а затем сузьте круг.

...