在本地测试使用 IAM 角色的应用程序
Testing application locally that uses IAM Role
我有一个 Java 应用程序可以在 S3 中添加文件。此应用程序在 EC2 实例中 运行。
我们正在使用 IAM 角色。因此,我们已将所需的 IAM 角色附加到此 EC2 实例。
那里的一切都很完美。
但我们也想在我的笔记本电脑上本地测试该应用程序。每当我需要测试它时,很难每次都将应用程序上传到 EC2。
我们如何在不更改代码的情况下动态切换,以便我可以在我的笔记本电脑上测试它(使用 accesskey 和 secretKey)以及在 EC2 中使用 IAM 角色?
AWS 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://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProviderChain.html
所以在你的情况下,顺序是:
- InstanceProfileCredentialsProvider 或 EC2ContainerCredentialsProviderWrapper
- AWSStaticCredentialsProvider 或 EnvironmentVariableCredentialsProvider。
将您的所有提供商添加到提供商链构造函数,然后将其传递给 AWS 客户端。
我有一个 Java 应用程序可以在 S3 中添加文件。此应用程序在 EC2 实例中 运行。
我们正在使用 IAM 角色。因此,我们已将所需的 IAM 角色附加到此 EC2 实例。
那里的一切都很完美。
但我们也想在我的笔记本电脑上本地测试该应用程序。每当我需要测试它时,很难每次都将应用程序上传到 EC2。
我们如何在不更改代码的情况下动态切换,以便我可以在我的笔记本电脑上测试它(使用 accesskey 和 secretKey)以及在 EC2 中使用 IAM 角色?
AWS 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://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProviderChain.html
所以在你的情况下,顺序是:
- InstanceProfileCredentialsProvider 或 EC2ContainerCredentialsProviderWrapper
- AWSStaticCredentialsProvider 或 EnvironmentVariableCredentialsProvider。
将您的所有提供商添加到提供商链构造函数,然后将其传递给 AWS 客户端。