【问题标题】:Python boto3 get cluster credentials not workingPython boto3获取集群凭据不起作用
【发布时间】:2021-06-19 15:37:19
【问题描述】:

我正在使用 boto3 使用 AWS IAM 用户帐户详细信息检索临时 DbPassword 以进行红移。生成的密码不正确,连接 Redshift 时得到。

无效操作:用户的 IAM 身份验证失败

但是,如果我删除 AWS_KEY 和 AWS_SECRET。它从 aws 配置文件中读取,生成的 DbPassword 是正确的并且可以正常工作。我想在不使用 Aws 配置文件的情况下生成 DbPassword。因为我需要在无法创建此配置文件的其他服务器上提取 DbPassword。

import json 
session = boto3.Session(region_name='region_name',
                       aws_access_key_id='AWS_KEY',
                       aws_secret_access_key='AWS_SECRET')
client = session.client('redshift')

creds = client.get_cluster_credentials(
        DbUser='user',
        DbName='db',
        ClusterIdentifier='test',
        DurationSeconds=3600,
        AutoCreate=True,
        DbGroups=['group'],
)

creds['DbPassword']

【问题讨论】:

    标签: amazon-web-services amazon-redshift boto boto3


    【解决方案1】:

    将 AWS 凭证放在脚本/程序中被认为是不好的做法。这是因为凭据可能会意外存储在源代码存储库中并“在野外”泄露。这也使得轮换凭据变得困难。

    您提供凭据的方式不会影响 API 调用是否有效。

    当您没有在代码中嵌入凭据时,您的代码可以工作这一事实表明,存储在您的 ~.aws/credentials 文件中的凭据具有正确的权限,而您插入的凭据代码没有必要的权限。

    因此,您应该比较凭据并确定您真正希望使用的凭据。

    我建议您为此应用程序创建一个特定的 IAM 用户,并将与该用户关联的权限限制在必要的范围内。这样,如果有人获得了凭据,他们的行为就会受到限制。

    更重要的是,最好通过CREATE USER 命令在 Amazon Redshift 中创建特定用户。然后,将 Redshift 用户的密码分发给每台计算机(因为无论如何他们都需要 AWS 凭证,所以为什么不给每台计算机提供密码呢?)。

    或者,使用AWS Secrets Manager 将密码安全地提供给其他计算机。因此,您将调用 Secrets Manager 而不是 get_cluster_credentials() API 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多