我创建了一个秘密,并将其更新为具有lambda旋转功能
我的秘密看起来像是
aws secretsmanager list-secret-version-ids --secret-id envir/username
{
"Versions": [
{
"VersionId": "90179cd3-daa1-48e4-9fe5-dde0a4cf22e4",
"VersionStages": [
"AWSPREVIOUS"
],
"LastAccessedDate": 1524528000.0,
"CreatedDate": 1524568488.358
},
{
"VersionId": "60576823-5d98-4360-af53-7e1f909b88d0",
"VersionStages": [
"AWSCURRENT"
],
"LastAccessedDate": 1524528000.0,
"CreatedDate": 1524568827.466
}
],
"ARN": "arn:aws:secretsmanager:eu-west-1:8282828282828:secret:username-YdgbPA",
"Name": "envir/username"
}
当我尝试旋转它时,我收到此错误
An error occurred (InvalidRequestException) when calling the RotateSecret operation: A previous rotation isn’t complete. That rotation will be reattempted.
如果我没有问题触发lambda函数,我可以毫无问题地轮换秘密。
任何人都有任何想法?
相关链接:
AWSPENDING
州的秘密。答案 0 :(得分:6)
对于仍然遇到此问题的任何人,您可以尝试做的是清除挂起的版本并重新尝试轮换
例如,对于具有秘密ID thefrog
的秘密,请致电
aws secretsmanager get-secret-value \
--secret-id thefrog \
--version-stage AWSPENDING
以获取带有未决标签的版本的版本ID。结果看起来像
{
"CreatedDate": 1541540242.561,
"Name": "thefrog",
"VersionStages": [
"AWSPENDING"
],
"SecretString": "TOP-SECRET",
"ARN": "arn:aws:secretsmanager:xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"VersionId": "2a27cecb-23c7-4320-b168-78661c24612f"
}
然后拨打电话
aws secretsmanager update-secret-version-stage \
--secret-id thefrog \
--version-stage AWSPENDING \
--remove-from-version-id 2a27cecb-23c7-4320-b168-78661c24612f
删除带有待定标签的机密版本。
您可以从此处重试旋转
答案 1 :(得分:5)
对于将来可能会遇到同样错误的人来说只是一张纸条......
如果您使用AWS Secrets Manager旋转Amazon RDS密码,Secrets Manager将自动创建Lambda函数。此功能需要:
因此,以下组合起作用:
此外,附加到数据库的安全组需要允许来自Lambda函数的入站访问。默认情况下,为Lambda函数分配与数据库使用的安全组相同的安全组,因此:
答案 2 :(得分:4)
对于认为https://forums.aws.amazon.com/thread.jspa?threadID=280093&tstart=0上的链接不适用的任何人,请务必检查aws secretsmanager list-secret-version-ids
和aws secretsmanager list-secrets
的输出,以确保它们与彼此。我只有一个秘密,我无法旋转,继续得到"前一个旋转不完整。这种轮换将被重新尝试"错误信息。我在AWS上打开了一个支持案例,当我等待与支持代表交谈时,我决定检查list-secrets
的输出,并且看到我发现了一个关于秘密的AWSPENDING标签我无法轮换(该标签没有出现在list-secret-version-ids
的输出上。一旦我清除了那个标签,我就可以成功地转动我遇到问题的秘密。
答案 3 :(得分:1)
问题是lambda函数失败了,重试发生在我的控制之下(目前没有办法限制lambda函数的重试)。
答案 4 :(得分:0)
我有类似的问题。对于我的documentdb,我有一个cloudformation模板,该模板具有以下模板内容:
MyDocumentDbSecret:
Type: AWS::SecretsManager::Secret
Properties:
Name: "/secrets/documentdb/root"
Description: 'DocDB root secret'
GenerateSecretString:
SecretStringTemplate: !Sub '{"username": "${DefaultDocDbUser}"}'
GenerateStringKey: "password"
PasswordLength: 16
ExcludeCharacters: '"@/\'
但是使用这个cloudformation模板,我总是在lambda函数中得到连接超时(尝试更改用户密码)。
但是当我在SecretStringTemplate属性中使用ssl = true将cloudformation模板更改为此时:
DocDBClusterRotationSecret:
Type: AWS::SecretsManager::Secret
Properties:
Name: "/secrets/documentdb/root"
Description: 'DocDB root secret'
GenerateSecretString:
SecretStringTemplate: !Sub '{"username": "${DefaultDocDbUser}", "ssl": "true"}'
GenerateStringKey: "password"
PasswordLength: 16
ExcludeCharacters: '"@/\'
然后它可以正常工作。对于我的cloudformation类型:AWS :: SecretsManager :: SecretTargetAttachment不为我的秘密提供ssl = true属性,因此我需要在cloudformation模板中手动添加它。现在,它可以完美运行而没有错误。
如今我的秘密字符串如下:
{
"password": "My PW",
"engine": "mongo",
"port": 27017,
"host": "My Host",
"ssl": "true",
"username": "My User"
}