首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS: ssm:GetParameters AccessDeniedException

AWS: ssm:GetParameters AccessDeniedException
EN

Stack Overflow用户
提问于 2017-11-21 14:21:31
回答 1查看 8.8K关注 0票数 12

我试图在js处理程序中获得ssm参数,如下所示:

代码语言:javascript
复制
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文件中

代码语言:javascript
复制
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未被授权执行:ssm:myUser:

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

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 04:09:26

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

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

serverless.yml

代码语言:javascript
复制
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

代码语言:javascript
复制
'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系统管理器中创建了一个名为my-secure-param的参数,其类型为SecureString

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47415389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档