- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
The Parameter Store Configuration support uses a bootstrap context to configure a default AWSSimpleSystemsManagement client, which uses a com.amazonaws.auth.DefaultAWSCredentialsProviderChain and com.amazonaws.regions.DefaultAwsRegionProviderChain
提供商链的文档:https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html
我希望避免使用环境变量或命令行属性,因为它们很可能会泄漏到产品中某处的日志中。我看到的最佳选择是使用 .properties 文件。根据第一个链接,由于模块是在引导上下文中加载的,所以我想“Spring”的方法是将这些属性包含在 bootstrap.properties 文件中(根据 spring-cloud 文档: https://cloud.spring.io/spring-cloud-static/spring-cloud.html#_the_bootstrap_application_context )
所以我的项目如下所示:
/src/main/resources/bootstrap.properties
aws.accessKeyId = SECRET
aws.secretKey = ALSOSECRET
pom.xml
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RC2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
...
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId>
<version>2.0.0.RC2</version>
</dependency>
</dependencies>
....
请注意,我还公开了 AWS_REGION 环境变量,这是要克服的第一个障碍。我正在运行 Java 8,并且可以复制从 Eclipse 和命令行 Maven 运行的以下行为。
启动时,我得到这个堆栈跟踪:
2018-06-11 13:20:57.092 INFO 2272 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@359f7cdf: startup date [Mon Jun 11 13:20:57 CDT 2018]; root of context hierarchy
2018-06-11 13:20:57.613 INFO 2272 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$459ef732] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.1.RELEASE)
2018-06-11 13:21:00.301 ERROR 2272 --- [ main] c.a.p.AwsParamStorePropertySourceLocator : Fail fast is set and there was an error reading configuration from AWS Parameter Store:
Unable to load AWS credentials from any provider in the chain
2018-06-11 13:21:00.308 ERROR 2272 --- [ main] o.s.boot.SpringApplication : Application run failed
com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain
at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:131) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1164) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:762) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:724) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513) ~[aws-java-sdk-core-1.11.251.jar:na]
at com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClient.doInvoke(AWSSimpleSystemsManagementClient.java:6573) ~[aws-java-sdk-ssm-1.11.251.jar:na]
at com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClient.invoke(AWSSimpleSystemsManagementClient.java:6549) ~[aws-java-sdk-ssm-1.11.251.jar:na]
at com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClient.executeGetParametersByPath(AWSSimpleSystemsManagementClient.java:4204) ~[aws-java-sdk-ssm-1.11.251.jar:na]
at com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClient.getParametersByPath(AWSSimpleSystemsManagementClient.java:4180) ~[aws-java-sdk-ssm-1.11.251.jar:na]
at org.springframework.cloud.aws.paramstore.AwsParamStorePropertySource.getParameters(AwsParamStorePropertySource.java:67) ~[spring-cloud-aws-parameter-store-config-2.0.0.RC2.jar:2.0.0.RC2]
at org.springframework.cloud.aws.paramstore.AwsParamStorePropertySource.init(AwsParamStorePropertySource.java:52) ~[spring-cloud-aws-parameter-store-config-2.0.0.RC2.jar:2.0.0.RC2]
at org.springframework.cloud.aws.paramstore.AwsParamStorePropertySourceLocator.create(AwsParamStorePropertySourceLocator.java:111) ~[spring-cloud-aws-parameter-store-config-2.0.0.RC2.jar:2.0.0.RC2]
at org.springframework.cloud.aws.paramstore.AwsParamStorePropertySourceLocator.locate(AwsParamStorePropertySourceLocator.java:94) ~[spring-cloud-aws-parameter-store-config-2.0.0.RC2.jar:2.0.0.RC2]
at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:94) ~[spring-cloud-context-2.0.0.RC2.jar:2.0.0.RC2]
at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:633) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:373) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
at com.company.app.App.main(App.java:10) [classes/:na]
我是否应该期望此模块能够看到 bootstrap.properties 中的属性?我还应该如何向引导上下文提供属性?
最佳答案
I'm hoping to avoid using environment variables or command-line properties, as there's a pretty good chance those will leak into logs somewhere in prod.
实际上,AWS 在这方面做得很好,可以为您处理大部分脏活。您担心的是,您的凭据将在日志中以开放的纯文本形式保存,无论是现在还是永远,并且您希望将您的凭据存储在由某种版本/存储库系统管理的文件中。 AWS 承认这是一个可能的选择,但实际上指出,由于涉及的工作量,它并不认为这是最佳解决方案。
https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html
You could have your developers store AWS credentials directly within the EC2 instance and allow applications in that instance to use those credentials. But developers would then have to manage the credentials and ensure that they securely pass the credentials to each instance and update each EC2 instance when it's time to rotate the credentials. That's a lot of additional work.
您可以将 AWS 配置为在部署应用程序时使用 IAM 角色为您的 EC2 实例提供临时凭证。这些角色仅限于您定义的访问权限,并会在短时间内(最多几个小时)后过期。
您发布的错误消息在正确配置的 EC2 实例中根本不会发生。要在本地测试环境或云端运行,您可以在 .aws/credentials 存储中提供凭证,而无需提供任何类型的凭证来访问您的 QA/PROD EC2 框,因为在环境变量之后才会检查 .aws/credentials 路径。
这会立即为您的安全和理智带来好处:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html
You do not have to distribute or embed long-term AWS security credentials with an application.
You can provide access to your AWS resources to users without having to define an AWS identity for them. Temporary credentials are the basis for roles and identity federation.
The temporary security credentials have a limited lifetime, so you do not have to rotate them or explicitly revoke them when they're no longer needed. After temporary security credentials expire, they cannot be reused. You can specify how long the credentials are valid, up to a maximum limit.
关于java - 如何通过 AWS Parameter Store Spring 属性源的 Java 属性公开 AWS 凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50803964/
有没有办法测试人工凭证以及我是否可以成功访问存储库?从命令行运行我无法查看是否使用了凭据以及来自带有 ?trace 的浏览器附加到 url 拒绝匿名用户访问。 最佳答案 您可以使用 Artifacto
我正在尝试运行将使用 npm publish 的 Jenkins 2 管道(Jenkinsfile)将包发布到本地 NPM 存储库。 为了做到这一点,我尝试在 Jenkinsfile 中使用以下阶段:
我正试图从我的 JavaScript 前端应用程序的 S3 中获取我的图像对象。 根据文档,这些是所需的步骤: import * as AWS from "aws-sdk"; AWS.config.u
我正在使用 IVONA SpeachCloud SDK(创建语音样本):https://github.com/IvonaSoftware/ivona-speechcloud-sdk-java/blob
我有一个问题:ACAccountStore 是否会自动更新 Twitter token ?我需要在我的服务器中使用 token 来自动发布。请分享您的经验。 最佳答案 如果您像这样使用 SLReque
我正在为为 CMS 创建的商店/购物车创建一个 PayPal 网关。完成后,网关将可供其他人使用。在我的开发者帐户中创建的 API 凭据(客户端 ID 和 secret )是否保留在应用程序中,还是每
我在 Magnto 1.9 中启用了 paypal 现在我想在我的 Observer 中调用另一个 paypal API,为此我需要 paypal 用户、密码和签名,我在启用 paypal 时已经保存
有没有办法用 TortoiseGit 保存 GITHUB 的用户凭证? 每当我进行推/pull 时,它都会提示我以下对话框。 我想将我的用户凭据信息保存在某个地方,就像我使用 TortoiseSVN
我有一个 Jenkins 工作,它应该构建一个 Jar 并将其添加到 Nexus。我已经配置了构建后操作以将 Maven Artifact 部署到 nexus 存储库。 问题是,nexus 需要用户名
在我之前的 Jenkinsfile 中,我曾经有过这个: withCredentials([[ $class: 'AmazonWebServicesCredentialsBinding',
我的证书有问题,我什至不确定我是否选择了正确的方法...长话短说..我需要我的 Jenkins 工作在构建过程中从需要使用证书身份验证的网站下载一些东西 - 我得到了 .p12 和 .cert 证书。
我在使用 WWW:Mechanize 的凭据代理访问和网络抓取需要 NTLM 身份验证的站点时遇到问题。我在网上读到凭证代理需要 4 个参数:基址、领域、用户名和密码。我不确定用于基础或领域的内容,因
我正在使用 AWS Java SDK 并尝试运行一些测试;得到: 无法从类路径上的/AwsCredentials.properties 文件加载 AWS 凭证 根据 AWS 规范,凭证文件 @ ~/.
我已将我的 MongoDB 设置为仅接受通过 SSL 的连接。 Mongo 具有我使用以下命令生成的证书的句柄 openssl req -newkey rsa:2048 -new -x509 -day
如何让 gspread 使用我的 oauth 凭据?我的 http 响应 gspread.httpsession.HTTPError 出现错误:(谁能告诉我我的代码有什么问题吗? import dat
我有一大桶 S3 文件要放在 HDFS 上。考虑到涉及的文件数量,我首选的解决方案是使用“分布式副本”。但是由于某种原因,我无法让 hadoop distcp 获取我的 Amazon S3 凭据。我使
我在 Magnto 1.9 中启用了 paypal现在我想在我的 Observer 中调用另一个 paypal API,为此我需要 paypal 用户、密码和签名,我在启用 paypal 时已经保存了
作为构建 docker 容器的过程的一部分,我需要从 s3 存储桶中提取一些文件,但我不断收到 fatal error: Unable to locate credentials 即使现在我正在设置凭
应用 Spring 中的简单 REST API 注册服务,在发送正确的 POST 请求后在数据库中创建新用户,并且 Amazon SES 发送一封包含注册链接的电子邮件以进行验证。 问题 在我的操作系
背景 我使用 google-api-python-client django_sample 获得了 Google API 的 access_token . 为了离线访问,我添加了 FLOW.param
我是一名优秀的程序员,十分优秀!