【发布时间】:2021-03-11 23:37:07
【问题描述】:
我试图从一个角色受限的用户进行简单的部署——根本没有外部资源——我花了三个小时来研究 IAM,最终授予“受限”用户以下策略:
- AWSCloudFormationFullAccess
- AWSCodeDeployRoleForLambda
- AWSLambdaFullAccess
- AmazonAPIGatewayInvokeFullAccess
- IAMFullAccess
而我还是得到了
error occurred: ApiGatewayRestApi - User: arn:aws:iam::265913673281:user/test-deploy-user is not authorized to perform: apigateway:POST on resource: arn:aws:apigateway:us-west-2::/restapis (Service: AmazonApiGateway; Status Code: 403; Error Code: AccessDeniedException; Request ID: 09dd8d6f-3160-46ee-8220-c6053dca9f02; Proxy: null).
那时,我放弃并使用了root访问权限。
但这不可扩展。必须有一种方法可以真正做到这一点(更重要的是,除了试错之外的其他方法)。
(如果有帮助,我正在尝试部署 this example。它根本不起作用——我知道这令人震惊——直到我将其修改为详细的 here。说真的,亚马逊,它必须这么困难吗?)
更新:
一位评论者写道:
你是从终端部署还是代码构建?
终端。
您的服务器 less.yml 文件是什么样的?
serverless.yaml 是:
# serverless.yml
useDotenv: true
service: apollo-lambda
provider:
name: aws
runtime: nodejs12.x
region: us-west-2
deploymentBucket:
name: mysys-deployment-bucket
serverSideEncryption: AES256
apiGateway:
shouldStartNameWithService: true
functions:
graphql:
handler: build/graphql/lambda.graphqlHandler
events:
- http:
path: graphql
method: post
cors: true
- http:
path: graphql
method: get
cors: true
plugins:
- serverless-deployment-bucket
您是否在本地设置了访问密钥?
我愿意。
一旦正确连接起来,这根本不会太难。 ——
你的意思是,一旦你完成了不可能的事情,它一点也不难。
显然,除了困难的部分,一切都很容易。珠穆朗玛峰?去机场很方便!脑部手术?给病人剃光头很容易,给保险计费也很简单……
【问题讨论】:
-
这比 AWS 更像是一个
serverless-framework问题。serverless执行 AWS API 调用,因此它应该知道它需要的所有 IAM 权限。这些 API 调用取决于您的serverless配置,因此没有一个真正的列表 IAM 最低权限,因为它可以非常适合各个项目。我希望有一个serverlessCLI 命令可以根据您的无服务器配置列出所有必需的 IAM 权限。 -
你是从终端部署还是代码构建?您的服务器 less.yml 文件是什么样的?您是否在本地设置了访问密钥?一旦正确连接起来,这根本不会太难。
-
@lopezdp 在更新中回答。
-
附上
AmazonAPIGatewayAdministrator政策 -
@AtulSharma — 你为什么不回答你的评论,这样我才能接受它并给予你信任?此外,您可能知道“atul sharma”的意思是“完美的舒适”。现在看来很合适...
标签: aws-lambda amazon-iam serverless-framework