AWS: AccessDeniedException при вызове ssm: GetParameterHistory в параметре SSM

Я пытаюсь написать лямбда-выражение, которое прослушивает события изменения хранилища параметров из CloudWatch и получает данные истории для параметра, вызывая boto3.client('ssm').get_parameter_history(Name=event["name"],WithDecryption=True). Этот метод не работает с сообщением:

botocore.exceptions.ClientError: произошла ошибка (AccessDeniedException) при вызове операции GetParameterHistory: зашифрованный текст относится к главному ключу клиента, который не существует, не существует в этом регионе или вам не разрешен доступ. (Сервис: AWSKMS; код состояния: 400; код ошибки: AccessDeniedException; идентификатор запроса: бла-бла-бла)

Ниже показано, как выглядит исполнительная роль лямбды:

{
  "roleName": "myapp-paramstore-updates-webhook-role",
  "policies": [
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "arn:aws:logs:eu-west-1:000000000000:*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogStream",
              "logs:PutLogEvents"
            ],
            "Resource": [
              "arn:aws:logs:eu-west-1:000000000000:log-group:/aws/lambda/ssm-paramstore-updates-webhook:*"
            ]
          }
        ]
      },
      "name": "LambdaBasicExeRole",
      "type": "inline"
    },
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
              "kms:DescribeKey",
              "ssm:GetParameter"
            ],
            "Resource": [
              "arn:aws:kms:eu-west-1:000000000000:key/*",
              "arn:aws:ssm:eu-west-1:000000000000:parameter/myorg/myteam/slack/webhooks/ssm-paramstore-updates-webhook",
              "arn:aws:ssm:eu-west-1:000000000000:parameter/myorg/myteam/slack/webhooks/system-eventsupdates-webhook"
            ]
          },
          {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ssm:GetParameterHistory",
            "Resource": "arn:aws:ssm:*:*:parameter/*"
          }
        ]
      },
      "name": "readonly-ssm-paramstore-updates-webhook",
      "type": "inline"
    }
  ],
  "trustedEntities": [
    "lambda.amazonaws.com"
  ]
}

До того, как я использовал ssm:GetParameterHistory, было ssm:DescribeParameters, но мне нужно было получить некоторую информацию о версии, отсюда и изменение. Все в одном регионе, лямбда и параметры.

Какие дополнительные разрешения мне нужны сейчас и на каком ресурсе, чтобы это исправить?


person 170730350    schedule 08.12.2018    source источник
comment
Как следует из ошибки, вам не хватает доступа к ключу KMS для расшифровки параметров. Кроме того, используете ли вы правильные учетные данные при вызове boto?   -  person jbasko    schedule 08.12.2018
comment
@jbasko Тот факт, что к параметру был осуществлен доступ и прочитаны его подробности, говорит мне, что учетные данные в порядке. Я думаю, проблема была связана с расшифровкой значений KMS. Мне нужны значения для обновлений, чтобы я мог показать старое значение и новое значение.   -  person 170730350    schedule 08.12.2018


Ответы (1)


Выяснилось, что лямбда-роль, которая должна получить доступ к ключу, должна быть добавлена ​​в качестве ключевого пользователя в KMS. По сути, необходимо предоставить разрешение роли (или пользователю), чтобы она использовала ключ для выполнения шифрования / дешифрования секретов.

Это делается из консоли KMS, щелкните имя ключа в списке ключей, управляемых клиентом (при условии, что это ключ, который вы создали сами), прокрутите вниз до ключевых пользователей и добавьте роль, которая должна использовать ключ, в список. разрешенных пользователей.

person 170730350    schedule 28.02.2019