Aws lambda lambda旋转函数中的AWS SecretsManager列表\u secret\u版本\u ID返回AccessDeniedException

Aws lambda lambda旋转函数中的AWS SecretsManager列表\u secret\u版本\u ID返回AccessDeniedException,aws-lambda,aws-secrets-manager,key-rotation,Aws Lambda,Aws Secrets Manager,Key Rotation,我正在编写一个自定义lambda函数,以实现在SecretsManager中使用的通用旋转键算法 python lambda函数在pycharm IDE中本地运行时工作得非常好,但是,当我将其粘贴到lambda控制台并部署它时,在SecretsManager中执行“立即旋转机密”时会得到AccessDeniedException。违规代码是: resp = service_client.list_secret_version_ids(SecretId=arn, IncludeDeprecate

我正在编写一个自定义lambda函数,以实现在SecretsManager中使用的通用旋转键算法

python lambda函数在pycharm IDE中本地运行时工作得非常好,但是,当我将其粘贴到lambda控制台并部署它时,在SecretsManager中执行“立即旋转机密”时会得到AccessDeniedException。违规代码是:

 resp = service_client.list_secret_version_ids(SecretId=arn, IncludeDeprecated=True)
登录用户位于附加了管理员访问策略的组中。我还为kicks添加了secretsmanagerradwrite策略

我打印了一条错误消息,其中包括机密的arn,它是正确的。 此代码是在“正常”代码完成后从finishSecret方法调用的,因此该密码不会旋转。但是,我添加了自定义代码,以确保将版本保留2年(通过分配版本阶段,使SM不会删除它们)。为此,我需要list secret version ids方法

从SecretsManager调用此函数时是否有某种限制


有什么想法吗?

我解决了这个问题。显然,创建lambda函数时分配给它的默认IAM角色不包括运行ListSecretVersionId方法的权限。我遵循了《AWS SecretsManager用户指南》(从第84页开始)中标题为“使用AWS无服务器应用程序存储库模板创建Lambda循环函数”的部分

因此,要添加权限,请执行以下操作:

1. Bring up the lambda function just created 
2. Click the Permissions tab
3. Click the role that was assigned (at top of page)
4. On the Permissions tab (already displayed)
    1. Click Show 2 more
    2. Open SecretsManagerRotationTemplateRolePolicy1
    3. Click [Edit Policy] button
    4. Click [JSON] 
    5. Add "secretsmanager:ListSecretVersionIds” to the list of Actions allowed so it looks like:
            "Action": [ 
                "secretsmanager:DescribeSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue",
                "secretsmanager:UpdateSecretVersionStage",
                "secretsmanager:ListSecretVersionIds"
            ],
    6. Click [Review...]
    7. Click [Save Changes]
或者,如果您对编辑JSON感到厌烦,可以使用VisualEditor选项卡上的交互式方法