在本地测试使用 IAM 角色的应用程序

Testing application locally that uses IAM Role

我有一个 Java 应用程序可以在 S3 中添加文件。此应用程序在 EC2 实例中 运行。

我们正在使用 IAM 角色。因此,我们已将所需的 IAM 角色附加到此 EC2 实例。

那里的一切都很完美。

但我们也想在我的笔记本电脑上本地测试该应用程序。每当我需要测试它时,很难每次都将应用程序上传到 EC2。

我们如何在不更改代码的情况下动态切换,以便我可以在我的笔记本电脑上测试它(使用 accesskey 和 secretKey)以及在 EC2 中使用 IAM 角色?

A​​WS SDK 使用 Credentials Provider Chain 来定位凭证。顺序因语言而异,但通常会检查:

  • 环境变量
  • 本地配置文件
  • EC2 实例元数据

因此,如果您想在本地 运行 应用程序,您可以提供 凭据文件 或在 环境变量 。代码将自动定位凭据,就像在 EC2 实例上一样。

参考文献:

如果您正在使用 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/

您可以使用以下方式提供自己的凭据搜索顺序: https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProviderChain.html

所以在你的情况下,顺序是:

  1. InstanceProfileCredentialsProvider 或 EC2ContainerCredentialsProviderWrapper
  2. AWSStaticCredentialsProvider 或 EnvironmentVariableCredentialsProvider。

将您的所有提供商添加到提供商链构造函数,然后将其传递给 AWS 客户端。