标签: aws-parameter-store

AWS Lambda 无法连接到 Parameter Store

我有一个 AWS Lambda(java),我尝试进行测试以检索存储在 Parameter Store 上的密码。这是我的一段代码:

GetParameterRequest parameterRequest = new GetParameterRequest();
        AWSSimpleSystemsManagement client = AWSSimpleSystemsManagementClientBuilder.defaultClient();
        parameterRequest.withName("my-password-key")
                .setWithDecryption(true);
        GetParameterResult parameterResult = client.getParameter(parameterRequest);
        password = parameterResult.getParameter().toString();
Run Code Online (Sandbox Code Playgroud)

与我的 lambda 关联的(security groupNACL)已打开所有入站和出站(任何端口和任何 IP 地址)。

我的 lambda 在私有子网内运行。

当我执行 lambda(由 API 网关事件触发)时,出现以下错误:

Unable to execute HTTP request: Connect to ssm.eu-central-1.amazonaws.com:443 [ssm.eu-central-1.amazonaws.com] failed: connect timed out: com.amazonaws.SdkClientException
Run Code Online (Sandbox Code Playgroud)

由于该错误是关于超时错误,因此我认为这不是角色问题。

我不知道该去哪里看。任何帮助表示赞赏。

谢谢。

抄送

amazon-web-services aws-lambda aws-parameter-store

3
推荐指数
1
解决办法
3583
查看次数

如何使用node.js和aws-sdk从lambda访问aws参数存储

我创建了一个lambda和云形成模板,该模板向lambda授予对参数存储和秘密管理器的访问权限。当我测试lambda时,我在export.handler函数之外具有以下函数:

function getParameterFromStore(param){
    let promise = new Promise(function(resolve, reject){
        console.log('++ ' + param.Path);
        servmgr.getParametersByPath(param, function(err, data){
            if(err){
                reject(console.log('Error getting parameter: ' + err, err.stack));
            } else {
                resolve(data);
            }
        });
    });

   let parameterResult = promise.then(function(result){
    console.log('---- result: '+ JSON.stringify(result));
        return result;
    });
   return parameterResult;
};
Run Code Online (Sandbox Code Playgroud)

servmgr 被实例化为 var servmgr = new AWS.SSM();

当我从export.handler函数调用此函数时,我这样做是:

myFirstParam =  { Path : '/myPath/Service/servicesEndpoint'};

let endpointResult = getParameterFromStore(myFirstParam);
Run Code Online (Sandbox Code Playgroud)

在lambda中,我有一个函数来检索包装在promise中的export.handler函数bt之外定义的参数。

当我运行/测试此lambda时,返回的对象始终是未定义的……我得到Parameters [],但没有值。

2019-02-20T21:42:41.340Z    2684fe88-d552-4560-a477-6761f2de6717    ++ /myPath/Service/serviceEndpoint
2019-02-20T21:42:41.452Z    2684fe88-d552-4560-a477-6761f2de6717    ---- result: {"Parameters":[]}
Run Code Online (Sandbox Code Playgroud)

如何在运行时如何将参数值返回给lambda?

更新

基于Thales的建议/答案,我将lambda简化为:

const getParameterFromStoreAsync …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services promise aws-lambda aws-parameter-store

3
推荐指数
1
解决办法
2727
查看次数

AWS Parameter store 吞吐量限制是针对每个密钥还是整个服务?

我发现 AWS 为 Parameter Store 描述的以下限制。

Default throughput: 40 (Shared by the following API actions: GetParameter, GetParameters, GetParametersByPath)

Higher throughput: 100 (GetParametersByPath)

Higher throughput: 1000 (Shared by the following API actions: GetParameter and GetParameters)

For more information about Parameter Store throughput, see Increasing Parameter Store Throughput in the AWS Systems Manager User Guide.
Run Code Online (Sandbox Code Playgroud)

我想知道限制是针对单个密钥还是针对整个 Parameter Store 服务(每个帐户或区域)

amazon-web-services aws-parameter-store

3
推荐指数
1
解决办法
1965
查看次数

如何使用无服务器框架创建参数存储配置值?

我有以下使用无服务器框架项目的 serverless.yml 文件创建的队列:

resources:
  Resources:
    myAppSQSQueue:
      Type: "AWS::SQS::Queue"
      Properties:
        QueueName: "my-app-sqs-queue-${opt:stage, self:provider.stage}"
Run Code Online (Sandbox Code Playgroud)

