首页 > 解决方案 > 使用 Aurora Serverless Data API 时传递 IAM 凭证?

问题描述

我试图弄清楚在使用 AWS 数据 API 与 Aurora Serverless 数据库交互时如何传递静态 IAM AWS 凭证。

我正在使用 AWS Python Boto 库,并从这样的表中读取数据(默认情况下,它使用我的 ~/.aws/credentials 文件中定义的默认 IAM 用户的凭证):

rds_client = boto3.client('rds-data')
rds_client.execute_statement(
        secretArn=self.db_credentials_secrets_store_arn,
        database=self.database_name,
        resourceArn=self.db_cluster_arn,
        sql='SELECT * FROM TestTable;',
        parameters=[])

这成功了。

但我希望能够将 AWS 访问密钥和秘密密钥作为参数传递给 execute_statement 调用,例如:

rds_client.execute_statement(
        accessKey='XXX',
        secretKey='YYY',
        secretArn=self.db_credentials_secrets_store_arn,
        database=self.database_name,
        resourceArn=self.db_cluster_arn,
        sql='SELECT * FROM TestTable;',
        parameters=[])

但这不起作用。

关于如何实现这一目标的任何想法?

谢谢!

标签: amazon-web-servicesamazon-rdsamazon-iamaws-aurora-serverlessaws-rds-data-service

解决方案


为了实现这一点,您需要创建一个获取访问密钥和密钥的新函数,为该用户创建一个客户端,然后进行调用。

def execute_statement_with_iam_user(accessKey, secretKey):
    rds_client = boto3.client(
        'rds',
        aws_access_key_id=accessKey,
        aws_secret_access_key=secretKey
    )
    rds_client.execute_statement(
            secretArn=self.db_credentials_secrets_store_arn,
            database=self.database_name,
            resourceArn=self.db_cluster_arn,
            sql='SELECT * FROM TestTable;',
            parameters=[])

execute_statement_with_iam_user(accessKey, secretkey)

仅供参考,AWS 不建议像这样对您的凭证进行硬编码。您应该做的是担任临时会话的角色。为此,您需要查看sts 客户端并为假设创建角色


推荐阅读