0

我正在使用 AWS 的 Parameter Store 来存储 String 参数值。我在从 Lambda 函数中获取参数时使用以下代码:

const ssm = require('aws-sdk/clients/ssm');
const getConfig = (prefix) => {
  return ssm.getParameter({ Name: `/${prefix}/config`}).promise()
    .then(resp => JSON.parse(resp.Parameter.Value))
    .catch(err => console.error(err));
};

但是在从 AWS 控制台运行 Lambda 时,我不断收到以下错误:

ERROR   AccessDeniedException: User: arn:aws:sts::XXX:assumed-role/lambdaExecutionRole is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:XXX:parameter/get/getValue

我尝试添加对角色的管理员访问权限:lambdaExecutionRole,但现在出现此错误:

ERROR   SyntaxError: Unexpected token h in JSON at position 0
    at JSON.parse (<anonymous>)
    at /var/task/myFile.js:2:955529
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Runtime.e.handler (/var/task/myFile.js:2:1065241)

我什至尝试在此文档之后添加 ssm 权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
        "Sid": "GetParam1",
        "Effect": "Allow",
        "Principal": {
          "Service": "lambda.amazonaws.com"
         },
         "Action": "ssm:GetParameter",
         "Resource": "*"
    }
  ]
}
- An error occurred: AssumeRole policy may only specify STS AssumeRole actions.
- An error occurred: Has prohibited field Resource 

知道我可能在这里缺少什么吗?提前致谢。

4

1 回答 1

0

错误语法错误:位置 0 处 JSON 中的意外标记 h

当您添加Administrator权限时,会告诉您从参数存储中获取并最终传递给JSON.parsewith的信息resp.Parameter.Value是不正确的。

您的政策也是错误的,您正在IAM PolicyTrust Policy. 它们应该单独定义。

角色术语和概念

lambda 的信任策略IAM Role

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

用于 Lambda IAM 角色* 的 IAM 策略以允许访问 SSM 参数存储**

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "GetParam1",
        "Effect": "Allow",
         "Action": "ssm:GetParameter",
         "Resource": "*"
    }
  ]
}

这就是这些错误的原因

  • 发生错误:AssumeRole 策略只能指定 STS AssumeRole 操作。
  • 发生错误:已禁止字段资源
于 2021-04-05T17:23:52.893 回答