如何获取创建的队列的 URL 并将其作为参数存储在 AWS Systems Manager 中?我需要将其存储在那里,以便该应用程序之外的其他应用程序知道如何访问它。

amazon-sqs serverless-framework aws-ssm aws-parameter-store

3
推荐指数
1
解决办法
3645
查看次数

如何从节点中的 SAM lambda 本地访问 SSM 参数存储

我有一个带有节点的 lambda,对于本地部署,我使用 SAM CLI。此 lambda 需要 SSM 参数存储中的一些参数才能连接到数据库。除了区域之外,我还配置了 AWS_ACCES_KEY_ID 和 AWS_SECRET_ACCESS_KEY 作为环境变量。当执行本地 lamda 时,我没有收到任何错误,因为它转到了 aws,但它没有给我带来任何东西。这不是代码问题,因为如果我已经将其部署在 aws 中,它就可以正常工作。我不知道是否需要进行其他配置才能使其工作。

模板.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  ciencuadras-appraisal-request

  Sample SAM Template for ciencuadras-appraisal-request

Parameters:
  Stage:
    Type: String
    Default: dev
    
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Resources:
  ApiDeployment:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Ref Stage

  RequestAppraisalFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction    
    Properties:
      CodeUri: dist/
      Handler: main.handler
      Runtime: nodejs14.x
      Environment:
        Variables:
          AWS_REGION: 'us-east-1'    
      Events:
        RequestAppraisal:
          Type: Api # …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda aws-sam-cli aws-parameter-store

3
推荐指数
1
解决办法
3727
查看次数

aws-sdk-mock 是否支持模拟 AWS SSM(参数存储)?

我尝试使用 aws-sdk-mock 和下面的代码来模拟 AWS SSM,但不起作用。不抛出错误,从实际存储中获取值getParametersByPath调用时从实际存储中获取值。

我查看了 aws-sdk-mock 文档,但似乎没有模拟 ssm 的示例,是否支持。

AWSMock.mock('SSM', 'getParametersByPath', (params, callback) => {
  callback(null, mockResponse);
});
Run Code Online (Sandbox Code Playgroud)

jestjs ssm aws-sdk-nodejs aws-sdk-mock aws-parameter-store

2
推荐指数
1
解决办法
5708
查看次数

为什么 JavaScript aws-sdk ssm getParameter 需要所有参数的权限,而不仅仅是我需要的参数?

我在我的 aws lambda 中使用 javascript,它调用 SSM getParameter,并且 lambda 的执行角色对我想要获取其值的密钥具有适当的权限。

最初,我收到了这个特定的错误:

ERROR   AccessDeniedException: User: arn:aws:sts::123456789:assumed-role/my-role/my-lambda is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:123456789:parameter/my/parameter
Run Code Online (Sandbox Code Playgroud)

具体错误是有道理的,因此我更正了我的策略,因为我不小心将 GetParameters 放在了 GetParameters 中。但现在,我收到了这个可疑的错误(请注意末尾的*):

ERROR   AccessDeniedException: User: arn:aws:sts::123456789:assumed-role/my-role/my-lambda is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:123456789:*
Run Code Online (Sandbox Code Playgroud)

这个错误对我来说没有任何意义。为什么我需要访问每个参数?我只需要我想要的那个。

这是相关代码:

ERROR   AccessDeniedException: User: arn:aws:sts::123456789:assumed-role/my-role/my-lambda is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:123456789:parameter/my/parameter
Run Code Online (Sandbox Code Playgroud)

以及权限策略(在 CloudFormation 模板中创建)

ERROR   AccessDeniedException: User: arn:aws:sts::123456789:assumed-role/my-role/my-lambda is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:123456789:*
Run Code Online (Sandbox Code Playgroud)

编辑:

更改权限策略以匹配错误消息后,我现在遇到这个奇怪的错误:

ERROR   ValidationException: Parameter name: can't be …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services aws-lambda aws-parameter-store

2
推荐指数
1
解决办法
1592
查看次数

是否可以通过 SSM 命令更新 AWS SSM 参数存储中的参数?

根据需求,我们希望在 SSM 参数存储中存储一个参数,并且应该能够通过 SSM 命令更新参数值。

从初步研究来看,我们可以在 Target EC2 实例上运行 SSM 命令。但是无法找到以目标作为参数存储来运行命令的方法。请帮忙。

amazon-web-services aws-ssm aws-parameter-store

1
推荐指数
1
解决办法
8936
查看次数