aws-lambda - Secrets Manage : Fail to rotate the secret,无法调用指定的Lambda函数

标签 aws-lambda amazon-iam aws-secrets-manager

错误: Secrets Manager无法调用指定的Lambda函数。确保功能策略授予对主体secretsmanager.amazonaws.com的访问权

我正在使用Secret Manager来存储用于验证JWT的 key 。
我计划的配置是使用以下逻辑轮换弃用键:

我的 secret 看起来像这样:

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

*使用两个 secret 并旋转它们似乎有点过头了-我只保留previous token 的内存来处理附带情况以进行交接。如果auth失败,我将检查它是否使用previous进行验证,如果验证成功,则将使用current键返回更新的cookie。

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

我没有使用setSecrettestSecretfinishSecret
我没有使用无服务器(有时会使用,但是我想先使用AWS/GUI熟悉一下自己,然后再使用CLI快捷方式)
我看了看:
  • How do I grant a rotation Lambda access to AWS Secrets Manager
  • https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets-create-generic-template.html

  • 我无法弄清缺少的IAM设置。

    当我尝试设置旋转lambda时:
    add rotation

    闪烁(很快,我不得不记录屏幕以查看内容):
    false hope

    而且我立即收到以下错误:
    error msg

    我首先让lambda完全控制secrets managerlambdas,以向后工作到最小的控件中,但是即使将厨房水槽扔给它,我也无法正常工作:
    {
      "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"
      ]
    }
    

    我的lambda信任政策如下:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "secretsmanager.amazonaws.com",
              "lambda.amazonaws.com"
            ]
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

    最佳答案

    在梳理了aws gui约10个小时并进行了广泛的搜索之后,我遇到了一个s/o帖子,其中提供了与文档链接的其他资源,该文档称lambda的功能策略无法在gui中设置。

    我在cli中运行了以下命令,一切正常:

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

    --function-name secrets_manager是因为我的lambda函数被命名为secrets_manager

    来源:https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets-create-generic-template.html

    关于aws-lambda - Secrets Manage : Fail to rotate the secret,无法调用指定的Lambda函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899204/

    相关文章:

    node.js - Lambda 中的 NodeJS AWS KMS 解密

    amazon-web-services - AWS SQS + API 网关 + Lambda + 数据库

    amazon-web-services - 使用 lambda 函数停止多个 AWS RDS 实例

    amazon-web-services - 如何限制 IAM 用户承担具有特定名称的跨账户角色

    amazon-web-services - 我可以强制 CloudFormation 解析 Secrets Manager 中的值吗?

    amazon-web-services - AWS secret 管理器

    amazon-web-services - AWS Cloudformation IAM - 无法创建 iam 用户

    amazon-web-services - AWS 信任策略澄清

    amazon-web-services - 为 AWS EC2 用户数据脚本传递 API key 的最佳方法是什么

    amazon-web-services - 将 Secrets Manager 参数引用到 secret 字符串