使用Steampipe查询AWS S3时,如何忽略无权限Bucket的查询异常?
解决Steampipe查询AWS S3 Bucket时忽略无权限资源的问题
你的问题出在之前的PL/pgSQL函数是一次性执行整个SELECT * FROM aws_s3_bucket查询,只要其中任意一个Bucket触发权限异常,整个查询就会终止并进入EXCEPTION块返回NULL,所以没有任何结果返回。
要实现忽略单个无权限Bucket、返回可正常查询结果的需求,需要逐行循环处理每个Bucket,捕获单个Bucket的异常并跳过,具体实现如下:
CREATE OR REPLACE FUNCTION get_accessible_s3_buckets() RETURNS SETOF aws_s3_bucket AS $BODY$ DECLARE rec aws_s3_bucket%ROWTYPE; BEGIN -- 遍历所有Bucket记录 FOR rec IN SELECT * FROM aws_s3_bucket LOOP BEGIN -- 尝试返回当前Bucket记录 RETURN NEXT rec; EXCEPTION -- 捕获任何异常,直接跳过当前Bucket WHEN OTHERS THEN CONTINUE; END; END LOOP; RETURN; END $BODY$ LANGUAGE plpgsql;
使用方法
创建函数后,直接调用即可返回所有可访问的S3 Bucket:
SELECT * FROM get_accessible_s3_buckets();
备选方案(Steampipe配置层面)
除了PostgreSQL函数的方式,你也可以直接在Steampipe的AWS插件配置文件(aws.spc)中添加以下配置,让插件自动忽略权限类错误:
connection "aws" { plugin = "aws" ignore_errors = true }
修改配置后重启Steampipe,再执行原查询SELECT * FROM aws_s3_bucket即可自动跳过无权限的Bucket。
内容的提问来源于stack exchange,提问作者Waqar Ahmed
相关产品推荐
相关产品推荐

