2016-07-22 4 views
0

Для копирования файла из HDFS в S3 ведро я использовал командуHDFS для s3 Distcp - ключи доступа

hadoop distcp -Dfs.s3a.access.key=ACCESS_KEY_HERE\ 
-Dfs.s3a.secret.key=SECRET_KEY_HERE /path/in/hdfs s3a:/BUCKET NAME 

Но ключ доступа и ключ sectet видны здесь, которые не являются безопасными. Есть ли способ предоставления учетных данных из файла. Я не хочу редактировать файл конфигурации, который является одним из методов, с которыми я столкнулся.

ответ

1

Последние (2.8 и) версии позволяют скрыть свои учетные данные в файле JCEKS; там есть документация на странице Hadoop s3.Таким образом: не нужно вообще ставить секреты в командной строке; вы просто разделить их по кластеру, а затем, в команде distcp, установите hadoop.security.credential.provider.path на пути, как jceks://[email protected]:9001/user/backup/s3.jceks

вентилятора: если вы работаете в EC2, то IAM учетные данные роли должны быть автоматически подобран из сети по умолчанию провайдеры учетных данных: после поиска параметров конфигурации & env vars он пытается получить конечную точку HTTP EC2, которая обслуживает учетные данные сеанса. Если этого не происходит, убедитесь, что com.amazonaws.auth.InstanceProfileCredentialsProvider находится в списке поставщиков учетных данных. Это немного медленнее, чем другие (и может быть дросселировано), поэтому лучше всего положить конец.

0

Amazon позволяет генерировать временные учетные данные, которые вы можете получить от http://169.254.169.254/latest/meta-data/iam/security-credentials/

вы можете прочитать from there

Приложение на экземпляре извлекает учетные данные безопасности, предоставленные роли из элемента метаданных экземпляра IAM/security-credentials/role-name. Приложению предоставляются разрешения для действий и ресурсов, которые вы определили для этой роли, через учетные данные безопасности, связанные с ролью. Эти учетные данные безопасности являются временными, и мы автоматически поворачиваем их. Мы делаем новые учетные данные доступными не менее чем за пять минут до истечения срока действия старых учетных данных.

Следующая команда извлекает учетные данные безопасности для роли IAM с именем s3access.

$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access 

Ниже приведен пример вывода.

{ 
    "Code" : "Success", 
    "LastUpdated" : "2012-04-26T16:39:16Z", 
    "Type" : "AWS-HMAC", 
    "AccessKeyId" : "AKIAIOSFODNN7EXAMPLE", 
    "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", 
    "Token" : "token", 
    "Expiration" : "2012-04-27T22:39:16Z" 
} 

Для приложений, AWS CLI и инструменты для Windows PowerShell команд, которые работают на экземпляре, вы не должны явно получить временные полномочия безопасности - SDKs AWS, AWS CLI и инструменты для ОС Windows PowerShell автоматически получает учетные данные из службы метаданных экземпляра EC2 и использует их. Чтобы сделать вызов за пределами экземпляра с использованием временных учетных данных безопасности (например, для проверки политик IAM), вы должны предоставить ключ доступа, секретный ключ и токен сеанса. Для получения дополнительной информации см. Using Temporary Security Credentials to Request Access to AWS Resources в Руководстве пользователя IAM.

+0

я не получил его от эта статья, вы можете уточнить, мой вопрос в том, есть ли способ, которым мы можем передать эти учетные данные через файл напрямую – Freeman

+0

ну, вы не можете, но вы можете использовать временный ключ - так что вам нужно будет прочитать временные ключи от URL-адреса и пройти их в командной строке –

1

Я также столкнулся с такой же ситуацией и получил временные полномочия от экземпляра matadata. (В случае, если вы используете верительных IAM пользователя, пожалуйста, обратите внимание, что временные учетные данные, упомянутые здесь IAM ролей, которые прикрепляются к EC2 сервер не человек, см http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)

Я нашел только указав учетные данные в hadoop distcp ЦМД не будет Работа. Вы также должны указать конфигурацию fs.s3a.aws.credentials.provider. (См http://hortonworks.github.io/hdp-aws/s3-security/index.html#using-temporary-session-credentials)

Final команда будет выглядеть, как показано ниже

hadoop distcp -Dfs.s3a.aws.credentials.provider="org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" -Dfs.s3a.access.key="{AccessKeyId}" -Dfs.s3a.secret.key="{SecretAccessKey}" -Dfs.s3a.session.token="{SessionToken}" s3a://bucket/prefix/file /path/on/hdfs 
+0

Прокомментировал это в своем ответе. Если вы работаете в EC2, вам не нужно объявлять учетные данные здесь, если вы не хотите, чтобы разные из ролей EC2 IAM. –

+0

@SteveLoughran Спасибо за ваш ответ. хм, я забыл упомянуть, что я запускал hadoop cmd из Airflow и использовал функцию предполагаемой роли IAM для управления безопасностью. – Fan