2016-12-19 33 views
0

在Hadoop環境中擁有多個AWS密鑰有什麼解決方法?我的hadoop工作將需要訪問兩個不同的S3存儲桶(兩個不同的密鑰)。試用「憑證」提供商,但看起來非常有限。它以小寫形式存儲所有密鑰,因此我不能在一項工作中使用「s3a」而在其他工作中使用「s3n」。例如:S3A,它會查找:在Hadoop環境中使用多個AWS密鑰

fs.s3a.access.key 
fs.s3a.secret.key 

而對於S3N:

fs.s3n.awsAccessKeyId 
fs.s3n.awsSecretAccessKey 

但如果我創建提供商, 「fs.s3n.awsAccessKeyId」,它存儲爲「fs.s3n。 awsaccesskeyid「,結果,在運行時它無法加載預期的密鑰。

作爲一種變通方法,我試圖產生兩個不同的憑據提供和傳遞:

--Dhadoop.security.credential.provider.path=key1,key2 

但它沒有工作togher既是按鍵具有fs.s3a.access.key & FS。 s3a.secrety.key對。

我不想使用-D選項傳遞訪問和密鑰,因爲它是可見的。有沒有更好的方法來處理這種情況?

+0

爲什麼你沒有一組允許訪問這兩個桶的IAM證書? – jarmod

+0

是的,即使它是交叉賬戶,你也應該能夠創建一個策略,允許從可以訪問它們的賬戶訪問這兩個桶。如果您在EC2上運行此操作,請使用ec2實例配置文件爲實例及其訪問策略指定憑證。 –

回答

1

如果您升級到Hadoop 2.8,則可以使用per-bucket configurations來解決此問題。在fs.s3a.bucket。$ BUCKETNAME一切跳線設置到配置爲FS的實例爲桶,覆蓋任何其他CONFIGS

fs.s3a.bucket.engineering.access.key=AAID.. fs.s3a.bucket.logs.access.key=AB14...

我們使用了很多的談話不同地區桶,加密, 其他事情。到目前爲止,效果很好。雖然I would say that

特殊例外:如果您在JCECKS文件中加密憑證祕密。文檔涵蓋了這一點。