Lambda旋转功能中的AWS SecretsManager list_secret_version_ids返回AccessDeniedException

问题描述

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

当在我的pycharm IDE中本地运行时,python lambda函数可以完美运行,但是,当我将其粘贴到lambda控制台并进行部署时,在SecretsManager中执行“立即旋转秘密”时,我会得到一个AccessDeniedException。令人反感的代码是:

 resp = service_client.list_secret_version_ids(SecretId=arn,IncludeDeprecated=True)

登录用户位于附加了AdministratorAccess策略的组中。我还为踢添加了SecretsManagerReadWrite策略。

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

从SecretsManager调用功能是否对该功能有某种限制?

有什么想法吗?

解决方法

我解决了这个问题。显然,我创建时分配给lambda函数的默认IAM角色不包含运行ListSecretversionIds方法的权限。我遵循了《 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不太满意,可以使用“可视化编辑器”选项卡上的交互式方法。