AWS:在 SSM 参数上调用 ssm:GetParameterHistory 时出现 AccessDeniedException

Sai*_*sky 3 amazon-web-services boto3 aws-lambda aws-iam

我正在尝试编写一个 lambda 来侦听来自 CloudWatch 的 Parameter Store 更改事件,并通过调用boto3.client('ssm').get_parameter_history(Name=event["name"],WithDecryption=True). 此方法失败并显示以下消息:

botocore.exceptions.ClientError: 调用GetParameterHistory 操作时发生错误(AccessDeniedException):密文引用的客户主密钥不存在、不存在于该区域或您不被允许访问。(服务:AWSKMS;状态代码:400;错误代码:AccessDeniedException;请求 ID:等等)

下面是 lambda 的执行角色:

{
  "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"
  ]
}
Run Code Online (Sandbox Code Playgroud)

在我使用之前ssm:GetParameterHistory,有ssm:DescribeParameters,但我需要获取一些版本信息,因此进行了更改。一切都在同一个区域,lambda 和参数。

为了解决这个问题,我现在需要哪些额外的权限以及哪些资源?

Sai*_*sky 7

发现需要访问密钥的 lambda 角色需要在 KMS 中添加为密钥用户。基本上,需要向角色(或用户)授予权限才能使用密钥对机密进行加密/解密。

这是从 KMS 控制台完成的,单击客户托管密钥列表中的密钥名称(假设它是您自己创建的密钥),向下滚动到关键用户并将需要使用该密钥的角色添加到列表中允许的用户。