自1.27.0
子图谱认证
使用 AWS SigV4 实现子图谱认证
的GraphOS 路由器和Apollo 路由器核心支持子图请求认证和密钥轮换,通过AWS 签名版本 4(SigV4)。
这允许您通过确保子图请求是由路由器发起的,且有效载荷未被篡改,来确保与 AWS 子图的通信安全。
我们已经对该功能进行了以下服务的测试
- AWS Lambda URL
- AWS Appsync
- AWS Amazon API Gateway
- VPC Lattice ⚠️ VPC Lattice 不支持 WebSocket,您无法在透传模式下使用订阅。
要使用此功能
要使用此功能,您的 AWS 托管的子图必须配置为 IAM 接受已签名的请求。
工作原理
子图请求使用HTTPAuthorization 标头签名的,有关更多详细信息,请参阅上游文档。
配置示例
以下示例展示了如何为所有子图使用默认凭证链,except for theproducts
子图,它使用硬编码的凭证:
router.yaml
authentication:subgraph:all: # configuration that will apply to all subgraphsaws_sig_v4:default_chain:profile_name: "my-test-profile" # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#ec2-instance-profileregion: "us-east-1" # https://docs.aws.amazon.com/general/latest/gr/rande.htmlservice_name: "lambda" # https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.htmlassume_role: # https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.htmlrole_arn: "test-arn"session_name: "test-session"external_id: "test-id"subgraphs:products:aws_sig_v4:hardcoded: # Not recommended, prefer using default_chain as shown aboveaccess_key_id: "my-access-key"secret_access_key: "my-secret-access-key"region: "us-east-1"service_name: "vpc-lattice-svcs" # "s3", "lambda" etc.
默认链式认证
默认链式认证方法会按照以下顺序尝试解析凭证,从环境变量开始
凭证类型 | 示例 |
---|---|
环境变量 | AWS_ACCESS_KEY_ID ,AWS_SECRET_ACCESS_KEY 或 SECRET_ACCESS_KEY ,AWS_SESSION_TOKEN ,AWS_ROLE_ARN ,AWS_IAM_ROLE_SESSION_NAME |
共享配置 | ~/.aws/config ,~/.aws/credentials ,通过 AWS_CONFIG_FILE 和 AWS_SHARED_CREDENTIALS_FILE 环境变量配置 |
Web身份令牌 | 可能通过 AWS_WEB_IDENTITY_TOKEN_FILE 环境变量配置 |
弹性容器服务(ECS) | 通过 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 或 AWS_CONTAINER_CREDENTIALS_FULL_URI ,以及 AWS_CONTAINER_AUTHORIZATION_TOKEN 环境变量配置 |
假设角色
两种认证方法都允许您使用 assume_role
密钥来使用特定的凭证(推荐)。