如何让AWS Amplify采用IAM认证查询AWS AppSync?
配置AWS Amplify GraphQL客户端使用IAM认证
你可以直接在代码中指定IAM凭证,只需在Amplify配置中补充凭证信息,或者在请求级别单独指定。以下是具体实现方式:
方法1:全局配置IAM凭证
修改你的Amplify配置,添加credentials字段,传入IAM用户的Access Key和Secret Key(注意:生产环境请勿硬编码密钥,建议使用环境变量或IAM角色):
import { Amplify, ResourcesConfig } from 'aws-amplify'; import { generateClient } from 'aws-amplify/api'; import { gql } from '@aws-amplify/api-graphql'; import AWS from 'aws-sdk'; // 创建IAM凭证对象 const credentials = new AWS.Credentials({ accessKeyId: '你的IAM Access Key', secretAccessKey: '你的IAM Secret Key' }); const config: ResourcesConfig = { API: { GraphQL: { endpoint: 'https://xxx.appsync-api.ap-southeast-2.amazonaws.com/graphql', region: 'ap-southeast-2', defaultAuthMode: 'iam', // 全局配置凭证 credentials: credentials }, }, }; Amplify.configure(config); const client = generateClient(); // 执行查询 client.graphql({ query: gql` query getUser($id: ID!) { getUser(id: $id) { id name } } `, variables: { id: '用户ID' } });
方法2:单个请求中指定凭证
如果不需要全局配置,也可以在每次请求时单独传入凭证:
// 初始化Amplify时不全局配置凭证 const config: ResourcesConfig = { API: { GraphQL: { endpoint: 'https://xxx.appsync-api.ap-southeast-2.amazonaws.com/graphql', region: 'ap-southeast-2', defaultAuthMode: 'iam', }, }, }; Amplify.configure(config); const client = generateClient(); // 创建凭证对象 const credentials = new AWS.Credentials({ accessKeyId: '你的IAM Access Key', secretAccessKey: '你的IAM Secret Key' }); // 执行请求时指定凭证 client.graphql({ query: gql` query getUser($id: ID!) { getUser(id: $id) { id name } } `, variables: { id: '用户ID' }, authMode: 'iam', credentials: credentials });
生产环境注意事项
- 绝对不要在前端代码或公开仓库中硬编码IAM密钥,避免密钥泄露。
- 前端应用建议使用Amazon Cognito身份池来获取临时IAM凭证,而非长期IAM用户密钥。
- 后端服务(如Lambda、EC2)可直接使用IAM角色,无需手动配置密钥,Amplify会自动获取实例角色的凭证。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

