即使按照说明进行操作,也无法在 AWS 控制台上创建 AWS AppSync API
Fail to Create AWS AppSync API on AWS Console even after Following Instructions
当我在 AWS 控制台上创建我的第一个 IAM 帐户时,我将其放在一个具有创建 AppSync 架构的策略的组中。我可以使用我的 IAM 帐户在 dynamodb 中创建一个 table。但是,当我尝试使用此 IAM 帐户在 AWS 控制台上创建架构时,出现以下错误:
用户:arn:aws:iam::XXXX:user/XXXX 无权执行:appsync:CreateGraphqlApi 资源:arn:aws:appsync:us-west-2:XXXX:/creategraphqlapi
知道为什么会这样吗?谢谢
更新:我尝试使用示例 Event App 创建它,它对我有用。我尝试创建一个空白架构时出现此错误。
AWS 控制台与当前用户承担的角色完全不同,因此如果登录用户试图超越该角色,它会失败并说您未获得授权是预期的行为。
就 API 和模式而言,API 由模式文档定义。您必须先创建一个 API,然后为该 API 设置架构。 StartSchemaCreation 是一个 AppSync API,它 'upserts' 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 table 作为数据源,它将创建一个角色,该服务可以承担读取和写入该 table).
如果您不尝试创建这些类型的数据源,则可以过滤掉 es (ElasticSearch)、DynamoDB 和 Lambda 权限,如果您不使用 Cognito 身份验证,则可以过滤掉 Cognito。
作为一项安全最佳实践,请务必锁定这些可以应用的资源 and/or 当您不再需要这些权限时删除它们,因为这些 iam 权限非常强大。
当我在 AWS 控制台上创建我的第一个 IAM 帐户时,我将其放在一个具有创建 AppSync 架构的策略的组中。我可以使用我的 IAM 帐户在 dynamodb 中创建一个 table。但是,当我尝试使用此 IAM 帐户在 AWS 控制台上创建架构时,出现以下错误:
用户:arn:aws:iam::XXXX:user/XXXX 无权执行:appsync:CreateGraphqlApi 资源:arn:aws:appsync:us-west-2:XXXX:/creategraphqlapi
知道为什么会这样吗?谢谢
更新:我尝试使用示例 Event App 创建它,它对我有用。我尝试创建一个空白架构时出现此错误。
AWS 控制台与当前用户承担的角色完全不同,因此如果登录用户试图超越该角色,它会失败并说您未获得授权是预期的行为。
就 API 和模式而言,API 由模式文档定义。您必须先创建一个 API,然后为该 API 设置架构。 StartSchemaCreation 是一个 AppSync API,它 'upserts' 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 table 作为数据源,它将创建一个角色,该服务可以承担读取和写入该 table).
如果您不尝试创建这些类型的数据源,则可以过滤掉 es (ElasticSearch)、DynamoDB 和 Lambda 权限,如果您不使用 Cognito 身份验证,则可以过滤掉 Cognito。
作为一项安全最佳实践,请务必锁定这些可以应用的资源 and/or 当您不再需要这些权限时删除它们,因为这些 iam 权限非常强大。