2016-07-22 59 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後,它會嘗試提供會話憑證的EC2 http端點的GET。如果沒有發生,請確保com.amazonaws.auth.InstanceProfileCredentialsProvider位於憑證提供程序列表中。它比其他的要慢(並且可能會受到限制),所以最好放在接近尾聲的位置。

0

亞馬遜允許生成,您可以從http://169.254.169.254/latest/meta-data/iam/security-credentials/

檢索臨時憑證,你可以閱讀from there

對實例的應用檢索由從實例元數據項IAM角色提供的安全證書/ security-credentials/role-name。通過與角色關聯的安全證書,該應用程序被授予您爲角色定義的操作和資源的權限。這些安全證書是臨時的,我們會自動進行旋轉。我們在舊憑證到期前至少五分鐘提供新的憑證。

以下命令檢索名爲s3access的IAM角色的安全憑證。

$ 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命令的實例來看,你不必明確的將臨時安全證書 - 在AWS的SDK,AWS CLI,和Windows工具PowerShell自動從EC2實例元數據服務獲取憑證並使用它們。要使用臨時安全證書在實例外撥打電話(例如,測試IAM策略),您必須提供訪問密鑰,密鑰和會話令牌。有關更多信息,請參閱IAM用戶指南中的Using Temporary Security Credentials to Request Access to AWS Resources

+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 cmd中指定憑證不會工作。 您還必須指定配置fs.s3a.aws.credentials.provider。 (參見http://hortonworks.github.io/hdp-aws/s3-security/index.html#using-temporary-session-credentials

最後的命令看起來像下面

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