Amazon web services 美国焊接学会保密经理';前一轮不是’;不完整';轮换秘密时
我创建了一个秘密,并将其更新为lambda旋转函数 我的秘密看起来像Amazon web services 美国焊接学会保密经理';前一轮不是’;不完整';轮换秘密时,amazon-web-services,aws-secrets-manager,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": [ "AW
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函数而没有问题,我可以旋转秘密而没有问题
有人有什么想法吗
相关链接:
- 这不适用于我,因为我在
州没有秘密
aws secretsmanager列表机密版本ID
和aws secretsmanager列表机密的输出,以确保它们彼此同步。我只是有一个秘密,我不能旋转,不断得到“前一个旋转未完成。该旋转将被重新尝试”错误消息。我有一个AWS打开的支持案例,当我等待与支持代表通话时,我决定检查列表机密
的输出,不料,我在无法旋转的机密上发现了一个AWS标签(该标签没有显示在该机密的列表机密版本ID
的输出上)。一旦我清除了标签,我就可以成功地旋转我遇到问题的秘密。这只是给将来可能会遇到同样错误的人的一个提示
如果您使用AWS机密管理器旋转亚马逊RDS密码,则机密管理器将自动创建Lambda函数。此功能需要:
- 访问与lambda功能相关的子网/子网中的机密管理器服务的Internet(调用机密管理器)或VPC端点
- 访问RDS实例(登录并更改密码)
因此,以下组合起作用:
- 具有Lambda函数且未连接到VPC的公共可访问数据库(不利于安全),或
- 专用子网中的Lambda函数在公用子网中具有NAT网关(因此Lambda函数可以访问Internet)或附加到Lambda函数的ENI的弹性IP地址
此外,连接到数据库的安全组需要允许Lambda函数进行入站访问。默认情况下,Lambda函数与数据库使用的安全组相同,因此:
- 编辑数据库安全组以允许从其自身进行入站连接(即,通过同一安全组从Lambda到数据库),或
- 将Lambda函数使用的安全组更改为当前允许访问数据库安全组的安全组
对于仍然存在此问题的任何人,您可以尝试清除挂起的版本并重新尝试轮换
例如,对于具有secret id的secrettheprog
,调用
aws secretsmanager get-secret-value \
--secret-id thefrog \
--version-stage AWSPENDING
获取带有挂起标签的版本的版本id。结果看起来像
{
“CreatedDate”:1541540242.561,
“名称”:“thefrog”,
“版本阶段”:[
“财政支出”
],
“秘密字符串”:“绝密”,
“ARN”:“ARN:aws:secretsmanager:xxxxxxxxxxxxxxxxxxxxxxxx”,
“版本ID”:“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
删除具有挂起标签的机密版本
从这里您可以重试旋转我遇到了类似的问题。对于我的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属性中将cloudformation模板更改为ssl=true时:
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"
}
我想知道为什么他们会在旋转失败的地方保留AWExpensing标签难道重试不是只有在重新尝试旋转时才会发生?只是想知道什么输出指示旋转成功发生?我得到了这个“Versions”:[{“VersionId”:“xxx”,“VersionStages”:[“AWSCURRENT”],“LastAccessedDate”:1580342400.0,“CreatedDate”:1580391706.854},{“VersionId”:“xxxx”,“VersionStages”:[“AWSPREVIOUS”],“LastAccessedDate”:158042400.0,“CreatedDate”:1580297852.964}
(抱歉,一条评论中无法容纳)这是否意味着我的凭据已被轮换?我在SM控制台中检查了密码。密码没有更改。是否可以将轮换lambda和数据库放在同一个安全组中?@Dan资源通常不会“在同一个安全组中”。安全组与资源“在子网中”的子网不同。相反,安全组规则适用于它们关联到的每个单独的资源。仅仅因为两个资源具有相同的安全组并不意味着它们可以通信-只有当安全组