在AWS控制台上创建我的第一个IAM帐户时,我将其放入具有创建AppSync模式的策略的组中。我可以使用我的IAM帐户在dynamodb中创建一个表。但是,当我尝试使用该IAM帐户在AWS控制台上创建架构时,它给了我以下错误:
用户:arn:aws:iam :: XXXX:user / XXXX无权执行:资源上的appsync:CreateGraphqlApi:arn:aws:appsync:us-west-2:XXXX:/ creategraphqlapi
知道为什么会这样吗?谢谢。
更新:我尝试使用示例事件应用程序进行创建,并且对我有用。我尝试创建空白模式时出现此错误。
答案 0 :(得分:2)
AWS控制台与当前用户担任的角色完全不同,因此预期的行为是失败,并说如果登录的用户尝试越过该角色,则您无权获得授权。
就API和架构而言,API由架构文档定义。您必须先创建一个API,然后为该API设置架构。 StartSchemaCreation是一个AppSync API,可为GraphQL API“补补”架构(无论是否存在,不保存),但是要求它已经存在。
创建API是通过CreateGraphQLApi完成的,错误消息中指出的API在您的权限中丢失。正如Gabe在评论中所说,您可以将该权限添加到所使用的策略中。另外,AWSAppSyncAdministrator托管策略允许使用“ appsync:*”,因此应允许您创建API并设置架构。值得注意的是,这主要是作为CLI管理员使用的,并且缺少一些完全使用AppSync控制台所需的权限。
AppSync控制台上的大多数示例都是通过CloudFormation完成的,而不是通过单独调用AppSync服务来完成的,因此所需的权限有所不同。但是,使用空白模式时,您将直接调用CreateGraphQLApi API。这就是为什么该示例有效但空白模式无效的原因。
编辑:
您可以使用以下附加权限来使控制台工作:
...
"iam:ListRoles",
"iam:CreateRole",
"iam:AttachRolePolicy",
"iam:CreatePolicy",
"lambda:AddPermission2*",
"lambda:ListFunctions2*",
"es:DescribeElasticsearchDomain",
"es:ListDomainNames",
"dynamodb:CreateTable",
"dynamodb:DescribeTable",
"dynamodb:ListTables",
"cognito-idp:ListUserPools"
...
具体来说,这些是AppSync控制台 可以执行的操作,但我敢打赌,虽然您遇到了iam。 AppSync使用它们来授予服务访问这些数据源的权限(例如,如果您将DynamoDB表作为数据源,它将创建一个服务可以承担的对该表进行读取和写入的角色)。
如果您不想创建这些类型的数据源,则可以过滤es(ElasticSearch),DynamoDB和Lambda权限;如果不使用Cognito auth,则可以过滤Cognito。
作为安全性最佳实践,请确保在不再需要这些权限时,锁定可应用于和/或删除这些权限的资源,因为这些iam权限非常强大。