AWS SecretsManager list_secret_version_ids в функции поворота лямбды Возвращает исключение AccessDeniedException

#aws-lambda #aws-secrets-manager #key-rotation

#aws-lambda #aws-secrets-manager #поворот ключа

Вопрос:

Я пишу пользовательскую лямбда-функцию для реализации общего алгоритма поворота ключей для использования в SecretsManager.

Функция python lambda отлично работает при локальном запуске в моей pycharm IDE, однако, когда я вставляю ее в консоль lambda и развертываю, я получаю AccessDeniedException при выполнении «Немедленно повернуть секрет» в SecretsManager. Код, нарушающий:

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

Вошедший в систему пользователь входит в группу с прикрепленной политикой доступа администратора. Я также добавил политику SecretsManagerReadWrite для kicks.

Я печатаю сообщение об ошибке, которое включает arn секрета, и оно правильное. Этот код вызывается из метода finishSecret после завершения «обычного» кода, поэтому секрет вращается нормально. Однако я добавил пользовательский код, чтобы гарантировать, что я сохраняю версии в течение 2 лет (назначив этапы версии, чтобы SM не удалял их). Для этого мне нужен метод list-secret-version-ids.

Существует ли какое-либо ограничение на эту функцию при вызове из SecretsManager?

Есть идеи?

Ответ №1:

Я решил эту проблему. По-видимому, роль IAM по умолчанию, назначенная лямбда-функции, когда я ее создавал, не включала разрешения для запуска метода ListSecretversionIds. Я следил за разделом под названием «Создание функции поворота лямбды с использованием шаблона хранилища бессерверных приложений AWS» в руководстве пользователя AWS SecretsManager (начиная со страницы 84).).

Итак, чтобы добавить разрешение, выполните:

 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, вы можете вместо этого использовать интерактивный подход на вкладке Визуальный редактор.