CloudFormation创建的AWS KMS密钥立即进入待删除状态求助
以下是针对你遇到的问题的具体排查和解决建议:
检查CloudFormation模板的KMS密钥删除策略
CloudFormation默认对KMS密钥的DeletionPolicy为Delete,如果你的脚本存在先删除旧栈再创建新栈的逻辑,旧栈中的KMS密钥会被标记为待删除;如果新栈创建时未设置保留策略,也可能触发异常。在KMS密钥资源中添加以下配置,确保密钥不会被自动标记为待删除:Resources: IAMRolesAnywhereKMSKey: Type: AWS::KMS::Key DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: Description: "KMS key for IAM Roles Anywhere" KeyUsage: SIGN_VERIFY KeySpec: RSA_2048 # 其他必要属性(如权限策略)排查脚本操作时序与误操作
确认脚本中没有在创建CloudFormation栈后意外触发栈删除或KMS密钥删除命令,比如检查是否存在条件分支错误,导致刚执行完aws cloudformation create-stack就调用delete-stack。
同时,必须确保栈完全创建完成后再执行CA签署操作,添加等待命令:aws cloudformation wait stack-create-complete --stack-name <your-unique-stack-name>强化KMS密钥状态检查与恢复逻辑
优化你的检查逻辑,覆盖刚创建就进入待删除的场景:# 获取目标KMS密钥ARN(根据描述或标签筛选) TARGET_KEY_ARN=$(aws kms list-keys --query "Keys[?Description=='KMS key for IAM Roles Anywhere'].KeyArn" --output text) if [ -n "$TARGET_KEY_ARN" ]; then KEY_STATE=$(aws kms describe-key --key-id "$TARGET_KEY_ARN" --query "KeyMetadata.KeyState" --output text) if [ "$KEY_STATE" = "PendingDeletion" ]; then # 取消删除并等待密钥恢复活跃状态 aws kms cancel-key-deletion --key-id "$TARGET_KEY_ARN" aws kms wait key-status-active --key-id "$TARGET_KEY_ARN" fi fi注意:如果是新创建的密钥立即进入待删除,大概率是脚本中误执行了
aws kms schedule-key-deletion,务必排查所有KMS相关命令。查看CloudFormation栈事件日志
通过栈事件确认KMS密钥的生命周期:aws cloudformation describe-stack-events --stack-name <your-stack-name>日志中会显示密钥资源的创建、修改或删除触发事件,帮助定位是否是CloudFormation本身的异常操作导致密钥进入待删除状态。
检查IAM权限边界
执行脚本的IAM身份如果拥有kms:ScheduleKeyDeletion权限,可能在脚本执行过程中被误触发(比如第三方工具、脚本拼写错误)。临时限制该权限,测试是否还会出现问题。
内容的提问来源于stack exchange,提问作者user1010101

