Amazon VPC Lattice
  • Amazon VPC Lattice
  • Amazon VPC Lattice 소개
  • 01. 사전 준비 및 소개
    • 1. LAB 소개
    • 2. 사전준비
  • 02. Service to Service 연결
    • 1. Target Group 생성
    • 2. Service 생성
    • 3. Service Network 생성
    • 4. 연결 테스트
  • 03. Security
    • 1. 사전 준비
    • 2. 서비스 네트워크 보호
    • 3. 인증정책 기반 서비스 보호
    • 4. AWS SigV4
  • 04. Observability
    • 1. Access Log 구성
  • 05.Gateway API Controller
    • AWS Gateway API Controller 설치
    • 기본 구성하기
    • MultiCluster 구성
Powered by GitBook
On this page
  • 1.Service Network 보호
  • Step1. Service network 구성
  1. 03. Security

2. 서비스 네트워크 보호

Update : 2024.01.10

Previous1. 사전 준비Next3. 인증정책 기반 서비스 보호

Last updated 11 months ago

인증된 사용자만 허용하도록 서비스 네트워크에 인증된 사용자만 허용하는 인증 정책을 적용하여 서비스 네트워크에 대한 접근을 안전하게 보호하는 방법을 살펴보겠습니다.

1.Service Network 보호

Step1. Service network 구성

"VPC Lattice" -"Services Networks"를 클릭한 다음 오른쪽 창의 서비스 네트워크 "superappsvcnetwork"를 클릭합니다.

"superappsvcnetwork" 의 "Access" - "Edit access settings"를 선택합니다.

Access 설정 편집 화면에서 "AWS IAM"을 선택한 다음 정책 템플릿 적용 DropDown에서 "Allow only authenticated access"을 선택한 다음 "Save Change"를 클릭합니다. 동일한 화면에서 정책을 검토할 수 있습니다. “StringNotEqualsIgnoreCase”를 “aws PrincipalType” “anonymous”와 일치시키는 조건문을 사용하여 인증되지 않은 액세스 요청을 거부합니다.

  • AWS IAM 선택

  • Apply policy template : Allow only authenticated access

Step2. 구성 시험

LatticeWorkshop InstanceClient1 또는 LatticeWorkshop InstanceClient2에 로그인하고 다음 명령을 실행하여 Reservation 서비스, Parking 서비스에 인증되지 않은 요청을 보냅니다.

curl https://${reservation_svc_dns}
curl http://${parking_svc_dns}/rates
curl http://${parking_svc_dns}/payments

아래와 같은 메세지가 출력되면서, 오류가 발생할 것입니다.

AccessDeniedException: User: anonymous is not authorized to perform: vpc-lattice-svcs:Invoke on resource: arn:aws:vpc-lattice:us-west-2:197153502150:service/svc-09bb2a1b2bc13ecc9/ because no network-based policy allows the vpc-lattice-svcs:Invoke action
AccessDeniedException: User: anonymous is not authorized to perform: vpc-lattice-svcs:Invoke on resource: arn:aws:vpc-lattice:us-west-2:197153502150:service/svc-0dcc67d057e4a5626/rates because no network-based policy allows the vpc-lattice-svcs:Invoke action
curl https://${reservation_svc_dns} --aws-sigv4 "aws:amz:ap-northeast-2:vpc-lattice-svcs" --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" --header "x-amz-security-token:$AWS_SESSION_TOKEN" --header "x-amz-content-sha256:UNSIGNED-PAYLOAD"
curl http://${parking_svc_dns}/rates --aws-sigv4 "aws:amz:ap-northeast-2:vpc-lattice-svcs" --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" --header "x-amz-security-token:$AWS_SESSION_TOKEN" --header "x-amz-content-sha256:UNSIGNED-PAYLOAD"
curl http://${parking_svc_dns}/payments --aws-sigv4 "aws:amz:ap-northeast-2:vpc-lattice-svcs" --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" --header "x-amz-security-token:$AWS_SESSION_TOKEN" --header "x-amz-content-sha256:UNSIGNED-PAYLOAD"

아래와 같은 결과 값을 정상적으로 출력합니다.

$ curl https://reservation-09bb2a1b2bc13ecc9.7d67968.vpc-lattice-svcs.us-west-2.on.aws --aws-sigv4 "aws:amz:us-west-2:vpc-lattice-svcs" --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" --header "x-amz-security-token:$AWS_SESSION_TOKEN" --header "x-amz-content-sha256:UNSIGNED-PAYLOAD"
<html>
    <head>
    <title>Hello From Lattice Reservations!</title>
    <style>
    html, body {
    margin: 0; padding: 0;
    font-family: arial; font-weight: 700; font-size: 3em;
    text-align: center;
    }
    </style>
    </head>
    <body>
    <p>Hello From Lattice Reservations!</p>
    </body>
    </html>
    
$ curl http://parking-0dcc67d057e4a5626.7d67968.vpc-lattice-svcs.us-west-2.on.aws/rates --aws-sigv4 "aws:amz:us-west-2:vpc-lattice-svcs" --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" --header "x-amz-security-token:$AWS_SESSION_TOKEN" --header "x-amz-content-sha256:UNSIGNED-PAYLOAD"
Hello from "rates"
$ curl http://parking-0dcc67d057e4a5626.7d67968.vpc-lattice-svcs.us-west-2.on.aws/payments --aws-sigv4 "aws:amz:us-west-2:vpc-lattice-svcs" --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" --header "x-amz-security-token:$AWS_SESSION_TOKEN" --header "x-amz-content-sha256:UNSIGNED-PAYLOAD"
Hello from "payments"

에서 설정한 자격증명으로 다시 접근을 시도해 봅니다.

"1.사전준비"