【问题标题】:How not to hard code Boto3 client credentials in to Python3 / Kivy script如何不将 Boto3 客户端凭据硬编码到 Python3/Kivy 脚本中
【发布时间】:2019-04-25 14:26:54
【问题描述】:

我正在尝试隐藏位于 kivy 应用程序 (python3) 中的 boto3 客户端的凭据。 boto3 被 SecretsManager 用于保存 RDS 数据库访问的其他凭据。

    client = session.client(
        service_name='secretsmanager',
        region_name=region_name,
        aws_access_key_id='AK########.....'

我不想硬编码我的访问密钥、秘密等

我考虑过为这个客户端分配一个特定的IAM 角色,这在理论上会给我 boto3 所需的角色/访问权限,但我不知道该怎么做。

我也使用 cognito 进行登录(auth);我可以建立一个附加到这些用户的组,然后通过这个(我认为这可行)获得对 boto3 客户端的凭据/访问权限。

有没有更好的解决方案,还是我的工作流程全错了?!

非常感谢!

【问题讨论】:

  • 如果您的客户端在 EC2(或 Lambda 或 ECS)上运行,那么使用 IAM 角色启动计算是很简单的,这将允许 boto3 SDK 无缝检索凭证。
  • 不,它没有。 Kivy 是适用于 android 和 ios 的 python 框架
  • 移动设备上的 Python,谁知道?典型的移动模式是使用 Amplify 或 Cognito。因为您使用的是 Python(而不是 JS、Swift 或 Java),所以您可能不得不使用 Cognito,假设您不想构建自己的服务器端代码来出售凭证或代理您对 AWS 的访问资源。

标签: python-3.x amazon-web-services kivy boto3 amazon-iam


【解决方案1】:

硬编码您的访问密钥 ID 和秘密访问密钥的替代方法是使用 Amazon Cognito 身份池,它会生成具有一组权限的角色。我建议您查看 Boto3 中的 GetIdGetCredentialsForIdentity API 调用。

【讨论】:

  • 这是我想做的。我将阅读并测试一些代码。请问我是不是卡住了?
  • 当然。你可以问一个新的问题,并让我知道。
  • 我可以 GetID 和 GetCredentialsForIdentity 获取我为身份检索的 IdentityID。返回的访问密钥和密钥保留GetSecretValue operation: The security token included in the request is invalid.。该角色的权限与在硬编码访问密钥/秒密钥时具有访问权限的另一个 IAM 用户的权限完全相同
【解决方案2】:

根据docs,有多种方法可以做到这一点,您可以从环境变量、文件、共享文件配置(.aws/credentials 文件...)中读取。

我建议使用来自vault 的秘密来获取这些密钥。

如果您正在寻找一种快速的方法,那么在主机内部使用共享凭据(第 4 项)将不是什么大问题 (IMO)。

如果出现任何问题,您只需禁用这些凭据并生成一个新凭据即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多