本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
VPC-connected 工作流程的互联网接入
当您将 AWS HealthOmics 运行连接到 VPC 时,该运行只能访问该 VPC 中的可用资源。要允许您运行访问 VPC 外部的公共互联网或 AWS 服务,您必须使用相应的网络资源配置 VPC。
本主题介绍如何设置您的 VPC,以便为您的 VPC-connected 运行提供互联网访问和高效的 AWS 服务连接。有关将运行连接到 VPC 的信息,请参阅将 HealthOmics 工作流程连接到 VPC。
重要
将运行连接到公有子网不会为其提供互联网访问权限或公有 IP 地址。对于需要互联网连接的运行,请务必使用带有 NAT 网关路由的私有子网。
设置可访问互联网的 VPC
要让您的 VPC-connected 运行访问互联网,请创建具有私有子网的 VPC,通过 NAT 网关路由出站流量。
此配置提供:
HealthOmics 工作流任务的私有子网
带有用于出站互联网访问的 NAT 网关的公有子网
受支持的区域和可用区
HealthOmics 工作流程在以下区域和可用区运行。创建 VPC 时,请确保您的子网位于这些可用区中的一个或多个中。
| Region | 可用区名称 | 可用区 ID |
|---|---|---|
| us-west-2 | us-west-2a | usw2-az2 |
| us-west-2b | usw2-az1 | |
| us-west-2c | usw2-az3 | |
| us-west-2d | usw2-az4 | |
| us-east-1 | us–east–1a | use1-az4 |
| us–east–1b | use1-az6 | |
| us–east–1c | use1-az1 | |
| us-east-1d | use1-az2 | |
| us-east-1f | use1-az5 | |
| eu-west-1 | eu-west-1a | euw1-az2 |
| eu-west-1b | euw1-az3 | |
| eu-west-1c | euw1-az1 | |
| eu-central-1 | eu-central-1a | euc1-az2 |
| eu-central-1b | euc1-az3 | |
| eu-central-1c | euc1-az1 | |
| eu-west-2 | eu-west-2a | euw2-az2 |
| eu-west-2b | euw2-az3 | |
| 欧盟-西部-2c | euw2-az1 | |
| ap-southeast-1 | ap-southeast-1a | apse1-az2 |
| ap-southeast-1b | apse1-az1 | |
| ap-southeast-1c | apse1-az3 | |
| il-central-1 | il-central-1a | ilc1-az1 |
| il-central-1b | ilc1-az2 | |
| il-central-1c | ilc1-az3 | |
| ap-northeast-2 | ap-northeast-2a | apne2-az1 |
| ap-northeast-2b | apne2-az2 | |
| ap-northeast-2c | apne2-az3 | |
| ap-northeast-1 | ap-northeast-1a | apne1-az4 |
| ap-northeast-1c | apne1-az1 | |
| ap-northeast-1d | apne1-az2 | |
| us-east-2 | us-east-2a | use2-az1 |
| us-east-2b | use2-az2 | |
| us-east-2c | use2-az3 |
-
在亚马逊 VPC 控制台中,选择创建 VPC 。
-
选择 VPC 及更多,自动创建具有公有和私有子网的 VPC。
-
配置以下设置:
可用区数量:2 个或更多
公有子网数量:每个可用区一个。在这个例子中,2
私有子网数量:每个可用区一个。在这个例子中,2
NAT 网关:每个可用区 1 个(用于生产)或 1 个(用于 development/testing)
VPC 终端节点:S3 网关终端节点(可选 — 默认情况下,区域内 Amazon S3 流量通过 HealthOmics 服务 VPC 路由)
创建 HealthOmics VPC 配置时,请指定私有子网。这些运行使用公有子网中的 NAT 网关来访问互联网。
VPC 终端节点 AWS 务
您可以配置 VPC 终端节点,以允许运行者无需穿越公共互联网即可访问 AWS 服务。这提高了安全性并可以降低数据传输成本。
重要
如果您的工作流程定义需要访问 AWS 服务(例如亚马逊 Athena 查询、亚马逊 DynamoDB 操作或其他 API 调用),则必须确保在 VPC 中配置所需的 VPC 终端节点。如果没有相应的终端节点,您的工作流程可能会因身份验证或连接错误而失败。
注意
In-Region 默认情况下,Amazon S3 流量通过 HealthOmics 服务 VPC 路由。如果您配置 Amazon S3 接口终端节点,则流量将改为通过您的 VPC 路由。我们建议使用 Amazon S3 网关终端节点以获得最佳性能和成本优化。有关更多信息,请参阅AWS PrivateLink 指南中的 Amazon S3 网关终端节点。
下表列出了 HealthOmics 运行时常用的 VPC 终端节点:
| 服务 | 端点类型 | 端点名称 |
|---|---|---|
| Amazon S3 | 网关 | com.amazonaws。region.s3 |
| Amazon S3 表 | 接口 | com.amazonaws。region.s3tables |
| 亚马逊 ECR (API) | 接口 | com.amazonaws。region.ecr.api |
| 亚马逊 ECR (Docker) | 接口 | com.amazonaws。region.ecr.dkr |
| SSM | 接口 | com.amazonaws。region.ssm |
| CloudWatch 日志 | 接口 | com.amazonaws。region.logs |
| Amazon Athena | 接口 | com.amazonaws。region.athena |
您可以通过 AWS PrivateLink 终端节点访问的服务的完整列表可在与集成的AWS 服务中找到 AWS PrivateLink。有关端点设置的详细说明,请参阅AWS PrivateLink 指南 AWS PrivateLink中的通过访问 AWS 服务。
NAT 网关要求
对于需要公共互联网接入的跑步:
NAT 网关必须部署在公有子网中
公有子网必须有通往互联网网关的路由
私有子网(执行运行的地方)必须有到 NAT 网关的路由
注意
NAT 网关产生每小时费用和数据处理费。为了优化成本,可以考虑使用 VPC 终端节点进行 AWS 服务访问,而不是通过 NAT 网关进行路由。
安全组配置
配置您的安全组,以允许出站流量到达您的运行需要访问的目的地:
公共互联网接入 -允许出站 HTTPS(端口 443)流量。根据需要为其他协议添加规则,例如 HTTP(端口 80)。
特定服务 -根据您的要求配置规则。
On-premises 资源 — 允许流量流向您的 VPN 或 CIDR 范围。
以下示例显示了公共互联网访问的安全组规则:
| Type | 协议 | 端口范围 | 目标位置 | 说明 |
|---|---|---|---|---|
| HTTPS | TCP | 443 | 0.0.0。0/0 | 允许 HTTPS 访问互联网 |
路由表配置
确保您的私有子网有路由表条目,可将互联网绑定流量定向到 NAT 网关:
| 目标位置 | Target |
|---|---|
| 10.0.0。0/16 | 本地 |
| 0.0.0。0/0 | nat-xxxxxxxxxx |
要访问本地资源,请配置指向虚拟专用网关或网关的路由。
的 IAM 权限 AWS 务
当您的工作流程任务在 VPC 联网模式下访问亚马逊 Athena、 AWS Glue 或 Amazon DynamoDB 等 AWS 服务时,您必须向传递给 API 的服务角色添加必要的权限。StartRun如果没有这些权限,您的工作流程任务将失败AccessDeniedException或UnauthorizedException出现错误。
重要
服务角色权限与 VPC 网络配置是分开的。即使正确配置了 VPC 终端节点和安全组,如果服务角色缺乏所需的 IAM 权限,您的工作流程也会失败。
如果您的工作流程因权限错误而失败,请检查工作流程运行的 CloudWatch 日志日志。常见的错误消息包括AccessDeniedException: You are not authorized to perform: action on the resource(服务角色缺少所需的 IAM 权限)或UnrecognizedClientException: The security
token included in the request is invalid(服务角色信任策略可能配置错误,或者传递给的角色 ARN 不StartRun正确)。
通用服务权限
以下示例显示了 VPC 模式工作流程中常用 AWS 服务的 IAM 权限。根据您的工作流程访问的服务,将这些权限添加到您的服务角色策略中。
例权限
对于运行查询的工作流程:
{ "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:StopQueryExecution" ], "Resource": "arn:aws:athena:region:account-id:workgroup/workgroup-name" }
例 AWS Glue 数据目录权限
对于访问 AWS Glue 数据库和表的工作流程(通常与 Amazon Athena 一起使用):
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:GetPartitions", "glue:CreateTable", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:region:account-id:catalog", "arn:aws:glue:region:account-id:database/database-name", "arn:aws:glue:region:account-id:table/database-name/*" ] }
注意
如果您使用 AWS Lake Formation 管理 AWS Glue 数据目录的权限,则还必须授予相应的 Lake Formation 权限。有关更多信息,请参阅《AWS Lake Formation 开发者指南》中的 Lake Formation 权限。
例 DynamoDB 权限
对于读取或写入 DynamoDB 表的工作流程:
{ "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:region:account-id:table/table-name" }
例亚马逊 S3 表权限
对于读取或写入 Amazon S3 表的工作流程:
{ "Effect": "Allow", "Action": [ "s3tables:GetTableData", "s3tables:PutTableData" ], "Resource": "arn:aws:s3tables:region:account-id:bucket/bucket-name/table/table-id" }
注意
亚马逊 S3 表使用的终端节点与 Amazon S3 不同。您必须为亚马逊 S3 表配置 VPC 终端节点,并确保您的安全组允许出站 HTTPS 流量(端口 443)到亚马逊 S3 表格服务。
测试 VPC 连接
在运行生产工作流程之前,请验证您的 VPC 配置是否允许连接到所需的外部服务。
创建测试工作流程
创建一个简单的工作流程来测试与外部服务的连接。例如,创建一个尝试通过 TCP 连接至目标服务端点的工作流程。
运行测试
aws omics start-run \ --workflow-idtest-workflow-id\ --role-arnrole-arn\ --output-uri s3://bucket-name/test-outputs/ \ --networking-mode VPC \ --configuration-nameconfiguration-name\ --parameters file://test-parameters.json
验证结果
检查工作流程输出以确认成功连接:
{ "connectivity_test.result": "Testing connection to external service...\nSUCCESS: Connection successful!\nTest completed" }
如果测试失败,请验证以下内容:
安全组规则允许出站流量到达所需的端口和目的地。
路由表将流量定向到 NAT 网关以访问互联网。
外部服务可从您的网络访问。
您的账户中有足够的 ENI。
NAT 网关位于公有子网中,有通往互联网网关的路由。
注意
网络吞吐量从每个 ENI 10 Gbps 开始,在 60 分钟内扩展到 100 Gbps,流量持续不断。对于具有即时高吞吐量要求的工作流程,请联系 AWS 支持部门。
示例
使用 API 身份验证访问 NCBI 数据
此示例演示如何使用带有身份验证的 NCBI 数据集 API 访问 NCBI 数据。
访问 NCBI 资源的最佳做法
客户应尽可能使用 REST API,并使用 NCBI 提供的 API 密钥。访问NCBI资源的请求,例如对公共数据的HTTP和FTP请求,将来自 HealthOmics NCBI设定的第三方费率,并将受到限制。在高峰使用期间,由于节流错误,您可能会遇到运行失败。我们鼓励用户获取自己的 NCBI API 密钥并使用专用 API 来实现更高的并发性和更好的开发体验。
要获取 NCBI API 密钥,请访问 NCBI API 密钥文档。
示例工作流程定义:
version 1.0 #WORKFLOW DEFINITION # Meant to be used as integration test for public internet access via VPC tunnel workflow TestFlow { input { String ncbi_api_url = "https://api.ncbi.nlm.nih.gov/datasets/v2/gene/accession/NM_021803.4?api_key=<YOUR_API_KEY>" } call DataProcessTask{ input: ncbi_api_url = ncbi_api_url, } output { File output_file = DataProcessTask.output_file } } #Task Definitions task DataProcessTask { input { String ncbi_api_url } command <<< set -eu # Download file from NCBI Datasets API with API key curl -fsSL "~{ncbi_api_url}" -o gene_data.json # Add data processing task here cat gene_data.json > processed_data.json # Echo the content to output file cat processed_data.json > outfile.txt >>> output { File output_file = "outfile.txt" } }
要点:
<YOUR_API_KEY>替换为您的实际的 NCBI API 密钥该工作流程使用 HTTPS 访问 NCBI 数据集 API
API 密钥作为 URL 参数传递
与未经身份验证的访问(每秒 5 个请求)相比,这种方法提供更高的速率限制(每秒 10 个请求)
有关 NCBI API 密钥和速率限制的更多信息,请参阅 NCBI 数据集 API 文档。
最佳实践
使用 VPC 终端节点获取 AWS 服务。为 Amazon S3、Amazon ECR 和其他 AWS 服务配置 VPC 终端节点,以降低 NAT 网关成本并提高性能。有关更多信息,请参阅 VPC 终端节点 AWS 务。
监控网络成本。VPC 网络会产生 NAT 网关、数据传输和 ENI 的成本。使用 AWS 成本管理器监控您的使用情况。
规划可用区。确保您的子网跨越支持工作流程布 HealthOmics 局的可用区域。
在每个 AZ 中使用 NAT 网关。对于生产工作负载,在每个可用区部署 NAT 网关以提供冗余。