【问题标题】:AWS boto3 user vs roleAWS boto3 用户与角色
【发布时间】:2021-11-19 07:29:30
【问题描述】:

我正在尝试遵循最佳实践,但我不清楚文档。我有一个在本地运行的 python 脚本,它将一些文件从我的本地驱动器移动到 S3 进行处理。 Lambda 从那里拿起它,然后做剩下的事情。到目前为止,我为此流程设置了一个 AWS 用户,并将其连接到一个只能访问所需资源的“策略”。

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

对 AWS STS AssumeRole 的调用必须使用访问密钥 ID 进行签名 和现有 IAM 用户的秘密访问密钥或使用现有临时 凭据,例如来自其他角色的凭据。 (您不能调用 AssumeRole 使用 root 帐户的访问密钥。)凭据可以在 环境变量或配置文件中,将被发现 由 boto3.client() 函数自动执行。

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

【问题讨论】:

标签: amazon-web-services docker boto3 amazon-iam aws-sts


【解决方案1】:

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

对于在 AWS 中运行的服务(EC2、Lambda、ECS),始终可以选择一个 IAM 角色,该角色将由您的服务承担。这样,您的应用程序将始终获得与 IAM 角色对应的临时凭证,并且您永远不应使用 AWS Access Key Id 和 Secret。

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

  • 遵循最低权限的主体。创建仅提供对绝对必需资源的访问权限的策略。
  • 创建用户(仅限编程访问)并添加策略。将此用户的 AWS 访问密钥 ID 和密钥用于您的 Docker 容器。
  • 确保定期轮换 AWS 凭证。
  • 确保机密未在源代码控制中提交,最好使用机密文件或 Vault 系统而不是环境变量。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多