4. AWS SigV4
Update : 2024.06.07
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를 사용하여 요청에 서명합니다.
"reservation-service-dns-name"은 1.사전준비 단계 에서 복사해 둔 reservation 서비스의 도메인 이름 변경합니다.
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"
}
}
}
]
}
더 상세한 Auth Policy는 User Guide - Auth Policy 를 참조하십시요.
Last updated