配置单个aws cli操作以调用api网关方法的插件

awscli-plugin-execute-api的Python项目详细描述


awscli插件执行api

配置单个aws cli操作以调用api网关/lambda方法的插件

快速启动

使用pip

安装
$ pip install awscli-plugin-execute-api

如果您在自制程序中安装了awscli,请使用其捆绑的python:

$ /usr/local/opt/awscli/libexec/bin/pip install awscli-plugin-execute-api

注册插件

$ aws configure set plugins.execute-api awscli_plugin_execute_api

配置操作终结点

首先使用execute-api:Invoke权限为iam配置配置文件:

$ exportAWS_PROFILE=myprofile

$ aws configure
AWS Access Key ID [None]: AKIA...
AWS Secret Access Key [None]: pWim...
Default region name [None]: us-east-1
Default output format [None]: json

接下来,为操作及其api网关调用url配置插件:

$ aws configure set dynamodb.update-table https://m303r7o808.execute-api.us-east-1.amazonaws.com/Prod/update-table
<详细信息>您可以查看或手动配置`$home/.aws/config`…
[plugins]
execute-api = awscli_plugin_execute_api

[profile myprofile]
region = us-east-1
output = json
dynamodb =
    update-table = https://m303r7o808.execute-api.us-east-1.amazonaws.com/Prod/update-table

运行操作

现在运行命令:

$ aws dynamodb update-table --table-name $TABLE_NAME --sse-specification Enabled=false
An error occurred (ValidationException) when calling the UpdateTable operation: Custom error from Lambda handler
<详细信息>您可以使用“--debug”标志来验证端点…
$ aws dynamodb update-table --debug --table-name $TABLE_NAME
Plugin awscli_plugin_execute_api: Config [myprofile] dynamodb.update-table => URL https://m303r7o808.execute-api.us-east-1.amazonaws.com/Prod/update-table
Plugin awscli_plugin_execute_api: renamed X-Amz-Target DynamoDB_20120810.UpdateTable

$ aws dynamodb describe-table --debug --table-name $TABLE_NAME
Plugin awscli_plugin_execute_api: Config [myprofile] dynamodb.describe-table not found

动机

出于安全原因,我们希望让iam用户访问aws api调用功能的limited subset。例如,在dynamodb update-table操作中,我们希望允许用户修改:

  • 全局索引

但不允许他们修改:

  • 提供的吞吐量
  • 服务器端加密

“无服务器”解决方案包括:

  • IAM用户

    • 禁止dynamodb:UpdateTable
    • 允许在API网关资源上execute-api:Invoke的策略
    • 访问键
  • API网关方法

    • 发送update-table请求的URL
    • AWS U IAM授权
  • lambda函数

    • 允许dynamodb:UpdateTable
    • 验证并执行update-table请求的代码
  • aws cli

    • dynamodb update-table命令的自定义终结点url
    • API网关的请求签名

此插件为单个cli操作注册一个url并自动使用它。

$ aws configure set dynamodb.update-table https://m303r7o808.execute-api.us-east-1.amazonaws.com/Prod/update-table
$ aws dynamodb update-table --table-name $TABLE_NAME --sse-specification Enabled=false
An error occurred (ValidationException) when calling the UpdateTable operation: Modifying SSESpecification is not allowed

故障排除

IAM

cli用户需要API execution permissions

{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["execute-api:Invoke"],"Resource":["arn:aws:execute-api:us-east-1:303718836660:m303r7o808/*/POST/update-table"]}]}

lambda

cli操作位于X-Target头中,因为X-Amz-Target

学分

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Rest DSL路由无法启动路由,因为同一端点不允许有多个使用者   jvm有没有像JConsole或VisualVM这样的工具可以告诉我“类、对象、引用变量在java中存储在哪里?”   java为什么我的列表中的所有元素看起来都一样?   java运行时。运行shell脚本的exec无法打开文件   JPopupMenu的JMenuItem的java热键   会话在Java中被覆盖   如何在java中去除字符串中的尖锐重音?   java Mockito监视一个接口,模拟它的默认方法,获取NullPointerException   javascript如何在jquery中禁用同一时间选择   将数组列表附加到现有CSV文件,但它会附加并清除存储在Java文件中的以前的数据   java从我的jar中访问pdf文件   java Sonar issue参数必须为非Null,但标记为可为Null   java Salesforce流式API:在网络故障之后和重新订阅之前获取事件   在Java 1.8.0_65上运行Play2.0应用程序时出现playframework错误   java为什么字母的ASCII由方法自动转换。toCharArray()?   java如何知道JDialog是否关闭?   java向服务器发送POST请求,服务器的响应为null,启动   java如何设置JTable中特定单元格的值?   ImagePlus中的java保存问题