Cross-Region: Connectivity - AWS 장애 주입 서비스

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Cross-Region: Connectivity

Cross-Region: Connectivity 시나리오를 사용하여 실험 리전에서 대상 리전으로의 애플리케이션 네트워크 트래픽을 차단하고 Amazon S3 및 Amazon DynamoDB에 대한 교차 리전 복제를 일시 중지할 수 있습니다. 교차 리전: 연결은 실험을 실행하는 리전(실험 리전)에서의 아웃바운드 애플리케이션 트래픽에 영향을 미칩니다. 실험 리전(대상 리전)에서 격리하려는 리전으로부터의 상태 비저장 인바운드 트래픽은 차단되지 않을 수 있습니다. WS 관리형 서비스의 트래픽은 차단되지 않을 수 있습니다.

이 시나리오는 실험 리전에서 대상 리전의 리소스에 액세스할 수 없는 경우 다중 리전 애플리케이션이 예상대로 작동하는지 시연하는 데 사용할 수 있습니다. 여기에는 전송 게이트웨이와 라우트 테이블을 대상으로 실험 리전에서 대상 리전으로의 네트워크 트래픽을 차단하는 것이 포함됩니다. 또한 S3 및 DynamoDB에 대한 리전 간 복제를 일시 중지합니다. 기본적으로 대상이 발견되지 않는 작업은 건너뛰게 됩니다.

작업

다음 작업은 함께 포함된 AWS 서비스에 대한 교차 리전 연결을 차단합니다. 작업은 병렬로 실행됩니다. 기본적으로 시나리오는 3시간 동안 트래픽을 차단하며, 최대 12시간까지 늘릴 수 있습니다.

Transit Gateway 연결 중단

Cross Region: Connectivity에는 실험 리전의 VPC에서 전송 게이트웨이로 연결된 대상 리전의 VPC로의 교차 리전 네트워크 트래픽을 차단하기 위한 aws:network:transit-gateway-disrupt-cross-region-connectivity가 포함됩니다. 이 작업은 실험 리전 내의 VPC 엔드포인트에 대한 액세스에는 영향을 미치지 않지만, 실험 리전에서 대상 리전의 VPC 엔드포인트로 향하는 트래픽을 차단합니다.

이 작업은 실험 리전과 대상 리전을 연결하는 전송 게이트웨이를 대상으로 합니다. 기본적으로 이 작업은 값이 AllowedDisruptTransitGateway라는 이름의 태그가 있는 전송 게이트웨이를 대상으로 합니다. 이 태그를 전송 게이트웨이에 추가하거나 실험 템플릿에서 기본 태그를 사용자 지정 태그로 바꿀 수 있습니다. 기본적으로 유효한 전송 게이트웨이를 찾을 수 없는 경우 이 작업은 건너뛰게 됩니다.

서브넷 연결 중단

Cross Region: Connectivity에는 실험 리전의 VPC에서 대상 리전의 퍼블릭 AWS IP 블록으로의 교차 리전 네트워크 트래픽을 차단하기 위한 aws:network:route-table-disrupt-cross-region-connectivity가 포함됩니다. 이러한 퍼블릭 IP 블록에는 대상 리전의 AWS 서비스 엔드포인트(예: S3 리전 엔드포인트)와 관리형 서비스용 AWS IP 블록(예: 로드 밸런서 및 Amazon API Gateway에 사용되는 IP 주소)이 포함됩니다. 이 작업은 실험 리전에서 대상 리전으로의 교차 리전 VPC 피어링 연결을 통한 네트워크 연결도 차단합니다. 이는 실험 리전 내의 VPC 엔드포인트에 대한 액세스에는 영향을 미치지 않지만, 실험 리전에서 대상 리전의 VPC 엔드포인트로 향하는 트래픽을 차단합니다.

이 작업은 실험 리전의 서브넷을 대상으로 합니다. 기본적으로 이 작업은 값이 AllowedDisruptSubnet라는 이름의 태그가 있는 서브넷을 대상으로 합니다. 이 태그를 서브넷에 추가하거나 실험 템플릿에서 기본 태그를 사용자 지정 태그로 바꿀 수 있습니다. 기본적으로 유효한 서브넷을 찾을 수 없는 경우 이 작업은 건너뛰게 됩니다.

S3 복제 일시 중지

Cross Region: Connectivity에는 대상 버킷에 대해 실험 리전에서 대상 리전으로의 S3 복제를 일시 중지하는 aws:s3:bucket-pause-replication이 포함됩니다. 대상 리전에서 실험 리전으로의 복제는 영향을 받지 않습니다. 시나리오가 종료되면 일시 중지된 시점부터 버킷 복제가 다시 시작됩니다. 복제가 모든 객체를 동기화 상태로 유지하는 데 걸리는 시간은 실험 기간과 버킷에 대한 객체 업로드 속도에 따라 달라질 수 있습니다.

