You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以联邦用户身份通过Lambda查询AWS Redshift Serverless及Glue数据目录

解决Lambda中以联邦用户身份查询AWS Glue Data Catalog的问题

问题1:Lambda中联邦用户连接方式

查询Redshift Serverless关联的Glue Data Catalog,依然使用Redshift Data API(即boto3的redshift-data客户端)即可,无需额外创建联邦用户。Lambda的执行角色本身就是IAM身份,可通过Redshift的IAM身份验证机制直接访问,核心是做好权限配置而非更换连接方式。

问题2:授权时提示"IAMR:lambda-role不存在"的解决

该错误是因为Redshift无法识别单纯的角色名格式,正确的IAM身份标识符需要使用角色的完整ARN,而非仅角色名。Redshift通过ARN唯一映射IAM角色身份,仅填角色名系统无法定位到对应的IAM实体。

问题3:修正官方授权语句

将授权语句中的角色名替换为Lambda执行角色的完整ARN,示例如下:

GRANT USAGE ON DATABASE awsdatacatalog TO "IAMR:arn:aws:iam::123456789012:role/your-lambda-role-name";
-- 若需查询具体表,需补充表权限
GRANT SELECT ON TABLE awsdatacatalog.your_schema.your_table TO "IAMR:arn:aws:iam::123456789012:role/your-lambda-role-name";

完整配置步骤

  1. Lambda执行角色权限配置

    • 添加redshift-data:ExecuteStatement和redshift-data:GetStatementResult权限
    • 添加Glue Data Catalog相关权限:glue:GetDatabase、glue:GetTable、glue:BatchGetPartition(根据查询需求调整)
    • 确保角色信任关系允许lambda.amazonaws.com调用
  2. Redshift Serverless工作组配置

    • 启用IAM身份验证
    • 确保工作组的权限策略允许该Lambda角色访问
  3. Lambda代码示例

import boto3

def lambda_handler(event, context):
    redshift_client = boto3.client('redshift-data')
    exec_response = redshift_client.execute_statement(
        Database='awsdatacatalog',
        WorkgroupName='your-workgroup-name',
        Sql='SELECT * FROM your_schema.your_table LIMIT 10;'
    )
    
    # 获取查询结果
    result = redshift_client.get_statement_result(Id=exec_response['Id'])
    print(result['Records'])
    return {
        'statusCode': 200,
        'records': result['Records']
    }

内容的提问来源于stack exchange,提问作者bytebridger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:53:14