我正在尝试在 js 处理程序中获取 ssm 参数,如下所示:

module.exports.post = (event, context, callback) => { 
 
  var params = { 
  Name: 'myParameter',   
  WithDecryption: true || false 
}; 
 
ssm.getParameter(params, function(err, data) { 
  if (err)   console.log(err, err.stack);    
  else       console.log(data);         
}); 
 
 
}; 

并且我在我的 serverless.yml 文件中添加了以下权限 Angular 色

iamRoleStatements: 
  - Effect: Allow 
    Action: 
      - ssm:GetParameters 
      - ssm:GetParameter 
      - ssm:DescribeParameters 
      - kms:Encrypt 
      - kms:Decrypt 
    Resource: "*" 

使用 CLI 我可以成功执行 aws ssm get-parameter --names myParameter

但是当我调用该函数时,我在 cloudWatch 中收到以下错误

AccessDeniedException: User: myUser is not authorized to perform: ssm:GetParameter on resource: myResource/myParameter

我已经尝试使用 getParameters 函数,获取确切的名称资源但仍然是相同的错误消息。

如有任何帮助,我们将不胜感激。

请您参考如下方法:

刚刚使用无服务器创建了一个项目,它按预期工作。

权限在 serverless.yml 中设置,只有执行代码所需的授权。

serverless.yml

service: poc-lambda-ssm 
 
provider: 
  name: aws 
  runtime: nodejs8.10 
  variableSyntax: "\\${((?!AWS)[ ~:a-zA-Z0-9._'\",\\-\\/\\(\\)]+?)}" 
  iamRoleStatements: 
  - Effect: Allow 
    Action: 
      - ssm:GetParameter 
    Resource: 
      - 'Fn::Join': 
        - ':' 
        - - 'arn:aws:ssm' 
          - Ref: 'AWS::Region' 
          - Ref: 'AWS::AccountId' 
          - 'parameter/my-secure-param' 
  - Effect: Allow 
    Action: 
      - kms:Decrypt 
    Resource: 
      - 'Fn::Join': 
        - ':' 
        - - 'arn:aws:kms' 
          - Ref: 'AWS::Region' 
          - Ref: 'AWS::AccountId' 
          - 'key/alias/aws/ssm' 
 
functions: 
  hello_ssm: 
    handler: handler.hello_ssm 

handler.js

'use strict'; 
 
const AWS = require("aws-sdk") 
 
AWS.config = { 
    region:"us-east-1" 
}; 
 
const ssm = new AWS.SSM({apiVersion: '2014-11-06'}); 
 
module.exports.hello_ssm = function(event, context, callback) { 
  var params = { 
    Name: 'my-secure-param',  
    WithDecryption: true  
  }; 
 
  ssm.getParameter(params, function(err, data) { 
      if (err) callback(err); 
      else callback(null,"my secure param is: "+data.Parameter.Value);           
  }); 
}; 

并在 AWS System Manager 中创建了一个名为 my-secure-param 的参数,类型为 SecureString

你也可以查看我的 PoC Lambda SSM项目。在这个项目中,我使用无服务器开发 lambda,它通过使用 invoke local -f hello_ssm 在本地调用。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!