AWS: ssm:GetParameters AccessDeniedException



我试图将SSM参数放入JS处理程序中如下:

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);        
});

};

,我添加了以下权限角色

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

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

但是当我调用功能时,我在CloudWatch中获得以下错误

AccessDeniedException:用户:Myuser无权执行: SSM:资源上的GetParameter: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);          
  });
};

并创建了一个称为 my-Secure-Param 的参数

您还可以检查我的POC Lambda SSM项目。在此项目中,我使用无服务器来开发lambda,并且使用Invoke local -f hello_ssm。

相关内容

  • 没有找到相关文章

最新更新