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

如何验证AWS Secrets Manager密钥轮换完成?需检查VersionId吗?

AWS Secrets Manager密钥轮换完成检查:是否需要VersionId验证?

不需要额外检查VersionId,AWS Secrets Manager的密钥轮换状态完全可以通过VersionStages标签来确认,你提到的两个判断条件已经覆盖了轮换完成的所有场景:

  • AWSPENDING与AWSCURRENT附加到同一密钥版本:说明新密钥已完成激活,轮换流程的收尾操作(如关联应用配置)已完成
  • AWSPENDING未附加到任何密钥版本:表示轮换流程彻底结束,没有待激活的过渡版本

现有脚本的问题

你的当前脚本存在逻辑漏洞:aws secretsmanager get-secret-value默认仅返回带有AWSCURRENT标签的密钥版本,如果轮换过程中AWSPENDING标签在另一个独立版本上,你无法获取到该版本的Stage信息,会导致判断错误。

优化后的轮询脚本

建议改用list-secret-version-ids接口获取所有版本的Stage信息,确保判断逻辑准确:

rotationComplete=false
attempt=0
max_attempts=20  # 设置最大重试次数,避免无限循环

while [ "$rotationComplete" == false ] && [ $attempt -lt $max_attempts ]; do
    # 获取所有密钥版本的Stage集合
    all_version_stages=$(aws secretsmanager list-secret-version-ids --secret-id awsSecret --query 'Versions[].VersionStages' | jq -r '.[] | @sh')
    
    # 检查是否存在同时包含AWSPENDING和AWSCURRENT的版本
    has_both_stages=$(echo "$all_version_stages" | grep -q "AWSPENDING.*AWSCURRENT\|AWSCURRENT.*AWSPENDING" && echo true || echo false)
    # 检查是否所有版本都没有AWSPENDING标签
    no_pending_stage=$(echo "$all_version_stages" | grep -q "AWSPENDING" && echo false || echo true)

    if [ "$has_both_stages" == true ] || [ "$no_pending_stage" == true ]; then
        echo "Secret rotation completed."
        rotationComplete=true
    else
        echo "Secret rotation has not completed yet. Waiting... (Attempt $((attempt+1))/$max_attempts)"
        attempt=$((attempt + 1))
        sleep 30
    fi
done

if [ "$rotationComplete" == false ]; then
    echo "Secret rotation timed out after $max_attempts attempts."
fi

优化说明

  • 用list-secret-version-ids替代get-secret-value,确保能获取所有密钥版本的Stage标签,避免遗漏轮换过程中的过渡版本
  • 增加最大重试次数限制,防止因异常情况导致无限轮询
  • 拆分判断逻辑,让条件检查更清晰准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:11