【问题标题】:How to add desired policy to lambda with cloudformation & SAM如何使用 cloudformation 和 SAM 向 lambda 添加所需的策略
【发布时间】:2021-09-15 13:47:28
【问题描述】:

我想创建一个可以访问 dynamoDB 和其他 lambda 函数的 lambda 函数。 但是,我不知道如何为 SAM 制作适当的 YAML 模板以授予适当的权限。

特别是,我不明白令人困惑的 3 个条目,包括定义 权限(AWS::IAM::Role、AWS::Serverless::Function、AWS::Lambda::Permission)。我应该使用哪个条目来添加必要的权限?

下面是我的 YAML。但是创建的 my_lambda_role 没有 AWSLambdaRole 策略和 dynamoDB 策略。因此,lambda 无法访问 dynamoDB。请告诉我如何解决它。

  MyLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service: lambda.amazonaws.com
          Action: sts:AssumeRole
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      - arn:aws:iam::aws:policy/service-role/AWSLambdaRole
      RoleName: my_lambda_role

  OnConnectFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: onconnect/
      Handler: index.lambda_handler
      MemorySize: 256
      Role: !GetAtt MyLambdaRole.Arn
      Runtime: python3.6
      Environment:
        Variables:
          TABLE_NAME: !Ref TableName
      Policies:
      - DynamoDBCrudPolicy:
          TableName: !Ref TableName
      - Statement:
        - Effect: Allow
          Action:
          - 'execute-api:ManageConnections'
          Resource:
          - 'arn:aws:execute-api:*:*:*/@connections/*'

  OnConnectPermission:
    Type: AWS::Lambda::Permission
    DependsOn:
      - MyAPI
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref OnConnectFunction
      Principal: apigateway.amazonaws.com

【问题讨论】:

    标签: aws-lambda amazon-dynamodb amazon-cloudformation


    【解决方案1】:

    您可以添加缺少的政策。取决于你想要什么,但如果你想要完全访问,那么你可以添加AmazonDynamoDBFullAccess

          ManagedPolicyArns:
          - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
          - arn:aws:iam::aws:policy/service-role/AWSLambdaRole
          - arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess
    

    【讨论】:

    • 我收到以下错误。 “策略 arn:aws:iam::aws:policy/service-role/AmazonDynamoDBFullAccess 不存在或不可附加。(服务:AmazonIdentityManagement;状态代码:404;错误代码:NoSuchEntity”
    • @nemy 检查您的 IAM 政策。也许该政策对您来说是不同的,例如AmazonDynamoDB_FullAccess?
    • AmazonDynamoDBFullAccess 存在。这意味着这种方法行不通。
    • @nemy 角色是正确的,因为你就是这样做的。您确定您的代码实际上代表了您的真实代码和情况吗?
    • 是的,代码是真实的。我还尝试添加 AWSLambda_FullAccess 并且也遇到了同样的错误。似乎不允许 *FullAccess。
    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 2018-09-28
    • 2023-01-27
    • 2021-09-25
    • 2021-07-11
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多