更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?

Posted

技术标签:

【中文标题】更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?【英文标题】:How to update AWS credentials in Elastic Beanstalk environment variables when changing IAM user keys? 【发布时间】:2019-06-13 16:58:15 【问题描述】:

如何在 Elastic Beanstalk 应用程序的环境变量中更新 IAM 安全凭证?

在我的应用程序中,向 AWS SQS 队列发送消息时出现以下错误。 403 (Forbidden) bundle.js:27819 Error: The security token included in the request is invalid.

我更改了我的 IAM 凭据,因此我假设我需要更新我的 Elastic Beanstalk 应用程序中的环境变量,并且我假设这就是上述错误的原因。

我尝试通过运行aws configure 来更新我的 Elastic Beanstalk 应用程序的环境变量中的安全凭证。如果我理解正确,它已经更新了我的 .aws 文件夹中的凭证文件。但我不认为它更新了我的 AWS Elastic Beanstalk 应用程序中环境变量中的安全凭证。如何做到这一点?

谢谢!

【问题讨论】:

【参考方案1】:

我尝试通过运行 aws configure 来更新我的 Elastic Beanstalk 应用程序的环境变量中的安全凭证

这是不正确的假设,aws configure 仅更新 .aws 内容,与 ElasticBeanstalk 环境变量无关。

如果需要更新EB环境变量,则需要使用该命令

eb setenv key=value

但是,这是一个巨大的但是,永远不要将您的凭据存储在远程实例等地方。这不是您应该为您的应用程序授予权限的方式。当然,您可以使用环境变量来做到这一点,但这是一个巨大的安全风险。您应该创建适当的角色并将其附加到您的 EB 环境。这样您就不需要管理您的凭据并为您的应用程序提供所需的所有权限。

【讨论】:

谢谢@Matus。你能解释一下创建一个合适的role 来存储security credentials 是什么意思吗?我的理解是roles 是要选择的预设,而不是可以存储security credentials 的某个地方。你如何将security credentials 存储在roles 中? @AgentZebra 假设您希望您的用户有权访问 S3。你如何做到这一点?您创建允许该操作的 IAM 策略并将其附加到该用户(或用户所属的组)。安全凭证仅用于识别用户,而不是授予他们访问权限。这些是通过 IAM 政策提供的。现在,您可以创建具有相同 IAM 策略的角色,而不是用户。承担该角色的任何服务都将具有与上述用户相同的权限。重要的是基础 IAM 策略,而不是用户或角色。 谢谢马图斯,我明白了!出于某种原因,单击RolesCreate Role 后,SQS 不在要选择的选项列表中——我肯定需要选择 SQS 吗?还是我应该在那里选择 EBS?如果 SQS 不能作为为其创建角色的选项,在这种情况下我们该怎么办? (尝试从 EBS 连接到 SQS 时发生错误。我的用户附加到的组已经拥有完整的 SQS 访问权限。 @AgentZebra 当您创建 EB 环境时,应该在角色下使用它创建实例配置文件(类似于aws-elasticbeanstalk-ec2-role),该配置文件附加到您在 EB 环境中运行的 ec2 实例。您可以修改此角色并向其添加类似AmazonSQSFullAccess 的权限。虽然这可行,但您应该更加细化,并将上述权限收紧到仅针对您的 EB EC2 实例需要的特定资源。

以上是关于更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 terraform 创建具有访问权限和密钥的 AWS IAM 服务账户

AWS IAM用户上传SSH公有密钥

AWS Elastic Beanstalk:如何更改节点命令?在最近的更新中删除了容器选项?

通过 terraform 创建 IAM 用户并在 S3 存储桶中上传密钥和访问密钥

AWS IAM:如何使用全局条件键创建条件

如何在 Android 上使用 IAM 或 Cognito Pool 作为身份验证方法而不是 API 密钥