本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 | |
| eu-west-2c | euw2-az1 | |
| ap-southeast-1 | ap-southeast-1a | apse1-az2 |
| ap-southeast-1b | apse1-az1 | |
| ap-southeast-1c | apse1-az3 | |
| il-central-1 | ilcentral-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 |
-
在亚马逊 VPC 控制台中,选择创建 VPC。
-
选择 VPC 及更多以自动创建包含公有和私有子网的 VPC。
-
配置以下设置:
可用区数量:2 个或更多
公有子网数量:每个可用区一个。在这个例子中,2
私有子网数量:每个可用区一个。在这个例子中,2
NAT 网关:每个可用区 1 个(用于生产)或 1 个(对于 development/testing)
VPC 终端节点:S3 网关终端节点(可选 — 默认情况下,区域内 Amazon S3 流量通过服务 HealthOmics VPC 路由)
创建 HealthOmics VPC 配置时,请指定私有子网。运行使用公有子网中的 NAT 网关来访问互联网。
AWS 服务的 VPC 终端节点
您可以将 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 网关必须部署在公有子网中
公有子网必须有通往 Internet Gateway 的路由
私有子网(运行执行的地方)必须有通往 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 |
要访问本地资源,请配置指向虚拟私有网关或网关的路由。
AWS 服务的 IAM 权限
当您的工作流程任务在 VPC 联网模式下访问 Amazon Athena AWS 、Glue 或 Amazon DynamoDB 等 AWS 服务时,您必须向传递给 API 的服务角色添加必要的权限。StartRun如果没有这些权限,您的工作流程任务将失败并AccessDeniedExceptionUnauthorizedException出现错误。
重要
服务角色权限与 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(服务角色信任策略可能配置错误,或者传递StartRun给的角色 ARN 不正确)。
常用服务权限
以下示例显示了 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 表格使用的终端节点与亚马逊 S3 不同。您必须为 Amazon S3 表配置 VPC 终端节点,并确保您的安全组允许流向 Amazon S3 表格服务的出站 HTTPS 流量(端口 443)。
测试 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。如需立即要求高吞吐量的工作流程,请联系 Su AWS pport。
示例
使用 API 身份验证访问 NCBI 数据
此示例演示如何使用带有身份验证的 NCBI 数据集 API 访问 NCBI 数据。
访问 NCBI 资源的最佳实践
客户应尽可能使用 REST API,并使用 NCBI 提供的 API 密钥。访问NCBI资源的请求(例如对公共数据的HTTP和FTP请求)将来自NCBI设定的第三方费率, 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 密钥作为网址参数传递
与未经身份验证的访问(每秒 5 个请求)相比,这种方法提供了更高的速率限制(每秒 10 个请求)
有关 NCBI API 密钥和速率限制的更多信息,请参阅 NCBI 数据集 API 文档
最佳实践
使用 VPC 终端节点提供 AWS 服务。为 Amazon S3、Amazon ECR 和其他 AWS 服务配置 VPC 终端节点,以降低 NAT 网关成本并提高性能。有关更多信息,请参阅 AWS 服务的 VPC 终端节点。
监控网络成本。VPC 联网会产生 NAT 网关、数据传输和 ENI 的成本。使用 Cost Explorer AWS 监控您的使用情况。
规划可用区。确保您的子网跨越可用区,在这些可用区中 HealthOmics 运行以支持工作流程放置。
在每个可用区中使用 NAT 网关。对于生产工作负载,请在每个可用区部署一个 NAT 网关以提供冗余。