이 작업은 대상 리전의 S3 버킷에 교차 리전 복제(CPR)를 사용하도록 설정한 실험 리전의 S3 버킷을 대상으로 합니다. 기본적으로 이 작업은 값이 AllowedDisruptS3라는 이름의 태그가 있는 버킷을 대상으로 합니다. 이 태그를 버킷에 추가하거나 실험 템플릿에서 기본 태그를 사용자 지정 태그로 바꿀 수 있습니다. 기본적으로 유효한 버킷을 찾을 수 없는 경우 이 작업은 건너뛰게 됩니다.

DynamoDB 복제 일시 중지

Cross-Region: Connectivity실험 지역과 대상 지역을 포함한 다른 모든 지역 간의 복제를 일시 중지하는 aws:dynamodb:global-table-pause-replication이 포함되어 있습니다. 이렇게 하면 실험 리전 안팎으로의 복제는 방지되지만 다른 리전 간의 복제에는 영향을 미치지 않습니다. 시나리오가 종료되면 일시 중지된 시점부터 테이블 복제가 다시 시작됩니다. 복제가 모든 데이터를 동기화하는 데 걸리는 시간은 실험 기간과 테이블 변경 속도에 따라 달라질 수 있습니다.

이 작업은 실험 지역의 DynamoDB 글로벌 테이블을 대상으로 합니다. 기본적으로 이 작업은 값이 AllowedDisruptDynamoDb라는 이름의 태그가 있는 테이블을 대상으로 합니다. 이 태그를 테이블에 추가하거나 실험 템플릿에서 기본 태그를 사용자 지정 태그로 바꿀 수 있습니다. 기본적으로 유효한 글로벌 테이블을 찾을 수 없는 경우 이 작업은 건너뛰게 됩니다.

제한 사항

  • 이 시나리오에는 중지 조건이 포함되어 있지 않습니다. 애플리케이션에 맞는 올바른 중지 조건을 실험 템플릿에 추가해야 합니다.

요구 사항

  • AWS FIS 실험 역할에 필요한 권한을 추가합니다.

  • 리소스 태그는 실험의 대상이 되는 리소스에 적용해야 합니다. 자체 태그 지정 규칙 또는 시나리오에 정의된 기본 태그를 사용할 수 있습니다.

권한

