AWS boto3 用户与角色

AWS boto3 user vs role

我正在尝试遵循最佳做法,但我不清楚文档。我在本地有一个 python 脚本 运行,它将一些文件从我的本地驱动器移动到 S3 进行处理。 Lambda 从那里获取它并完成其余的工作。到目前为止,我为此过程设置了一个 AWS 用户,并将其连接到只能访问所需资源的“策略”。

下一步是将我的脚本移动到本地服务器中的 docker 容器中。但我认为最佳做法是使用具有策略的角色,而不是具有策略的用户。但是,according to this documentation...为了 AssumeRole...我必须先以用户身份登录。

The calls to AWS STS AssumeRole must be signed with the access key ID and secret access key of an existing IAM user or by using existing temporary credentials such as those from another role. (You cannot call AssumeRole with the access key for the root account.) The credentials can be in environment variables or in a configuration file and will be discovered automatically by the boto3.client() function.

所以无论如何,我都需要将我的用户凭据嵌入到我的 docker 图像中(或者至少是一个单独的机密文件) 如果是这样的话,那么在用户和策略之间添加一个“角色”似乎是完全无用和多余的。谁能确认或更正一下?

角色和策略适用于 AWS 环境中的服务 运行。对于您定义的角色,Trust Policy. The Trust Policy defines what principal(用户、角色、AWS 服务等)可以承担它。您还可以定义假定它必须访问 AWS 服务的委托人的权限。

对于 AWS 内部的服务 运行(EC2、Lambda、ECS),始终可以 select 一个 IAM 角色,该角色将由您的服务承担。这样,您的应用程序将始终获得与 IAM 角色相对应的临时凭证,您永远不应使用 AWS 访问密钥 ID 和密钥。

但是,这对于本地或 AWS 环境之外的服务 运行 是不可能的。对于本地的 Docker 容器 运行,唯一真正的选择是创建一个访问密钥 ID 和秘密并将其复制到那里。您仍然可以采取一些措施来确保您的帐户安全:

  • 遵循最低权限原则。创建仅提供对绝对必需资源的访问权限的策略。
  • 创建用户(仅限编程访问)并添加策略。将此用户的 AWS 访问密钥 ID 和密钥用于您的 Docker 容器。
  • 确保定期轮换 AWS 凭证。
  • 确保机密未在源代码管理中提交,与环境变量相比,更喜欢机密文件或 Vault 系统。