使用自定义KMS密钥创建AWS Secrets Manager密钥失败求助
解决AWS Secrets Manager指定自定义KMS密钥却使用默认密钥的问题
我之前也碰到过一模一样的情况,咱们一步步来排查和解决:
1. 先确认KMS密钥ARN的完整性
你提供的KMS密钥ARN arn:aws:kms:****d292 明显不完整,正确的ARN格式应该是:arn:aws:kms:<区域>:<AWS账户ID>:key/<密钥UUID>
比如:arn:aws:kms:us-east-1:123456789012:key/abcd1234-d292-xxxx-xxxx-xxxxxxxxxxxx
如果ARN缺失了区域、账户ID或者密钥ID部分,Secrets Manager会自动 fallback 到默认KMS密钥,这是最常见的原因。
2. 检查IAM身份的权限
执行aws secretsmanager create-secret命令的IAM实体(用户/角色)需要具备以下权限:
- Secrets Manager的
secretsmanager:CreateSecret权限 - 自定义KMS密钥的
kms:GenerateDataKey和kms:Decrypt权限
你可以先测试能不能正常访问这个KMS密钥:
aws kms describe-key --key-id <完整的KMS密钥ARN> --region us-east-1
如果返回密钥信息,说明权限没问题;如果报错,就需要给IAM实体添加对应的KMS密钥权限(可以通过KMS密钥的资源策略或者IAM策略配置)。
3. 确认KMS密钥的状态和区域
- 确保自定义KMS密钥是启用状态(在KMS控制台查看,禁用的密钥无法被使用)
- KMS密钥必须和你创建的Secrets Manager密钥在同一个区域(你指定了
us-east-1,所以KMS密钥也得在us-east-1),跨区域的话Secrets Manager会自动用默认密钥。
4. 核对命令参数的正确性
检查有没有拼写错误,比如参数名是不是--kms-key-id(不要写成--kms-key-arn之类的),然后用完整的ARN重新执行命令:
aws secretsmanager create-secret --name test-5 --secret-string file://mycreds.json --region us-east-1 --kms-key-id arn:aws:kms:us-east-1:123456789012:key/abcd1234-d292-xxxx-xxxx-xxxxxxxxxxxx
5. 验证最终创建的密钥
创建完成后,用以下命令查看密钥使用的KMS密钥:
aws secretsmanager describe-secret --secret-id test-5 --region us-east-1 --query 'KmsKeyId'
如果返回的是你指定的自定义KMS密钥ARN,就说明问题解决了;如果还是默认密钥,再回头检查前面的步骤。
另外,你提到执行aws secretsmanager list-sec...命令没完成,如果你想批量查看密钥的KMS信息,可以用这个完整命令:
aws secretsmanager list-secrets --region us-east-1 --query 'SecretList[*].[Name,KmsKeyId]'
内容的提问来源于stack exchange,提问作者Santanu Sahoo
相关产品推荐
相关产品推荐

