AWS SDK Go V1/V2中SecretsManager ListSecrets过滤器如何正确应用?
AWS SDK Go SecretsManager ListSecrets 过滤器正确使用方法
V1 版本问题与修正
你的V1代码存在类型不匹配的核心问题:ListSecretsInput.Filters 是 []*secretsmanager.Filter 切片类型,但你直接赋值了单个 *secretsmanager.Filter 指针,导致过滤器根本没有被正确传入请求。若要按名称过滤,Key需指定为 "name",该过滤器会匹配名称包含指定值的密钥。
修正后的V1代码:
func GetSecretManagerList(svc secretsmanageriface.SecretsManagerAPI) (*secretsmanager.ListSecretsOutput, error) { // 构造过滤器切片,而非单个Filter指针 filters := []*secretsmanager.Filter{ { Key: aws.String("name"), Values: []*string{aws.String("mtls")}, }, } input := &secretsmanager.ListSecretsInput{ MaxResults: aws.Int64(2), Filters: filters, // 传入切片类型参数 } result, err := svc.ListSecrets(input) if err != nil { return nil, err } return result, nil }
V2 版本问题与修正
你的V2代码错误使用了 types.FilterNameStringTypeDescription(对应"description")作为过滤Key,但你要过滤的是名称中的"mtls",应改用 types.FilterNameStringTypeName(对应"name")。AWS Secrets Manager的name过滤器为包含匹配,会返回名称中包含指定字符串的密钥。
修正后的V2代码:
import ( "context" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/secretsmanager" "github.com/aws/aws-sdk-go-v2/service/secretsmanager/types" ) func GetSecretManagerList(ctx context.Context, client secretsmanager.Client) (*secretsmanager.ListSecretsOutput, error) { // 使用name作为过滤Key,匹配名称包含mtls的密钥 filters := []types.Filter{ { Key: types.FilterNameStringTypeName, Values: []string{"mtls"}, }, } result, err := client.ListSecrets(ctx, &secretsmanager.ListSecretsInput{ MaxResults: aws.Int32(2), Filters: filters, }) if err != nil { return nil, err } return result, nil }
额外注意事项
- 不同过滤Key的匹配规则不同:比如
tag-key是精确匹配标签键,primary-region是精确匹配密钥所属区域,使用前需明确对应规则。 - 单元测试模拟:若通过mock验证,需确保mock的
ListSecrets方法能正确识别Filters参数,返回符合过滤条件的结果,否则测试会出现不符合预期的情况。 - 分页处理:若符合条件的密钥数量超过
MaxResults设置值,需通过返回的NextToken进行分页查询,避免遗漏结果。
内容的提问来源于stack exchange,提问作者Yoel Blanco Torriente
相关产品推荐
相关产品推荐

