2016-07-22 22 views
0

を私は、コマンドHDFSはDistcp S3に - S3バケットにHDFSからファイルをコピーするためのアクセスキー

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

を使用しかし、アクセスキーとsectetキーは、セキュリティで保護されていないここに表示されます。 ファイルから資格情報を提供する方法はありますか。 私が遭遇した方法の一つである設定ファイルを編集したくないです。

答えて

1

以下のようになります(http://hortonworks.github.io/hdp-aws/s3-security/index.html#using-temporary-session-credentialsを参照してください)。そこにはHadoop s3のページに関するドキュメントがあります。そのようにすれば、コマンドラインに秘密を入れなくても済む。クラスタ全体で共有し、distcpコマンドでhadoop.security.credential.provider.pathをパスに設定します。jceks://[email protected]:9001/user/backup/s3.jceks

ファン:ECAMで実行している場合、IAMロールの資格情報は、デフォルトチェーンから自動的に選択されます。資格プロバイダ:configオプション& env varsを探した後、セッション資格情報を提供するEC2 httpエンドポイントのGETを試行します。それが起こっていない場合は、com.amazonaws.auth.InstanceProfileCredentialsProviderが資格プロバイダのリストにあることを確認してください。それは他のものより少し遅いです(そして抑制することができます)ので、終わり近くに置くのが最適です。

0

Amazonはインスタンス上のアプリケーションがインスタンスのメタデータ項目IAMから役割によって提供されるセキュリティ資格情報を取得しfrom there

を読むことができますがhttp://169.254.169.254/latest/meta-data/iam/security-credentials/

から取得することができ、一時的な認証情報を生成することができます/ security-credentials/role-name。アプリケーションには、ロールに関連付けられたセキュリティ資格情報を使用して、ロールに対して定義したアクションおよびリソースのアクセス許可が付与されます。これらのセキュリティ資格は一時的なもので、自動的にそれらをローテーションします。古い資格情報の有効期限の少なくとも5分前に新しい資格情報を利用できるようにします。

次のコマンドは、s3accessという名前のIAMロールのセキュリティ資格情報を取得します。

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

次は出力例です。 AWS SDKに、AWS CLI、およびWindows用のツール -

アプリケーションについて
{ 
    "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用のツールは、インスタンス上でその実行コマンドは、明示的に一時的なセキュリティ証明書を取得する必要はありませんPowerShellは自動的にEC2インスタンスメタデータサービスから資格情報を取得し、使用します。一時的なセキュリティ資格情報(たとえば、IAMポリシーをテストする)を使用してインスタンス外で呼び出しを行うには、アクセスキー、秘密キー、およびセッショントークンを指定する必要があります。詳細については、「IAMユーザーガイド」のUsing Temporary Security Credentials to Request Access to AWS Resourcesを参照してください。

+0

私はこの記事からそれを得ることはできませんでした、私の質問は直接ファイルを介してこれらの資格情報を渡すことができる方法はありますか? – Freeman

+0

あなたは一時的な鍵を使用することはできますが、 URLからテンポラリキーを取得し、コマンドラインにそれらを渡す –

1

私も同じ状況に直面し、その後は、matadataインスタンスからの一時的な資格情報を得ました。

を(あなたがIAMユーザーの資格情報を使用している場合には、http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.htmlを参照し、人間ではないEC2サーバーに接続され、ここで言及した一時的な資格情報がIAMの役割であることに注意してください)私はhadoop distcp CMDに信任状をしません指定しました作業。 また、設定fs.s3a.aws.credentials.providerを指定する必要があります。

最後のコマンドは、最近の(2.8+)のバージョンを使用すると、JCEKSファイルに資格情報を非表示にしてみましょう

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うーん、Airflowからhadoop cmdを実行していて、セキュリティ管理のためにIAMの想定役割機能を使用していたことは忘れていました。 – Fan

関連する問題