帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:aws-lambda  Lambda  Gateway  亚马逊  sam  GATE  aws  credential  
Amazon API Gateway sample using Amazon Cognito credentials through AWS Lambda

  • 源代码名称:api-gateway-secure-pet-store
  • 源代码网址:http://www.github.com/awslabs/api-gateway-secure-pet-store
  • api-gateway-secure-pet-store源代码文档
  • api-gateway-secure-pet-store源代码下载
  • Git URL:
    git://www.github.com/awslabs/api-gateway-secure-pet-store.git
  • Git Clone代码到本地:
    git clone http://www.github.com/awslabs/api-gateway-secure-pet-store
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/awslabs/api-gateway-secure-pet-store
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • 设置安全宠物商店

    简介

    Secure是一个用Java构建的应用程序,用于 协议使用网关将Lambda函数公开为HTTP端点,使用身份和访问管理( IAM ) 和 Amazon Cognito获取用户的临时凭证,并授权访问它的API 。

    安全宠物店

    • 首先,创建 Amazon Cognito身份池。 标识池应只允许收费的自定义身份验证提供程序。 Cognito Create Identity Pool Screenshot
    • 身份池创建过程的下一步将设置IAM角色。 现在只需单击允许创建身份池。 Cognito Setup IAM Role Screenshot
    • 现在我们已经创建了Cognito标识池,我们需要设置DynamoDB表。 应用程序需要 2张记录表: 一个用于用户,一个用于宠物。 用户和宠物的带注释的对象是 com.amazonaws.apigatewaydemo.model.pet.Petcom.amazonaws.apigatewaydemo.model.user.User 在应用程序源代码中。
    • 用户的表应该只有一个 string 类型的Hash Key,名为
    • 宠物表也只有一个类型为 petId的Hash Key 类型。

    构建并将应用程序部署到AWS的Lambda

    需要修改应用程序以反映上面创建的资源名称。 修改配置之后,打包应用程序并将它的部署为具有必要执行角色的AWS Lambda函数。

    • 配置应用程序以使用正确的Cognito身份池和DynamoDB表。 应用程序读取 static 变量中的配置,该变量在 CognitoConfigurationDynamoDBConfiguration 中声明为 com.amazonaws.apigatewaydemo.configuration 软件包打开 2类并在属性上设置正确的值。
    类属性说明
    CognitoConfigurationIDENTITY_POOL_IDCognito身份池的唯一标识符。 这些值在 Amazon Cognito控制台中可用。
    CognitoConfigurationCUSTOM_PROVIDER_NAME标识池创建过程中指定的开发人员提供程序的NAME 。 你可以从编辑标识池页访问这里值。
    DynamoDBConfigurationUSERS_TABLE_NAME创建用户名和密码的DynamoDB表的NAME
    DynamoDBConfigurationPET_TABLE_NAME创建宠物的DynamoDB表的NAME
    • 现在应用程序已经配置好了,可以构建它并使用 Maven 插件将它打包为AWS服务器。 打开终端并导航到应用程序文件夹,然后运行 mvn package 。 这将创建一个目标目录,并在它的内部 api-gateway-secure-pet-store-1.0-SNAPSHOT.jar

    • 我们将创建一个需要访问上面创建的资源的AWS Lambda函数。 使用以下策略在AWS身份和访问管理中创建新角色:

      AWS的Lambda执行角色的信任策略:

    {"版本":"2012-10-17","语句": [ {"效果":"允许","主体": {"服务":"lambda.amazonaws.com" },"操作": ":assumerole"} ] }

     Policy for the AWS Lambda execution role:
     ```json
    {
    "Version":"2012-10-17",
    "Statement": [
     {
    "Effect":"Allow",
    "Action": [
    "cognito-identity:GetOpenIdTokenForDeveloperIdentity"
     ],
    "Resource": [
    "<COGNITO_IDENTITY_POOL_ARN>"
     ]
     },
     {
    "Effect":"Allow",
    "Action": [
    "dynamodb:GetItem",
    "dynamodb:PutItem",
    "dynamodb:Scan",
    "dynamodb:UpdateItem"
     ],
    "Resource": [
    "<DYNAMODB_PETS_TABLE_ARN>",
    "<DYNAMODB_USERS_TABLE_ARN>"
     ]
     },
     {
    "Effect":"Allow",
    "Action": [
    "logs:*"
     ],
    "Resource": [
    "*"
     ]
     }
     ]
    }
    • 打开AWS控制台并创建一个新的函数。 跳过blueprint选择页面,直接转到配置函数步骤。 在这个屏幕中,给函数一个 NAME 并选择作为运行时。 AWS将要求你上传一个ZIP文件以便你的函数。 你可以直接上传由 Maven 进程创建的英镑的jar 文件。
    • 作为函数的处理程序,输入 com.amazonaws.apigatewaydemo.RequestRouter::lambdaHandler
    • 使用上一步中创建的执行角色。 Lambda Create Function Screenshot
    • 现在Lambda函数已经准备好了,我们可以在Amazon网关中设置API结构了。 我们将使用Swagger格式并将它的导入到Amazon中,从而轻松创建整个 API 。
    • src/main/resources/Swagger.yaml 文件中打开Swagger定义。 在文件中搜索 x-amazon-apigateway-integration 。 这个标记定义了API网关和后端( 我们的Lambda函数) 之间的集成点。 确保Lambda函数的uri 是正确的,它应该如下所示:
    arn:aws:apigateway:<YOUR REGION>:lambda:path/2015-03-31/functions/<YOUR LAMBDA FUNCTION ARN>/invocations
    • 你可以在Swagger文件的credentials 字段中指定角色,在 uri 字段旁边。 /pets 方法使用特殊角色: arn:aws:iam::*:user/* 。这告诉API网关使用调用方凭据调用Lambda函数。 对于 /users/login ( 文件中的第一个 2路径),你还必须指定调用角色API网关,该网关应该使用它来调用Lambda函数。 你可以使用以下策略,从身份和访问管理( IAM ) 控制台为 /users/login 方法创建新的调用角色:

      AWS的Lambda调用角色的信任策略:

    {"版本":"2012-10-17","语句": [ {"效果":"允许","主体": {"服务":"apigateway.amazonaws.com" },"操作": ":assumerole"} ] }

     Policy for the AWS Lambda invocation role:
     ```json
    {
    "Version":"2012-10-17",
    "Statement": [
     {
    "Effect":"Allow",
    "Action": [
    "lambda:InvokeFunction"
     ],
    "Resource": [
    "<LAMBDA_ARN>"
     ]
     }
     ]
    }
    • 在角色摘要页面中复制角色 ARN,并将它的粘贴到Swagger文件的和 /login 方法的credentials field 。

    • 既然已经为API生成了所有资源,并且拥有了所有的资源,那么还应该修改身份池的访问策略,以便为经过身份验证的用户授予对 Amazon API Gateway的访问。

    • 如果你在 IAM console中导航到角色列表,并打开你的Cognito身份池的认证角色,则该角色可能被称为 cognito_"identitypoolname"auth_role

    • 将策略更改为:

    {"版本":"2012-10-17","语句": [ {"效果":"允许","操作": ["execute-api:Invoke" ],"资源":["*" ] } ] }

    * Once you have modified and saved the Swagger file to call the correct Lambda function and use your roles [create a new API in Amazon API Gateway](https://console.aws.amazon.com/apigateway/home?region=us-east-1#/apis/create) with the **Import from Swagger** feature.
    * You should now be able to deploy and test your **API Gateway Secure Pet Store** API with Amazon API Gateway
    # Setting up the iOS sample
    ## Introduction
    The iOS sample application is located under the ```/src/main/resources/ios_sample folder```. It uses [CocoaPods](https://cocoapods.org/) to retrieve its dependencies and includes an iOS client SDK generated with API Gateway.
    ## Step by Step setup
    * If you don't have [CocoaPods](https://cocoapods.org/) installed, follow the installation instructions on the website
    * The first step is to copy the contents of the `ios_sample` folder to a new project directory.
    * Open a terminal and navigate to the new project directory `cd/your/project/dir`
    * To install the dependencies using CocoaPods run `pod install` from the terminal in the project folder
    * Open the new `.xcworkspace` file created by CocoaPods in the project folder using XCode
    * From XCode open the `PetTest/ClientSDK/PETLambdaMicroserviceClient.m` file
    * On line 117 change the `*URLString` definition to match the url of your API deployment with Amazon API Gateway
    ## The AWSCredentialsProvider
    In order to provide credentials to our SDK, and make calls to the Secure Pet Store backend, we have created a custom implementation of the `AWSCredentialsProvider` object. The `AWSCredentialsProvider` interface declares a single method, `(AWSTask *)refresh`. This method is called by the generated SDK whenever it needs credentials and is in charge of fetching a new set of temporary AWS credentials from your backend and storing them in its `_accessKey`, `_secretKey`, and `session_key` properties.
    Our custom implementation is located under `PetTest/APIGSessionCredentialsProvider`. The refresh method uses the generated client to call the `login` method with a cached username and password. The login method from our backend verifies the credentials and responds with a set of temporary AWS credentials.


    文章标签:API  sam  亚马逊  aws  GATE  Gateway  Lambda  aws-lambda  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语