2015-07-22 41 views
1

我的EMR作業之一依賴於分別從fs.s3.awsAccessKeyIdfs.s3.awsSecretAccessKey屬性獲取AWS訪問密鑰ID和祕密訪問密鑰。但是,當我使用默認的EC2和EMR角色運行EMR羣集時,這些屬性不存在。fs.s3.awsAccessKeyId和fs.s3.awsSecretAccessKey未設置爲EMR默認IAM角色

如何在使用默認角色運行EMR羣集時看到這些訪問密鑰,看到在此時使用IAM角色是需求?我能做到的一個方法是自己明確地設置這些屬性,但我想看看我是否錯過了其他的東西。

回答

2

使用角色而不是硬編碼密鑰是最佳實踐(http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html)。 EMR上的一個例子是,基礎Hadoop FS調用使用分配給EC2實例的角色來生成臨時安全證書。

您的應用程序可以構建爲執行相同的操作(http://docs.aws.amazon.com/IAM/latest/UserGuide/roles-usingrole-ec2instance.html),以便它從指定的角色獲取臨時訪問密鑰和帶有令牌的祕密,而不是從固定配置中讀取該令牌。

+0

我遇到的問題是我的EMR作業使用AmazonS3EncryptionClient,我需要用'AWSCredentials'對象初始化它,否則它會發出匿名請求。我還沒有找到一種方法來初始化只有IAM角色的'AWSCredentials',並且由於它是角色而不是用戶,所以我無法爲它生成訪問密鑰/密鑰。 –

+0

您可以使用憑證提供程序使用其他構造函數嗎?請參閱http://docs.aws.amazon.com/AmazonS3/latest/dev/encrypt-client-side-asymmetric-master-key.html和http://docs.aws.amazon.com/AWSSdkDocsJava/latest// DeveloperGuide/credentials.html – ChristopherB

+0

它看起來像我可以使用'DefaultAwsCredentialsProviderChain',因爲它似乎使用來自EC2的實例配置文件憑證。使用'InstanceProfileCredentialsProvider'也可以。 –