将AWS凭证包含在JAR文件中

时间:2017-03-08 22:10:15

标签: java eclipse amazon-web-services jar

我创建了一个程序的JAR可执行文件,该程序使用AWS与DynamoDB数据库进行通信。我记得通过Eclipse设置我的凭据,以便我可以访问数据库,但这似乎没有转移到JAR文件,因为这些凭据保存在我的计算机上,并且不会与JAR打包在一起。我注意到JAR实际上可以访问我用来创建它的计算机上的数据库,但是在任何其他计算机上,任何需要程序访问数据库的任务都会显示错误消息“错误扫描表:无法加载来自链中任何提供商的AWS凭证。“

我应该如何在应用中包含凭据,以确保运行JAR的任何人都可以访问数据库?

编辑:如果它有所作为,我认为我最初设置凭据的方式是在Eclipse中通过AWS>偏好>配置文件配置。

3 个答案:

答案 0 :(得分:2)

根据您发布的内容,我看到了一些选项:

  1. 创建一个AWS用户,该用户属于" Programatic Access"为将要运行Jar的每个用户键入。然后,用户需要使用您提供的凭据创建〜/ .aws /凭证。这是一个半手动步骤,但它允许您关闭特定用户。
  2. 假设您有一个shell文件来启动Jar文件,请创建环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY并将其导出以供用户运行。
  3. 如果这是一个真正的原始Jar,那么在你的main()(或者你知道在调用AWS中的任何东西之前调用的其他方法)执行System.setProperty("aws.accessKeyId", "youraccesskey")System.setProperty("aws.secretKey", "yoursecretkey")来设置这些作为系统属性。
  4. 最后两条建议非常危险。您今天可能会信任您的用户,但当其中一个用户不再信任时会发生什么?第一个选项允许您禁用单个用户。

答案 1 :(得分:1)

我不建议在JAR中使用硬编码凭据,但如果你真的想要它,有几种方法。

创建客户端时,您可以使用.withCredentials()传递密钥和密钥。例如:

BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key");
AmazonDynamoDBClient dbClient = AmazonDynamoDBClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                        .build();

如果要使其全局化并让每个客户端自动使用它,您可以在使用任何AWS代码之前设置这些Java属性:

System.setProperty("aws.accessKeyId", "access_key_id");
System.setProperty("aws.secretKey", "secret_key");

有关详细信息,请参阅:

http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html

答案 2 :(得分:1)

您可以通过以下方式编程创建“AWSCredentials”对象:

AWSCredentials credentials = new AWSCredentials() {
  public String getAWSSecretKey() { return "your secret key here"; }
  public String getAWSAccessKeyId() { return "your access id here"; }
};
AmazonSimpleDB simpleDb = new AmazonSimpleDBClient(credentials); 
AmazonS3Client = new AmazonS3Client(credentials); 
//and so on...