我有一个Java应用程序,它在S3中添加文件。此应用程序正在EC2实例中运行。
我们正在使用IAM角色。因此,我们已将所需的IAM角色附加到此EC2实例。
那里的一切都很完美。
但我们也想在我的笔记本电脑上本地测试这个应用程序。每当我需要测试时,很难每次都将应用程序上传到EC2。
我们如何在不更改代码的情况下动态切换,以便我可以在笔记本电脑上测试它(使用accesskey和secretKey),并在EC2中使用IAM角色?
AWS SDK使用凭据提供程序链来定位凭据。订单因语言而异,但通常会检查:
- 环境变量
- 本地配置文件
- EC2实例元数据
因此,如果要在本地运行应用程序,可以提供凭据文件,也可以在环境变量中设置凭据。代码将自动定位凭据,就像在EC2实例上一样。
参考文献:
- 在AWS SDK for Java中提供AWS凭据
- .Net配置AWS凭据
- AWS Python SDK(boto3)
- PHP凭据供应链
- (其他语言的SDK也类似)
您可以通过以下方式提供自己的凭证搜索顺序:https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProviderChain.html
因此,在您的情况下,订单将是:
- InstanceProfileCredentialsProvider或EC2ContainerCredentialsProviderWrapper
- AWSStaticCredentialsProvider或EnvironmentVariableCredentialsProvider
将您的所有提供者添加到提供者链构造函数中,然后将其传递给AWS客户端。
如果您使用的是类似docker的实例,那么将环境变量设置为docker运行会很容易。
docker run --env-file=FILE
或
docker run -it --rm -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_KEY
参考编号:https://hub.docker.com/r/pmcjury/aws-cli/