다음 정책은 Cross-Region: Connectivity 시나리오로 실험을 실행하는 데 필요한 권한을 AWS FIS에 부여합니다. 이 정책은 실험 역할에 연결되어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RouteTableDisruptConnectivity1", "Effect": "Allow", "Action": "ec2:CreateRouteTable", "Resource": "arn:aws:ec2:*:*:route-table/*", "Condition": { "StringEquals": { "aws:RequestTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity2", "Effect": "Allow", "Action": "ec2:CreateRouteTable", "Resource": "arn:aws:ec2:*:*:vpc/*" }, { "Sid": "RouteTableDisruptConnectivity21", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:route-table/*", "Condition": { "StringEquals": { "ec2:CreateAction": "CreateRouteTable", "aws:RequestTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity3", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:CreateAction": "CreateNetworkInterface", "aws:RequestTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity4", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:prefix-list/*", "Condition": { "StringEquals": { "ec2:CreateAction": "CreateManagedPrefixList", "aws:RequestTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity5", "Effect": "Allow", "Action": "ec2:DeleteRouteTable", "Resource": [ "arn:aws:ec2:*:*:route-table/*", "arn:aws:ec2:*:*:vpc/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity6", "Effect": "Allow", "Action": "ec2:CreateRoute", "Resource": "arn:aws:ec2:*:*:route-table/*", "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity7", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "aws:RequestTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity8", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "RouteTableDisruptConnectivity9", "Effect": "Allow", "Action": "ec2:DeleteNetworkInterface", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity10", "Effect": "Allow", "Action": "ec2:CreateManagedPrefixList", "Resource": "arn:aws:ec2:*:*:prefix-list/*", "Condition": { "StringEquals": { "aws:RequestTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity11", "Effect": "Allow", "Action": "ec2:DeleteManagedPrefixList", "Resource": "arn:aws:ec2:*:*:prefix-list/*", "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity12", "Effect": "Allow", "Action": "ec2:ModifyManagedPrefixList", "Resource": "arn:aws:ec2:*:*:prefix-list/*", "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity13", "Effect": "Allow", "Action": [ "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcs", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeManagedPrefixLists", "ec2:DescribeSubnets", "ec2:DescribeRouteTables", "ec2:DescribeVpcEndpoints" ], "Resource": "*" }, { "Sid": "RouteTableDisruptConnectivity14", "Effect": "Allow", "Action": "ec2:ReplaceRouteTableAssociation", "Resource": [ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:route-table/*" ] }, { "Sid": "RouteTableDisruptConnectivity15", "Effect": "Allow", "Action": "ec2:GetManagedPrefixListEntries", "Resource": "arn:aws:ec2:*:*:prefix-list/*" }, { "Sid": "RouteTableDisruptConnectivity16", "Effect": "Allow", "Action": "ec2:AssociateRouteTable", "Resource": [ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:route-table/*" ] }, { "Sid": "RouteTableDisruptConnectivity17", "Effect": "Allow", "Action": "ec2:DisassociateRouteTable", "Resource": [ "arn:aws:ec2:*:*:route-table/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity18", "Effect": "Allow", "Action": "ec2:DisassociateRouteTable", "Resource": [ "arn:aws:ec2:*:*:subnet/*" ] }, { "Sid": "RouteTableDisruptConnectivity19", "Effect": "Allow", "Action": "ec2:ModifyVpcEndpoint", "Resource": [ "arn:aws:ec2:*:*:route-table/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/managedByFIS": "true" } } }, { "Sid": "RouteTableDisruptConnectivity20", "Effect": "Allow", "Action": "ec2:ModifyVpcEndpoint", "Resource": [ "arn:aws:ec2:*:*:vpc-endpoint/*" ] }, { "Sid": "TransitGatewayDisruptConnectivity1", "Effect": "Allow", "Action": [ "ec2:DisassociateTransitGatewayRouteTable", "ec2:AssociateTransitGatewayRouteTable" ], "Resource": [ "arn:aws:ec2:*:*:transit-gateway-route-table/*", "arn:aws:ec2:*:*:transit-gateway-attachment/*" ] }, { "Sid": "TransitGatewayDisruptConnectivity2", "Effect": "Allow", "Action": [ "ec2:DescribeTransitGatewayPeeringAttachments", "ec2:DescribeTransitGatewayAttachments", "ec2:DescribeTransitGateways" ], "Resource": "*" }, { "Sid": "S3CrossRegion1", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": "*" }, { "Sid": "S3CrossRegion2", "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": "*" }, { "Sid": "S3CrossRegion3", "Effect": "Allow", "Action": [ "s3:PauseReplication" ], "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:DestinationRegion": "*" } } }, { "Sid": "S3CrossRegion4", "Effect": "Allow", "Action": [ "s3:GetReplicationConfiguration", "s3:PutReplicationConfiguration" ], "Resource": "arn:aws:s3:::*", "Condition": { "BoolIfExists": { "s3:isReplicationPauseRequest": "true" } } }, { "Sid": "DdbCrossRegion1", "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": "*" }, { "Sid": "DdbCrossRegion2", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:DescribeGlobalTable" ], "Resource": [ "arn:aws:dynamodb:*:*:table/*", "arn:aws:dynamodb:*:*:global-table/*" ] }, { "Sid": "DdbCrossRegion3", "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GetKeyPolicy", "kms:PutKeyPolicy" ], "Resource": "arn:aws:kms:*:*:key/*" } ] }

시나리오 콘텐츠

다음 콘텐츠는 시나리오를 정의합니다. 이 JSON을 저장하여 AWS Command Line Interface(AWS CLI)에서 create-experiment-template 명령을 사용하여 실험 템플릿을 만드는 데 사용할 수 있습니다. 최신 버전의 시나리오를 보려면 FIS 콘솔의 시나리오 라이브러리를 방문하세요.

{ "targets": { "Transit-Gateway": { "resourceType": "aws:ec2:transit-gateway", "resourceTags": { "TgwTag": "TgwValue" }, "selectionMode": "ALL" }, "Subnet": { "resourceType": "aws:ec2:subnet", "resourceTags": { "SubnetKey": "SubnetValue" }, "selectionMode": "ALL", "parameters": {} }, "S3-Bucket": { "resourceType": "aws:s3:bucket", "resourceTags": { "S3Impact": "Allowed" }, "selectionMode": "ALL" }, "DynamoDB-Global-Table": { "resourceType": "aws:dynamodb:encrypted-global-table", "resourceTags": { "DisruptDynamoDb": "Allowed" }, "selectionMode": "ALL" } }, "actions": { "Disrupt-Transit-Gateway-Connectivity": { "actionId": "aws:network:transit-gateway-disrupt-cross-region-connectivity", "parameters": { "duration": "PT3H", "region": "eu-west-1" }, "targets": { "TransitGateways": "Transit-Gateway" } }, "Disrupt-Subnet-Connectivity": { "actionId": "aws:network:route-table-disrupt-cross-region-connectivity", "parameters": { "duration": "PT3H", "region": "eu-west-1" }, "targets": { "Subnets": "Subnet" } }, "Pause-S3-Replication": { "actionId": "aws:s3:bucket-pause-replication", "parameters": { "duration": "PT3H", "region": "eu-west-1" }, "targets": { "Buckets": "S3-Bucket" } }, "Pause-DynamoDB-Replication": { "actionId": "aws:dynamodb:encrypted-global-table-pause-replication", "parameters": { "duration": "PT3H" }, "targets": { "Tables": "DynamoDB-Global-Table" } } }, "stopConditions": [ { "source": "none" } ], "roleArn": "", "logConfiguration": { "logSchemaVersion": 2 }, "tags": { "Name": "Cross-Region: Connectivity" }, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "skip" }, "description": "Block application network traffic from experiment Region to target Region and pause cross-Region replication" }