簡體   English   中英

用於訪問密鑰/秘密密鑰授權的AWS IAM API Cloudformation幫助

[英]AWS IAM API Cloudformation help for Access Key/Secret key authorization

我們目前正在使用API​​密鑰來保護對API網關的訪問。 但是,我們正在使用具有訪問/密鑰的IAM模型。 我了解到swagger不允許我們這樣做(目前我們在swagger中設置了api_key以啟用API密鑰身份驗證)。

我為以下各種操作創建了所需的策略:

  SvcAccountPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: !Sub 'iam-${EnvTag}'
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Action:
              - 'execute-api:Invoke'
            Resource:
              - !Sub 'arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${SomeApi}/*/GET/*'
              - !Sub 'arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${SomeApi}/*/POST/*'
              - !Sub 'arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${SomeApi}/*/PUT/*'
              - !Sub 'arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${SomeApi}/*/DELETE/*'
      Users:
        - !Ref userSvcAcct

我的lambda函數如下所示。 我仍然對雲形成還不陌生,希望在此方面添加lambda授權者(我相信它將在“事件”->“ ApiPost /獲取等”部分中)方面會有所幫助,我可以使用此秘密/訪問鍵。

  FtpUserMgmtLambda:
    Type: AWS::Serverless::Function
    Properties:
      Description: Lambda handler function for FTP user management
      Handler: 'handler.UserManagementHandler::handleRequest'
      Runtime: java8
      MemorySize: 512
      Timeout: 300
      FunctionName: !Ref LambdaFunctionName
      Role: !GetAtt UserMgmtLambdaRole.Arn
      CodeUri:
        Bucket: !Ref LambdaCodeS3Bucket
        Key: !Ref LambdaCodeFileName
      VpcConfig:
        SomeConfig stuff here
      Environment:
        Variables:
          dbPort: !Ref UserStoreDbPort
          dbUser: !Ref UserStoreDbUserId
          dbName: !Ref UserStoreDbName
          environment: !Ref EnvTag
          basepath: 'somepath'
      Events:
        ApiPost:
          Type: Api
          Properties:
            RestApiId: !Ref SomeApi
            Path: /path
            Method: POST
            Auth: <<Dont know what to do here! HELP>>
        ApiGet:
          Type: Api
          Properties:
            RestApiId: !Ref SomeApi
            Path: /path
            Method: GET
            Auth: *<<Dont know what to do here! HELP>>*
      Tags:
        Name: !Ref LambdaFunctionName
        function: lambda function that manages ftp users

通過Swagger修復了此問題。 示例代碼如下:

---
swagger: "2.0"
info:
  version: "2017-10-17T17:47:44Z"
  title: "User-Mgt-API"
basePath: "/${environment}"
schemes:
  - "https"
paths:
  /ftpuser:
    post:
      x-amazon-apigateway-auth:
        type: aws_iam
      produces:
        - "application/json"
      responses:
        200:
          description: "When create user request successful"
          schema:
            $ref: "#/definitions/Empty"
        400:
          description: "When API vallidation error happens"
          schema:
            $ref: "#/definitions/Empty"
      x-amazon-apigateway-integration:
        responses:
          default:
               statusCode: "200"
        uri:
          Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${FtpUserMgmtLambda.Arn}/invocations
        passthroughBehavior: "when_no_match"
        httpMethod: "POST"
        contentHandling: "CONVERT_TO_TEXT"
        type: "aws_proxy"
 definitions:
  Empty:
    type: "object"
    title: "Empty Schema"

然后在cloudformation中,將以下內容添加到無服務器API定義中以處理swagger文件。 當然,

FtpUserMgmtApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: !Ref ApiName
      StageName: !Ref ApiDeploymentStageName
      DefinitionBody:
        Fn::Transform:
          Name: AWS::Include
          Parameters:
            Location: !Sub s3://${swaggerS3Location}

希望這可以幫助。 網絡上還有一個示例使用x-amazon-apigateway-any-method的示例,通過該示例我可以得出上述結論。 該鏈接在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM