翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
VPC から AWS Transform ウェブアプリケーションにアクセスする
AWS PrivateLink を使用して VPC から AWS Transform API にプライベートにアクセスする場合、ウェブアプリケーションには追加のネットワーク設定が必要です。インターネット接続を必要とする CloudFront を介して静的コンテンツ (HTML、JavaScript、CSS) を提供します。ウェブアプリケーションからの API コールは VPC エンドポイントを通過し、完全にプライベートのままになります。
このガイドでは、VPC から制御されたインターネット出力を設定して、VPC を必要なドメインのみにロックしたままウェブアプリケーションがロードできるようにする方法について説明します。
仕組み
AWS Transform ウェブアプリケーションは 2 つのネットワークパスを使用します。
-
API コール – ウェブアプリケーション (ジョブの開始、ワークスペースの表示など) を操作すると、ブラウザは API リクエストを に送信します
api.transform.。region.on.awscom.amazonaws.VPC エンドポイントとプライベート DNS を有効にすると、これらのリクエストは VPC 内のプライベート IP アドレスに解決され、 AWS ネットワークを離れることはありません。region.api.transform -
静的コンテンツ – ウェブアプリケーションの HTML、JavaScript、および CSS ファイルは、 を介して CloudFront を介して提供されます
。CloudFront コンテンツ配信はパブリックインターネットでのみ利用できるため、これらのファイルをロードするにはインターネット接続が必要です。tenant-id.transform.region.on.aws -
認証 – AWS IAM Identity Center のサインインフローは
を使用します。これにはインターネット接続も必要です。region.signin.aws
セキュリティを維持しながらウェブアプリケーションを有効にするには、 AWS Network Firewall とドメインベースのフィルタリングを使用して、制御された出力パスを作成します。これにより、VPC は他のすべてのインターネットトラフィックをブロックしながら、ウェブアプリケーションに必要な特定のドメインにのみ到達できます。
アーキテクチャ
次の図は、ウェブアプリケーショントラフィックのネットワークパスを示しています。
EC2 Instance / Workspace (Private Subnet) | | Route: 0.0.0.0/0 → Network Firewall Endpoint v AWS Network Firewall (Firewall Subnet) | Allows: *.cloudfront.net, *.transform.<region>.on.aws, | <region>.signin.aws, SSO domains, S3 presigned URLs | Blocks: everything else (TLS SNI inspection) | | Route: 0.0.0.0/0 → NAT Gateway v NAT Gateway (Public Subnet) | | Route: 0.0.0.0/0 → Internet Gateway v Internet Gateway → CloudFront Edge Locations
重要
Network Firewall は、TLS SNI 検査を実行するために、トラフィックの両方向 (対称ルーティング) を確認する必要があります。プライベートサブネット宛てのトラフィックをファイアウォール経由で送信するリターンルートを NAT Gateway サブネットで設定する必要があります。これを行わないと、ドメインベースのフィルタリングルールは機能しません。
前提条件
開始する前に、以下があることを確認してください。
-
VPC リソース、Network Firewall、NAT Gateway を作成するアクセス許可を持つ AWS アカウント。
-
インスタンスまたはワークロードが実行されるプライベートサブネットを持つ VPC。
-
VPC にアタッチされたインターネットゲートウェイ (または作成するためのアクセス許可)。
-
プライベート DNS が有効になってい
com.amazonaws.る の AWS Transform VPC エンドポイント。これは、ウェブアプリケーションブラウザクライアントで使用されるエンドポイントです。エンドポイントの作成手順については、「」を参照してくださいAWS Transform およびインターフェイスエンドポイント (AWS PrivateLink)。region.api.transform
VPC エンドポイントポリシーの設定
com.amazonaws. VPC エンドポイントにカスタムエンドポイントポリシーがある場合は、 AWS Transform オペレーションを許可するステートメントを追加する必要があります。これを行わないと、ウェブアプリケーションはエンドポイントを介して API コールを実行できなくなります。region.api.transform
VPC エンドポイントポリシーに次のステートメントを追加します。AWS_TRANSFORM_PROFILE_ARN を、設定ページの AWS Transform コンソールにある AWS Transform サービスプロファイル ARN に置き換えます。
{ "Statement": [ { "Sid": "AllowAWSTransform", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalArn": [ "AWS_TRANSFORM_PROFILE_ARN" ] } } } ] }
注記
VPC エンドポイントがデフォルトのポリシー (フルアクセス) を使用している場合は、変更は不要で、このステップをスキップできます。
制御されたインターネット出力の設定
AWS Transform ウェブアプリケーションのドメインベースのフィルタリングを使用して Network Firewall を設定するには、次の手順を実行します。
ステップ 1: ファイアウォールサブネットを作成する
Network Firewall エンドポイント専用の小さな /28 サブネットを作成します。このサブネットは、プライベートサブネットと同じアベイラビリティーゾーンにある必要があります。
aws ec2 create-subnet \ --vpc-idyour-vpc-id\ --cidr-blockfirewall-subnet-cidr\ --availability-zoneyour-az\ --regionregion
ステップ 2: NAT ゲートウェイのパブリックサブネットを作成する
aws ec2 create-subnet \ --vpc-idyour-vpc-id\ --cidr-blockpublic-subnet-cidr\ --availability-zoneyour-az\ --regionregion
ステップ 3: パブリックサブネットルートテーブルを設定する
インターネットトラフィックをインターネットゲートウェイにルーティングするパブリックサブネットのルートテーブルを作成します。
# Create route table PUB_RTB=$(aws ec2 create-route-table \ --vpc-idyour-vpc-id\ --regionregion\ --query 'RouteTable.RouteTableId' --output text) # Add default route to internet gateway aws ec2 create-route \ --route-table-id $PUB_RTB \ --destination-cidr-block 0.0.0.0/0 \ --gateway-idyour-igw-id\ --regionregion# Associate with public subnet aws ec2 associate-route-table \ --route-table-id $PUB_RTB \ --subnet-idpublic-subnet-id\ --regionregion
ステップ 4: NAT ゲートウェイを作成する
# Allocate an Elastic IP EIP=$(aws ec2 allocate-address --domain vpc \ --regionregion--query 'AllocationId' --output text) # Create NAT Gateway in the public subnet NAT_ID=$(aws ec2 create-nat-gateway \ --subnet-idpublic-subnet-id\ --allocation-id $EIP \ --regionregion\ --query 'NatGateway.NatGatewayId' --output text) # Wait for NAT Gateway to become available (~2 minutes) aws ec2 wait nat-gateway-available \ --nat-gateway-ids $NAT_ID --regionregion
ステップ 5: Network Firewall ルールグループを作成する
AWS Transform ウェブアプリケーションに必要なドメインへのトラフィックのみを許可するステートフルルールグループを作成します。
aws network-firewall create-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL \ --capacity 100 \ --rule-group '{ "StatefulRuleOptions": { "RuleOrder": "STRICT_ORDER" }, "RulesSource": { "RulesSourceList": { "Targets": [ ".cloudfront.net", ".transform.region.on.aws", "region.signin.aws", ".s3.region.amazonaws.com", "oidc.region.amazonaws.com", "portal.sso.region.amazonaws.com", "assets.sso-portal.region.amazonaws.com", "directory-id.awsapps.com" ], "TargetTypes": ["TLS_SNI", "HTTP_HOST"], "GeneratedRulesType": "ALLOWLIST" } } }' \ --regionregion
region を、プロファイルがインストールされている AWS リージョン ( など) に置き換えます AWS Transform us-east-1。directory-id を IAM Identity Center ディレクトリ ID に置き換えます (例: d-1234567890)。ディレクトリ ID は IAM Identity Center コンソールで確認できます。
次の表に、許可されたドメインを示します。
| ドメイン | 目的 |
|---|---|
.cloudfront.net |
CloudFront CDN – ウェブアプリケーションの静的アセット (JavaScript、CSS、イメージ) を提供します |
.transform. |
ウェブアプリケーションテナント URL – ブラウザは CloudFront を介してこのドメインから最初のページをロードします |
|
SSO サインインリダイレクトページ |
.s3. |
S3 署名付き URLs – アーティファクトのアップロードとダウンロード |
oidc. |
SSO 認証のための OIDC トークン交換 |
portal.sso. |
SSO ポータルのログインページ |
assets.sso-portal. |
SSO ポータルの静的アセット (CSS、JavaScript) |
|
組織の IAM Identity Center ポータル |
注記
.cloudfront.net ワイルドカードは、 AWS Transform ウェブアプリケーションの だけでなく、任意の CloudFront ディストリビューションへのトラフィックを許可します。CloudFront エッジ IPs はディストリビューション間で共有され、TLS SNI 検査では同じドメインの背後にある個々のディストリビューションを区別できないため、ドメインフィルターを絞り込むことはできません。
注記
をapi.transform.経由する API コール AWS PrivateLink 。インターネット出力は必要ありません。ファイアウォールの影響を受けません。region.on.aws
ステップ 6: ファイアウォールポリシーを作成する
ポリシーでは、デフォルトのアクションdrop_establishedとして でSTRICT_ORDERルール評価を使用する必要があります。これにより、許可リストと一致しないトラフィックはすべて削除されます。
# Get the rule group ARN RG_ARN=$(aws network-firewall describe-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --regionregion\ --query 'RuleGroupResponse.RuleGroupArn' --output text) # Create the firewall policy aws network-firewall create-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --firewall-policy "{ \"StatelessDefaultActions\": [\"aws:forward_to_sfe\"], \"StatelessFragmentDefaultActions\": [\"aws:forward_to_sfe\"], \"StatefulRuleGroupReferences\": [ { \"ResourceArn\": \"$RG_ARN\", \"Priority\": 1 } ], \"StatefulEngineOptions\": { \"RuleOrder\": \"STRICT_ORDER\" }, \"StatefulDefaultActions\": [\"aws:drop_established\", \"aws:alert_established\"] }" \ --regionregion
ステップ 7: Network Firewall を作成する
# Get the policy ARN FW_POLICY_ARN=$(aws network-firewall describe-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --regionregion\ --query 'FirewallPolicyResponse.FirewallPolicyArn' --output text) # Create the firewall aws network-firewall create-firewall \ --firewall-name transform-webapp-firewall \ --firewall-policy-arn $FW_POLICY_ARN \ --vpc-idyour-vpc-id\ --subnet-mappings SubnetId=firewall-subnet-id\ --regionregion# Wait for the firewall to become READY (3-5 minutes) while true; do STATUS=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --regionregion\ --query 'FirewallStatus.Status' --output text) echo "Status: $STATUS" if [ "$STATUS" = "READY" ]; then break; fi sleep 15 done
ステップ 8: ファイアウォールエンドポイント ID を取得する
FW_ENDPOINT=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --regionregion\ --query "FirewallStatus.SyncStates.\"your-az\".Attachment.EndpointId" \ --output text) echo "Firewall endpoint: $FW_ENDPOINT"
ステップ 9: ファイアウォールサブネットルートテーブルを設定する
インターネットにバインドされたトラフィックをファイアウォールサブネットから NAT ゲートウェイにルーティングします。
FW_RTB=$(aws ec2 create-route-table \ --vpc-idyour-vpc-id\ --regionregion\ --query 'RouteTable.RouteTableId' --output text) aws ec2 create-route \ --route-table-id $FW_RTB \ --destination-cidr-block 0.0.0.0/0 \ --nat-gateway-id $NAT_ID \ --regionregionaws ec2 associate-route-table \ --route-table-id $FW_RTB \ --subnet-idfirewall-subnet-id\ --regionregion
ステップ 10: プライベートサブネットルートテーブルを更新する
プライベートサブネットからインターネットにバインドされたすべてのトラフィックをファイアウォール経由でルーティングします。
aws ec2 create-route \ --route-table-idprivate-subnet-route-table-id\ --destination-cidr-block 0.0.0.0/0 \ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
デフォルトのルートが既に存在する場合は、 replace-route の代わりに を使用しますcreate-route。
ステップ 11: 対称リターンルートを追加する (必須)
重要
このステップは重要です。Network Firewall は TLS SNI 検査を使用し、TCP 接続の両方向を確認する必要があります。プライベートサブネット宛てのリターントラフィックをファイアウォール経由で送信するルートを NAT Gateway サブネットのルートテーブルに追加します。
aws ec2 create-route \ --route-table-id $PUB_RTB \ --destination-cidr-blockprivate-subnet-cidr\ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
private-subnet-cidr をプライベートサブネットの CIDR ブロック (例: ) に置き換えます10.0.144.0/20。
対称ルーティングがない場合、ファイアウォールはトラフィックの一方向のみを表示します。TLS 検査エンジンは TLS ハンドシェイクからサーバー名表示 (SNI) を抽出できず、すべてのドメインベースのルールはサイレントに失敗します。
ステップ 12: IPv6 デフォルトルートを削除する (存在する場合)
プライベートサブネットルートテーブルの IPv6 デフォルトルート (::/0) がインターネットゲートウェイを直接指している場合、IPv6-capableの送信先のファイアウォールをバイパスします。削除します。
aws ec2 delete-route \ --route-table-idprivate-subnet-route-table-id\ --destination-ipv6-cidr-block ::/0 \ --regionregion
検証
プライベートサブネットのインスタンスから、設定を確認します。
# Should SUCCEED - web application content via CloudFront (allowed) curl -vL --connect-timeout 15 \ 'https://tenant-id.transform.region.on.aws' # Should SUCCEED - API via PrivateLink (does not use firewall) curl -v --connect-timeout 15 \ 'https://api.transform.region.on.aws/' # Should FAIL - non-allowlisted domain (blocked by firewall) curl -v --connect-timeout 15 'https://www.example.com' # Expected: TLS connection error (firewall drops after SNI inspection)
トラブルシューティング
- api.transform への API コールはファイアウォールによってブロックされます
-
ドメイン
api.transform.は VPC エンドポイントを介してプライベート IP アドレスに解決され、インターネットファイアウォールに到達しないでください。region.on.aws-
com.amazonaws.エンドポイントが作成されていることを確認します。region.api.transform -
エンドポイントでプライベート DNS が有効になっていることを確認します。
aws ec2 describe-vpc-endpoints \ --filters "Name=service-name,Values=com.amazonaws.region.api.transform" \ --query 'VpcEndpoints[*].[State,PrivateDnsEnabled]' \ --output table正常な出力:
available | True
-
- ウェブアプリケーションがロードされない (接続タイムアウト)
-
-
プライベートサブネットルートテーブルにファイアウォールエンドポイントを指す
0.0.0.0/0ルートがあることを確認します。 -
ファイアウォールサブネットルートテーブルに NAT ゲートウェイを指す
0.0.0.0/0ルートがあることを確認します。 -
NAT ゲートウェイが
available状態であることを確認します。
-
- 許可されていないドメインはブロックされません
-
-
インターネットゲートウェイを指す IPv6
::/0ルートを確認します。これにより、ファイアウォールがバイパスされます。削除します (ステップ 12)。 -
対称ルーティングが設定されていることを確認します。NAT Gateway サブネットルートテーブルには、プライベートサブネット CIDR のファイアウォール経由のリターンルートが必要です (ステップ 11)。
-
ファイアウォールポリシーが
drop_establishedとSTRICT_ORDERをデフォルトアクションalert_establishedとして使用していることを確認します。
-
コストに関する考慮事項
| [リソース] | 概算コスト |
|---|---|
| Network Firewall | アベイラビリティーゾーンあたり最大 0.395 USD/時間 (最大 288 USD/月) |
| NAT Gateway | ~0.045 USD/時間 (~33 USD/月) + データ処理料金 |
| Elastic IP (パブリック IPv4) | ~0.005 USD/時間 (~3.60 USD/月) |
| Network Firewall データ処理 | 0.065 USD/GB |
| NAT Gateway データ処理 | 0.045 USD/GB |
1 つのアベイラビリティーゾーンデプロイの推定ベースコストは約 325 USD/月です。本番デプロイでは、プライベートサブネットが存在する各アベイラビリティーゾーンにファイアウォール、NAT ゲートウェイ、および関連するサブネットをデプロイします。
クリーンアップ
このガイドで作成されたすべてのリソースを削除するには、次のコマンドを逆の順序で実行します。プレースホルダーをデプロイIDs に置き換えます。これらの値は、 AWS マネジメントコンソールで、またはセットアップステップの describe コマンドを使用して確認できます。
# Remove return route from NAT Gateway subnet aws ec2 delete-route --route-table-idpub-rtb-id\ --destination-cidr-blockprivate-subnet-cidr\ --regionregion# Remove route from private subnet aws ec2 delete-route \ --route-table-idprivate-subnet-route-table-id\ --destination-cidr-block 0.0.0.0/0 --regionregion# Delete Network Firewall (takes ~5 minutes) aws network-firewall delete-firewall \ --firewall-name transform-webapp-firewall \ --regionregion# Delete firewall policy and rule group aws network-firewall delete-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --regionregionaws network-firewall delete-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --regionregion# Delete NAT Gateway (wait ~5 minutes for full deletion) aws ec2 delete-nat-gateway --nat-gateway-idnat-gateway-id\ --regionregion# Release Elastic IP aws ec2 release-address --allocation-ideip-allocation-id\ --regionregion# Delete subnets aws ec2 delete-subnet --subnet-idfirewall-subnet-id\ --regionregionaws ec2 delete-subnet --subnet-idpublic-subnet-id\ --regionregion