Управление секретами: не удалось повернуть секрет, невозможно вызвать указанную лямбда-функцию.

Ошибка: Менеджер секретов не может вызвать указанную лямбда-функцию. Убедитесь, что политика функции предоставляет доступ к основному secrettsmanager.amazonaws.com

Я использую диспетчер секретов для хранения своего ключа для проверки JWT.
Моя запланированная конфигурация состоит в том, чтобы заменить ключи устаревшими по следующей логике:

мой секрет выглядит так:

{
  current:'my-current-secret',
  previous:'my-previous-secret',
  alg:'encoding alg',
}

* Казалось излишним использовать два секрета и чередовать их - я храню в памяти только токен previous, чтобы обрабатывать второстепенные случаи для передачи. Если аутентификация не удалась, я проверю, проверяется ли он с помощью previous, если это так, он вернет обновленный файл cookie с помощью ключа current

createSecret:

putSecretValue({
      current: getRandomPassword(...),
      previous: getSecretValue(...)['current'],
      alg: env.param ? env.param : getSecretValue(...)['alg']
})

Я не использую setSecret, testSecret, finishSecret

Я не использую бессерверный (в какой-то момент, но я хотел сначала ознакомиться с AWS / GUI, прежде чем сокращать его с помощью CLI). Я посмотрел:

Я не могу понять, какой параметр IAM мне не хватает.

Когда я пытаюсь установить лямбда вращения:  добавить поворот

Это мигает (так быстро, что мне пришлось записать свой экран, чтобы посмотреть):  ложная надежда

И сразу получаю следующую ошибку:  сообщение об ошибке

Я начал с того, что предоставил лямбде полный контроль над secrets manager и lambdas, чтобы он работал в обратном направлении до минимальных элементов управления, но даже бросив в него кухонную раковину, я не смог заставить его работать:

{
  "permissionsBoundary": {},
  "roleName": "secrets_manager-role-REDACTED",
  "policies": [
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
              "secretsmanager:GetRandomPassword",
              "secretsmanager:CreateSecret",
              "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
          },
          {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "arn:aws:secretsmanager:us-east-1:REDACTED:secret:REDACTED"
          }
        ]
      },
      "name": "ReadWriteREDACTEDSecret",
      "id": "REDACTED",
      "type": "managed",
      "arn": "arn:aws:iam::REDACTED:policy/ReadWriteREDACTEDSecret"
    },
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
              "lambda:InvokeFunction",
              "lambda:InvokeAsync"
            ],
            "Resource": "arn:aws:lambda:us-east-1:REDACTED:function:secrets_manager"
          }
        ]
      },
      "name": "invoke_secrets_manager_lambda",
      "id": "REDACTED",
      "type": "managed",
      "arn": "arn:aws:iam::REDACTED:policy/invoke_secrets_manager_lambda"
    },
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "arn:aws:logs:us-east-1:REDACTED:*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogStream",
              "logs:PutLogEvents"
            ],
            "Resource": [
              "arn:aws:logs:us-east-1:REDACTED:log-group:/aws/lambda/secrets_manager:*"
            ]
          }
        ]
      },
      "name": "AWSLambdaBasicExecutionRole-REDACTED",
      "id": "REDACTED",
      "type": "managed",
      "arn": "arn:aws:iam::REDACTED:policy/service-role/AWSLambdaBasicExecutionRole-REDACTED"
    },
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "cloudformation:DescribeChangeSet",
              "cloudformation:DescribeStackResources",
              "cloudformation:DescribeStacks",
              "cloudformation:GetTemplate",
              "cloudformation:ListStackResources",
              "cloudwatch:*",
              "cognito-identity:ListIdentityPools",
              "cognito-sync:GetCognitoEvents",
              "cognito-sync:SetCognitoEvents",
              "dynamodb:*",
              "ec2:DescribeSecurityGroups",
              "ec2:DescribeSubnets",
              "ec2:DescribeVpcs",
              "events:*",
              "iam:GetPolicy",
              "iam:GetPolicyVersion",
              "iam:GetRole",
              "iam:GetRolePolicy",
              "iam:ListAttachedRolePolicies",
              "iam:ListRolePolicies",
              "iam:ListRoles",
              "iam:PassRole",
              "iot:AttachPrincipalPolicy",
              "iot:AttachThingPrincipal",
              "iot:CreateKeysAndCertificate",
              "iot:CreatePolicy",
              "iot:CreateThing",
              "iot:CreateTopicRule",
              "iot:DescribeEndpoint",
              "iot:GetTopicRule",
              "iot:ListPolicies",
              "iot:ListThings",
              "iot:ListTopicRules",
              "iot:ReplaceTopicRule",
              "kinesis:DescribeStream",
              "kinesis:ListStreams",
              "kinesis:PutRecord",
              "kms:ListAliases",
              "lambda:*",
              "logs:*",
              "s3:*",
              "sns:ListSubscriptions",
              "sns:ListSubscriptionsByTopic",
              "sns:ListTopics",
              "sns:Publish",
              "sns:Subscribe",
              "sns:Unsubscribe",
              "sqs:ListQueues",
              "sqs:SendMessage",
              "tag:GetResources",
              "xray:PutTelemetryRecords",
              "xray:PutTraceSegments"
            ],
            "Resource": "*"
          }
        ]
      },
      "name": "AWSLambdaFullAccess",
      "id": "REDACTED",
      "type": "managed",
      "arn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess"
    }
  ],
  "trustedEntities": [
    "secretsmanager.amazonaws.com",
    "lambda.amazonaws.com"
  ]
}

Моя политика доверия лямбда следующая:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "secretsmanager.amazonaws.com",
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

person Schalton    schedule 17.11.2019    source источник


Ответы (1)


После прочесывания aws gui в течение ~ 10 часов и обширного поиска в Google я наткнулся на сообщение s / o для другого ресурса, который был связан с документами, в котором говорилось, что политика функции лямбда не может быть установлена ​​в графическом интерфейсе.

Я выполнил следующую команду в cli, и все сработало:

aws lambda add-permission \
          --function-name secrets_manager \
          --principal secretsmanager.amazonaws.com \
          --action lambda:InvokeFunction \
          --statement-id SecretsManagerAccess

--function-name secrets_manager потому, что моя лямбда-функция называется secrets_manager

источник: https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets-create-generic-template.html

person Schalton    schedule 17.11.2019
comment
Сожалеем, что это заняло у вас 10 часов :(. Да, Lambda должна поддерживать обновление этой функциональной политики в консоли. - person committedandroider; 18.11.2019
comment
Привет, @Schalton. Хотел бы я увидеть ваш ответ раньше ... Я потратил несколько дней на эту проблему, просто задаваясь вопросом, могу ли я использовать ту же команду для предоставления разрешения, если я использую шаблон функции вращения для механизма MySQL? (ссылка: github.com / aws-samples / aws-secrets-manager-rotation-lambdas /) У меня такая же ошибка разрешения, если я настраиваю в консоли Secret Manager напрямую, поэтому я пытаюсь создать функцию вращения вручную, используя этот шаблон, какие-либо предложения? - person Cecilia; 30.01.2020
comment
@Cecilia, извините, я не знаю конкретно об этом варианте использования. После того, как я столкнулся с этой проблемой, я начал делать больше настроек конфигурации в CLI (по сравнению с консолью); Я бы порекомендовал поискать решения CLI, так как мы узнали, что он более многофункциональный - удачи! Если вы найдете решение, отправьте вопросы и ответы на S / O, чтобы помочь будущим пользователям (возможно, через 6 месяцев, ха-ха) - person Schalton; 01.02.2020