当前位置: 首页 > 知识库问答 >
问题:

AWS:对SSM参数调用SSM:GetParameterHistory时的AccessDeniedException

师野
2023-03-14

我正在尝试编写一个lambda,通过调用boto3.client('ssm').get_parameter_history(Name=event[“name”],withdecryption=true)来监听来自CloudWatch的参数存储更改事件,并获取参数的历史数据。此方法失败,返回以下消息:

BotoCore.Exceptions.ClienError:调用GetParameterHistory操作时出错(AccessDeniedException):密文引用的客户主密钥不存在、不在此区域中或不允许您访问。(服务:AWSKMS;状态代码:400;错误代码:AccessDeniedException;请求ID:blah-blah-blah)

下面是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"
  ]
}

在我使用ssm:getParameterHistory之前,有ssm:descripeParameters,但我需要获得一些版本信息,因此进行了更改。所有的东西都在同一个区域,lambda和参数。

共有1个答案

满才
2023-03-14

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

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

 类似资料:
  • 场景:我们的一个脚本使用boto3 kms api使用kms加密和解密来放置和获取SSM参数。SSM param put工作非常好,并且在EC2 SSM param存储中使用安全字符串添加参数(解密为true)。我们所面临的问题是当解密为真时尝试获取SSM参数值。运行此脚本的相应lambda代码在尝试运行以下boto3脚本时(在运行get_ssm_parameters_by_path时)抛出以下错

  • 我可以从NodeJS本地的AWS SSM参数存储中检索数据,但当我将代码移动到lambdas时就无法检索数据。 我搜索了很多使用NodeJ设置lambda的例子,但没有找到这些例子,这些NodeJ不使用“无服务器”框架。 我知道我错过了一些简单的东西。我只是还不知道是什么。 我已授予lambda的IAM策略以下权限: 定义本地数据。在我的lambda中,我得到错误:“{typeerror:Cann

  • 问题内容: 有人可以让我知道为什么下面的代码仅从参数存储中获取一些条目吗? 问题答案: GetParametersByPath是一个分页的操作。每次调用后,您必须从结果对象中检索,如果它不是null也不为空,则必须进行另一个调用,并将其添加到请求中。 这是一个使用的示例,它具有相同的行为:

  • 问题内容: 我有以下界面: 我想反射性地(在Foo的实现上)调用。 但是,参数在数组中 ,我不知道它的大小。 以下内容不起作用: 那是行不通的,因为它受到编译器作为单个参数的威胁,并且该数组未“扩展”为vararg,而是被(内部)包装为另一个具有单个元素的数组,即 在这种情况下,我该如何调用,以使阵列受到vararg的威胁? 或更笼统的问题:当参数在数组中时,如何调用vararg方法?直到运行时我

  • 我正在使用AWS Clouwatch事件规则调用一个基于Cron调度的python lambda函数,该函数运行良好。现在,我可以使用AWS Cloudformation将参数从cloudwatch偶数规则传递到这个lambda函数中吗?请你带路好吗?请参见以下我的cfn模板:

  • 我需要制作两个lambda函数,一个用参数调用另一个,被调用的函数将参数打印出来。我很难让它工作:第一个函数: 请告知我应该在被调用函数中输入什么代码才能接收参数“hello Jenny”?非常感谢。