Как использовать AWS SessionToken для чтения из S3 в pyspark? - PullRequest
0 голосов
/ 09 мая 2018

Предположим, я делаю это:

import os os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages "org.apache.hadoop:hadoop-aws:2.7.3" pyspark-shell' from pyspark import SparkConf from pyspark import SparkContext
from pyspark import SparkConf
from pyspark import SparkContext

conf = SparkConf() \
        .setMaster("local[2]") \
        .setAppName("pyspark-unittests") \
        .set("spark.sql.parquet.compression.codec", "snappy")
sc = SparkContext(conf=conf)
s3File = sc.textFile("s3a://myrepo/test.csv")
print(s3File.count())
print(s3File.id())

Я знаю, что теоретически я могу сделать это до вызова sc.textFile (...), чтобы установить мои учетные данные:

sc._jsc.hadoopConfiguration().set('fs.s3a.access.key', 'awsKey')
sc._jsc.hadoopConfiguration().set('fs.s3a.secret.key', 'awsSecret')

Тем не менее, У меня нет пары ключ / секрет, вместо этого у меня есть триплет ключ / секрет / токен (это временные учетные данные, которые периодически обновляются через AssumeRole .... см. Здесь для получения подробной информации о получении этих учетных данных: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)

Как я могу использовать триплет для аутентификации в AWS S3, а не только ключ и секрет?

Я бы предпочел использовать com.amazonaws.auth.profile.ProfileCredentialsProvider в качестве поставщика учетных данных (и иметь ключ / secret / token в ~ / .aws / credentials). Я бы согласился предоставить их в командной строке или в жестком коде.

Если я попробую это (с моими учетными данными в ~ / .aws / credentials):

sc._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.profile.ProfileCredentialsProvider")

Я все еще получаю это:

py4j.protocol.Py4JJavaError: An error occurred while calling o37.partitions.
: com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain

Как я могу загрузить учетные данные из ~ / .aws / credentials или иным образом использовать SessionToken?

1 Ответ

0 голосов
/ 09 мая 2018

Я не вижу com.amazonaws.auth.profile.ProfileCredentialsProvider в документации .Однако есть org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider, который позволяет вам использовать ключ и секрет вместе с fs.s3a.session.token, куда должен идти токен.

В инструкциях на этой странице написано:

Для проверки подлинности с помощью этих данных:

  1. Объявите org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider в качестве поставщика.
  2. Установите ключ сеанса в свойстве fs.s3a.session.token, , а также ключ доступа и секретный ключ.свойства для свойств этого временного сеанса.

Пример:

<property>
  <name>fs.s3a.aws.credentials.provider</name>
  <value>org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider</value>
</property>

<property>
  <name>fs.s3a.access.key</name>
  <value>SESSION-ACCESS-KEY</value>
</property>

<property>
  <name>fs.s3a.secret.key</name>
  <value>SESSION-SECRET-KEY</value>
</property>

<property>
  <name>fs.s3a.session.token</name>
  <value>SECRET-SESSION-TOKEN</value>
</property>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...