AWS秘密管理员在轮换秘密时"先前的轮换未完成"

use*_*522 5 amazon-web-services aws-secrets-manager

我创建了一个秘密并更新它以具有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"
}
Run Code Online (Sandbox Code Playgroud)

当我尝试旋转它时,我收到此错误

An error occurred (InvalidRequestException) when calling the RotateSecret operation: A previous rotation isn’t complete. That rotation will be reattempted.
Run Code Online (Sandbox Code Playgroud)

如果我没有问题触发lambda函数,我可以毫无问题地轮换秘密.

有人有什么想法吗?


相关链接:

com*_*der 6

对于仍然遇到此问题的人,您可以尝试执行的操作是清除待处理版本并重新尝试轮换

例如,带有秘密ID的秘密thefrog,请致电

aws secretsmanager get-secret-value \
    --secret-id thefrog \
    --version-stage AWSPENDING
Run Code Online (Sandbox Code Playgroud)

获取具有挂起标签的版本的版本ID.结果看起来像

{                                                                      
    "CreatedDate": 1541540242.561,                         
    "Name": "thefrog",                
    "VersionStages": [                               
        "AWSPENDING"                                        
    ],                                                    
    "SecretString": "TOP-SECRET",                                                    
    "ARN": "arn:aws:secretsmanager:xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "VersionId": "2a27cecb-23c7-4320-b168-78661c24612f"   
} 
Run Code Online (Sandbox Code Playgroud)

然后打电话

aws secretsmanager update-secret-version-stage \
    --secret-id thefrog \
    --version-stage AWSPENDING \
    --remove-from-version-id 2a27cecb-23c7-4320-b168-78661c24612f
Run Code Online (Sandbox Code Playgroud)

删除具有挂起标签的机密版本.

从这里您可以重试旋转


小智 5

对于认为https://forums.aws.amazon.com/thread.jspa?threadID=280093&tstart=0上的链接不适用的任何人,确保检查两者的输出aws secretsmanager list-secret-version-idsaws secretsmanager list-secrets确保它们同步彼此。我只有一个秘密,我无法轮换,总是收到“先前的轮换尚未完成。该轮换将重新尝试”的错误消息。我有一个打开了AWS的支持案例,并且在等待与支持代表通话时,我决定检查的输出list-secrets,然后发现我在无法旋转的机密上发现了一个AWSPENDING标签(该标签未显示在该list-secret-version-ids机密的输出中)。清除该标签后,便可以成功旋转遇到问题的秘密。


Joh*_*ein 5

只是为将来可能会遇到相同错误的人提供的说明...

如果您正在使用AWS Secrets Manager旋转Amazon RDS密码,则Secrets Manager将自动创建Lambda函数。此功能要求:

  • 访问Internet(以致电Secrets Manager)
  • 访问RDS实例(登录和更改密码)

因此,以下组合起作用:

  • 具有附加到VPC 的Lambda函数的可公开访问的数据库(对安全性不利),或者
  • 私有子网中的Lambda函数,而公共子网中有NAT网关(因此Lambda函数可以访问Internet),或者附加到Lambda函数的ENI的弹性IP地址

同样,连接到数据库安全组需要允许Lambda函数进行入站访问。默认情况下,为Lambda函数分配与数据库使用的相同的安全组,因此:

  • 编辑数据库安全组以允许其自身(即,通过同一安全组从Lambda到数据库)的入站连接,或者
  • 将Lambda函数使用的安全组更改为当前允许访问数据库安全组的安全组


use*_*522 2

问题是 lambda 函数失败,并且重试发生在我无法控制的情况下(当前无法限制 lambda 函数的重试)。