Amazon web services SSM get参数的AWS SAM管理策略

Amazon web services SSM get参数的AWS SAM管理策略,amazon-web-services,aws-lambda,aws-serverless,aws-sam-cli,serverless-application-model,Amazon Web Services,Aws Lambda,Aws Serverless,Aws Sam Cli,Serverless Application Model,对于Lambda函数的ssm:GetParameter*权限,是否有类似于DynamoDBReadPolicy的托管策略?我正在使用aws sam cli并尝试遵循,但当我在使用sam local start api时尝试获取参数时,出现以下错误: 无效操作:请求的操作或操作无效。验证是否正确键入了操作 以下是我尝试获取参数的代码段: const ssm = new AWS.SSM(); const param = { Name: "param1", WithDecryption

对于Lambda函数的ssm:GetParameter*权限,是否有类似于DynamoDBReadPolicy的托管策略?我正在使用aws sam cli并尝试遵循,但当我在使用sam local start api时尝试获取参数时,出现以下错误:

无效操作:请求的操作或操作无效。验证是否正确键入了操作

以下是我尝试获取参数的代码段:

const ssm = new AWS.SSM();
const param = {
    Name: "param1",
    WithDecryption: true
};
const secret = await ssm.getParameter(param).promise();
相关模板部分如下所示。谢谢

KeyAlias:
    Type: AWS::KMS::Alias
    Properties:
      AliasName: 'param1Key'
      TargetKeyId: !Ref Key
Key:
    Type: AWS::KMS::Key
    Properties:
      KeyPolicy:
        Id: default
        Statement:
        - Effect: Allow
          Principal:
            AWS: !Sub arn:aws:iam::${AWS::AccountId}:root
          Action:
          - 'kms:Create*'
          - 'kms:Encrypt'
          - 'kms:Describe*'
          - 'kms:Enable*'
          - 'kms:List*'
          - 'kms:Put*'
          - 'kms:Update*'
          - 'kms:Revoke*'
          - 'kms:Disable*'
          - 'kms:Get*'
          - 'kms:Delete*'
          - 'kms:ScheduleKeyDeletion'
          - 'kms:CancelKeyDeletion'
          Resource: '*'
          Sid: Allow root account all permissions except to decrypt the key
        Version: 2012-10-17

LambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ../
      Handler: app.lambda
      Runtime: nodejs8.10
      Policies:
      - DynamoDBReadPolicy:
          TableName: !Ref Table
      - KMSDecryptPolicy:
          KeyId: !Ref Key
      # I think I need the ssm policy here

可用的SAM策略模板包括。这些策略模板都不授予任何SSM操作的权限,因此您目前无法使用SAM策略模板授予AWS Lambda函数对SSM参数的访问权限

作为一种解决方法,您可以手动将所需的策略语句内联添加到策略中。这看起来像:

LambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ../
      Handler: app.lambda
      Runtime: nodejs8.10
      Policies:
      - DynamoDBReadPolicy:
          TableName: !Ref Table
      - KMSDecryptPolicy:
          KeyId: !Ref Key
      - Statement:
        - Action:
            - ssm:GetParameter
          Effect: Allow
          Resource: arn:aws:ssm:region:account-id:parameter/parameter_name

您还应该考虑打开一个请求,为山姆添加SSM参数访问的策略模板,因为这样的模板当然是表示这种权限的一种更方便的方式。根据我的经验,开发人员非常友好,总是欢迎这样的添加

更新:AWS SAM中现在有一个SSMParameterReadPolicy可用,因此您现在可以不使用解决方案,只需执行以下操作:

LambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ../
      Handler: app.lambda
      Runtime: nodejs8.10
      Policies:
      - DynamoDBReadPolicy:
          TableName: !Ref Table
      - KMSDecryptPolicy:
          KeyId: !Ref Key
      - SSMParameterReadPolicy:
          ParameterName: parameter_name

谢谢这有助于在部署后获取参数,但在本地测试时,仍然会出现无效操作错误。也许本地运行时SSM不存在?没错。使用AWS SAM CLI在本地运行应用程序时,本地也没有可用的SSM参数存储。巧合的是,我不久前就提出了一个问题:SSMParameterReadPolicy现在已经存在