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
  • Step1. Access 정책 구성
  • Step2. 시험 구성
  1. 03. Security

4. AWS SigV4

Update : 2024.06.07

Previous3. 인증정책 기반 서비스 보호Next04. Observability

Last updated 11 months ago

AWS SigV4를 사용하여 VPC Lattice 서비스에 대한 Request에 서명하여 Service에 프로그래밍 방식으로 액세스할 수 있습니다. 이 단계에서는 AWS SigV4를 사용하여 superappsvcnetwork의 예약 서비스에 대한 요청에 서명하는 샘플 Python 코드를 사용하여 이를 수행하는 방법을 살펴보겠습니다.

Step1. Access 정책 구성

"VPC Lattice" - "Services" 의 reservation 은 선택합니다.

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

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

Step2. 시험 구성

LatticeWorkshop InstanceClient1 또는 LatticeWorkshop InstanceClient2에 로그인하고 Python 샘플코드를 실행합니다. 이 프로그램은 2개의 인수를 사용합니다.

  • 호출되는 서비스의 URL

  • HTTP Methon (GET 또는 POST)

이후 다음 botocore 라이브러리로 AWS SigV4를 사용하여 요청에 서명합니다.

SSM(SystemCenter Session Manager) 콘솔이 닫힌 경우 재접속 후에 IAM 자격을 다시 입력해 줍니다.

aws ssm start-session --target $InstanceClient1
source ~/.bash_profile
AWS_SESSION_TOKEN=$(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/${InstanceClient_IAM_ROLE} | jq -r '.Token')
AWS_ACCESS_KEY_ID=$(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/${InstanceClient_IAM_ROLE}  | jq -r '.AccessKeyId')
AWS_SECRET_ACCESS_KEY=$(curl http://169.254.169.254/latest/meta-data/iam/security-credentials/${InstanceClient_IAM_ROLE}  | jq -r '.SecretAccessKey')

InstanceClient1 또는 2 콘솔에서 아래와 같은 명령어를 수행합니다.

sed 's/us-west-2/ap-northeast-2/' /home/ssm-user/signSigV4.py
cd /home/ssm-user/
python3 ./lattice_sigv4_sample/signSigV4.py https://${reservation_svc_dns} POST
python3 ./lattice_sigv4_sample/signSigV4.py https://${reservation_svc_dns} GET

아래와 같은 결과를 확인 할 수 있습니다.

$ python3 signSigV4.py https://reservation-09bb2a1b2bc13ecc9.7d67968.vpc-lattice-svcs.us-west-2.on.aws POST
<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>
sh-4.2$ python3 signSigV4.py https://reservation-09bb2a1b2bc13ecc9.7d67968.vpc-lattice-svcs.us-west-2.on.aws GET
<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>

GET만 허용하거나 POST만 허용하도록 인증 정책을 수정하면 더 자세히 알아볼 수 있습니다. 예를 들어 아래 인증 정책은 Python 프로그램의 POST만 허용합니다.

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIgnoreCase": {
                    "aws:PrincipalType": "anonymous",
                    "vpc-lattice-svcs:RequestMethod": "GET"
                }
            }
        }
    ]
}

"reservation-service-dns-name"은 에서 복사해 둔 reservation 서비스의 도메인 이름 변경합니다.

더 상세한 Auth Policy는 를 참조하십시요.

User Guide - Auth Policy
1.사전준비 단계