dynamodb 역할을 인스턴스에 부여하면 aws CLI 계정인증 없이 dynamodb 접근 가능
마찬가지로 s3로 가능
s3에 저장하는 데이터: 주로 item ( 이미지, 동영상 ... ),
dynamodb에 저장하는 데이터: 주로 url
VPC 구성
WAF (Web Application Firewall)
VPC 엔드포인트 설정
Lambda 함수가 접근할 서비스(S3, DynamoDB 등)에 대한 VPC 엔드포인트를 설정하려면 다음 단계를 수행해야 합니다:
VPC 콘솔로 이동:
엔드포인트 생성:
왼쪽 메뉴에서 "엔드포인트(Endpoints)"를 선택합니다.
"엔드포인트 생성(Create Endpoint)" 버튼을 클릭합니다.
접근하려는 서비스(S3, DynamoDB 등)를 선택합니다.
VPC와 서브넷을 선택합니다.
필요한 경우, 라우팅 테이블과 보안 그룹을 설정합니다.
엔드포인트를 생성합니다.
엔드 포인트의 유형을 Interface로 설정할 경우 VPC 설정의 DNS 호스트 이름 활성화 필요
s3 엔드포인트도 같은 방식으로 생성
lambda 함수 VPC 설정
Lambda 함수를 VPC에 연결하려면 다음 단계를 수행해야 합니다:
AWS Management Console에 로그인:
Lambda 콘솔로 이동:
Lambda 함수 선택:
구성 탭으로 이동:
네트워크 설정 변경:
"네트워크(Network)" 섹션에서 "VPC" 설정을 편집합니다.
사용할 VPC, 서브넷, 그리고 보안 그룹을 선택합니다.
변경 사항을 저장합니다.
lambda 함수 vpc 설정 역할 문제
Lambda 함수의 실행 역할에 필요한 권한을 추가하여 이 문제를 해결할 수 있습니다. 이를 위해 다음 단계를 따르세요:
IAM 콘솔로 이동:
역할(Role) 선택:
권한 정책 추가:
선택한 역할의 "권한" 탭에서 "권한 추가(Add permissions)" 버튼을 클릭합니다.
"정책 연결(Attach policies)"을 선택합니다.
다음 정책을 검색하고 선택합니다: AWSLambdaVPCAccessExecutionRole
"권한 추가(Add permissions)" 버튼을 클릭하여 선택한 정책을 역할에 추가합니다.
VPC에 연결된 Lambda 함수는 네트워크 인터페이스를 생성하고 관리할 수 있어야 하므로, 이러한 권한이 필요합니다.
AWS에서 VPC를 생성한 후에 VPC 엔드포인트를 통해 PrivateLink를 사용하여 S3와 Lambda 서비스를 private 서브넷에서 실행하는 것에는 여러 가지 이점이 있습니다. 이를 요약하면 다음과 같습니다:
보안 강화:
인터넷 게이트웨이 필요 없음: VPC 엔드포인트를 사용하면 인터넷을 통해 퍼블릭 IP를 사용하지 않고도 S3와 Lambda에 접근할 수 있습니다. 이는 데이터가 인터넷을 거치지 않으므로 보안이 크게 강화됩니다.
네트워크 트래픽 통제: 모든 트래픽이 AWS 네트워크 내에서 유지되므로 데이터 유출 위험이 줄어듭니다. 또한, 네트워크 ACL 및 보안 그룹을 사용하여 추가적인 보안 정책을 적용할 수 있습니다.
비용 절감:
향상된 성능:
운영 단순화:
간소화된 네트워크 구성: VPC 엔드포인트를 사용하면 NAT 게이트웨이, 인터넷 게이트웨이 등을 설정할 필요가 없습니다. 이는 네트워크 구성을 간소화하고 관리 오버헤드를 줄여줍니다.
서비스 접근 제어: IAM 정책과 결합하여 S3와 Lambda에 대한 접근 제어를 세밀하게 관리할 수 있습니다. 이를 통해 조직의 보안 정책을 준수하면서도 효율적으로 서비스를 운영할 수 있습니다.
프라이빗 서브넷 활용:
종합적으로, VPC 엔드포인트와 PrivateLink를 사용하면 보안, 비용, 성능 및 운영 효율성 측면에서 많은 이점을 얻을 수 있습니다. 이를 통해 AWS 환경에서 보다 안전하고 효율적인 인프라를 구축할 수 있습니다.
AWS에서 VPC 엔드포인트를 설정하면, 인터넷 게이트웨이와 NAT 게이트웨이가 설정되어 있어도 VPC 엔드포인트가 우선 순위가 됩니다. 이 우선 순위는 라우팅 테이블에 의해 결정됩니다.
라우팅 테이블 구성:
라우팅 우선 순위:
라우팅 테이블에서는 보다 구체적인 경로가 더 일반적인 경로보다 우선합니다. 예를 들어, "10.0.0.0/16"과 같은 경로가 있을 때 "10.0.1.0/24"와 같은 더 특정한 경로가 우선 순위가 됩니다.
VPC 엔드포인트 경로가 라우팅 테이블에 추가되면 해당 서비스에 대한 요청은 VPC 엔드포인트를 통해 전달됩니다. 예를 들어, S3의 경우 "pl-xxxxxxx" 경로가 "0.0.0.0/0" 경로보다 우선 순위가 됩니다.
인터넷 게이트웨이 및 NAT 게이트웨이:
예시
라우팅 테이블:
S3 VPC 엔드포인트: pl-12345678 (대상: com.amazonaws.<\region>.s3)
인터넷 게이트웨이: 0.0.0.0/0 (대상: igw-abcdefgh)
NAT 게이트웨이: 0.0.0.0/0 (대상: nat-abcdefgh)
이 경우, S3에 대한 모든 트래픽은 pl-12345678 VPC 엔드포인트를 통해 전달되고, 나머지 인터넷 트래픽은 인터넷 게이트웨이나 NAT 게이트웨이를 통해 전달됩니다.
인터넷 게이트웨이와 NAT 게이트웨이는 VPC 엔드포인트 경로가 없는 트래픽에 대해 작동합니다. VPC 엔드포인트가 설정된 경우, 해당 서비스(S3 또는 Lambda)에 대한 트래픽은 NAT 게이트웨이나 인터넷 게이트웨이를 경유하지 않고 VPC 엔드포인트를 통해 전달됩니다.
Lambda 서비스의 VPC 엔드포인트를 생성한 경우, Lambda 함수가 지정된 VPC의 지정된 프라이빗 서브넷에서 실행될 수 있습니다. 이 경우, Lambda 함수는 지정된 VPC 서브넷 내의 리소스에 접근할 수 있고, VPC 엔드포인트를 통해 다른 AWS 서비스에 연결될 수 있습니다. ( vpc 서비스가 구성이 안되어 있는 경우 AWS 자체 네트워크 에서 Lambda 함수 실행 )
vpc 엔드포인트를 통해 resource에 연결된 것을 확인


nat gateway를 삭제하면 private subnet에서 생성된 인스턴스에서 s3로 접근이 안되며, vpc endpoint를 생성하면 s3에 접근 가능한 것을 확인
생성 방법은 유사하며 interface로 생성된 경우 라우팅 테이블에 연결 x
interface 유형으로 접근할 때는 엔드포인트의 dns 이름 필요
Interface Endpoint로 S3 접근하기:
aws s3 --endpoint-url https://bucket. <your_vpce_dns_name> ls s3://<your_bucket_name>
인터페이스 엔드포인트 (Interface Endpoint)
구현 방식 : 탄력적 네트워크 인터페이스(ENI)
지원 서비스 : 대부분의 AWS 서비스
라우팅 : ENI를 통한 직접 통신
비용 : 시간당 요금 + 데이터 처리 요금
보안 : 그룹 사용 가능
게이트웨이 엔드포인트 (Gateway Endpoint)
구현 방식 : 라우팅 테이블 항목
지원 서비스 : Amazon S3, DynamoDB
라우팅 : 라우팅 테이블 항목
비용 : 무료 사용 (데이터 전송 비용만 발생)
보안 : 정책을 통해 액세스 제어
각각의 엔드포인트 유형은 특정 사용 사례에 맞게 설계되었습니다. 인터페이스 엔드포인트는 다양한 AWS 서비스에 대한 연결을 제공하며, 보안 그룹을 사용하여 트래픽을 세밀하게 제어할 수 있습니다. 반면, 게이트웨이 엔드포인트는 S3와 DynamoDB에 대해 간단하고 비용 효율적인 접근 방법을 제공합니다.
IAM 콘솔로 이동:
역할 생성:
서비스 선택:
"신뢰할 수 있는 엔터티 유형 선택"에서 "AWS 서비스"를 선택합니다.
"사용 사례"에서 "EC2"를 선택합니다.
권한 부여:
역할 이름 설정:
역할이 VPC Flow Logs에 의해 사용될 수 있도록 역할의 트러스트 정책을 수정해야 합니다.
생성된 역할 선택:
트러스트 관계 편집:
트러스트 정책 수정:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "vpc-flow-logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
VPC 콘솔로 이동:
Flow Logs 생성:
왼쪽 메뉴에서 "Flow Logs"를 선택합니다.
"Create Flow Log" 버튼을 클릭합니다.
Flow Log 설정:
필터(Filter): 캡처할 트래픽 유형을 선택합니다 (예: ALL, ACCEPT, REJECT).
IAM 역할(Role): 앞서 생성한 IAM 역할을 선택합니다.
대상(Target): 로그를 전송할 대상으로 "CloudWatch Logs"를 선택합니다.
로그 그룹(Log group): 새 로그 그룹을 생성하거나 기존 로그 그룹을 선택합니다.
이름 접두사(Name prefix): 로그 스트림 이름의 접두사를 설정합니다 (선택 사항).
Flow Log 적용 대상 선택:
VPC, 서브넷, 또는 네트워크 인터페이스 중 하나를 선택하여 Flow Log를 적용합니다.
"VPC"를 선택하여 전체 VPC의 트래픽을 캡처하거나 특정 서브넷 또는 네트워크 인터페이스를 선택할 수 있습니다.
Flow Log 생성:
이 과정을 통해 VPC Flow Logs를 설정하고 네트워크 트래픽을 기록할 수 있습니다. 설정이 완료되면, CloudWatch Logs에서 네트워크 트래픽의 로그를 확인할 수 있습니다.
lambda 함수를 엔드포인트 DNS 이름을 사용하여 Lambda 함수를 호출
- aws lambda --endpoint-url https://vpce-09b6ae06e7f111853-ot9csbj8.lambda.ap-northeast-2.vpce.amazonaws.com invoke --function-name Survey-items --payload file://event.json output.json
lambda privatelink IPv4 주소 : 10.250.3.235, 10.250.13.235
s3 privatelink IPv4 주소 : 10.250.3.245, 10.250.13.245
인스턴스 IPv4 주소 : 10.250.3.246
443 포트 번호와 10.250.x.x 같은 IP 주소 범위가 사용되고 있는 것을 보아 프라이빗 링크를 사용하고 있는것을 확인 가능

포트 번호 443은 HTTPS 트래픽을 나타냅니다. 이는 S3와 같은 AWS 서비스에 접근할 때 사용되고, 로그에 등장하는 IP 주소 10.250.3.246와 10.250.13.245이 VPC 내의 프라이빗 IP 주소 범위에 속해 있는지 확인

보안 강화: Lambda 함수는 여전히 인터넷으로부터 직접 접근할 수 없으며, 내부 리소스와 안전하게 통신할 수 있습니다.
내부 서비스 접근: Lambda 함수는 동일한 VPC 내의 다른 리소스와 안전하게 통신할 수 있습니다.
인터넷 및 AWS 서비스 접근: NAT 게이트웨이를 통해 Lambda 함수가 인터넷 및 AWS 서비스에 접근할 수 있습니다. 제공된 로그는 Lambda 함수가 인터넷을 통해 AWS 서비스에 접근하고 있음을 나타냅니다.
람다 함수의 vpc 구성을 private network에 배치하고 네트워크 트래픽 확인

Step 1: IPSet 생성
AWS Management Console에 로그인합니다.
WAF & Shield 서비스로 이동합니다.
IPSet을 선택하고 Create IP set을 클릭합니다.
IPSet의 이름을 입력하고 설명을 추가합니다.
IP 주소나 IP 범위를 추가합니다.
Create를 클릭하여 IPSet을 생성합니다.
Step 2: Web ACL 생성 또는 기존 ACL 편집
WAF & Shield 서비스로 이동합니다.
Web ACL을 선택하고 Create web ACL을 클릭하거나 기존 ACL을 편집합니다.
Web ACL의 이름과 리소스(예: CloudFront 배포, ALB)를 지정합니다.
Rules 섹션에서 Add rule을 클릭합니다.
Add my own rules and rule groups를 선택하고 Next를 클릭합니다.
Step 3: 차단 또는 허용 규칙 추가
Rule type을 IP set으로 선택합니다.
IPSet 규칙의 이름을 입력합니다.
Inspect 옵션에서 IP address를 선택합니다.
IP set 드롭다운 메뉴에서 앞서 생성한 IPSet을 선택합니다.
Action에서 Block 또는 Allow를 선택합니다.
Add rule을 클릭합니다.
Next를 클릭하여 변경 사항을 저장합니다.
퍼블릭 IP를 IPset에 block세팅해서 접근하지 못하는 것 확인

White IP list rule 생성
허용 규칙 설정:
규칙 이름: AllowSpecificIP
IF a request: matches the statement
Statement: 생성한 IPSet (허용할 IP 주소)
Action: Allow
기본 차단 규칙 설정:
규칙 이름: BlockAllOtherRequests
IF a request: doesn't match the statement
Statement: 앞서 추가한 허용 규칙에 포함되지 않는 모든 요청
Action: Block
이렇게 하면 특정 IP 주소(43.200.141.20/32)만 허용되고 나머지 모든 트래픽은 차단되도록 AWS WAF 설정이 완료되고, 특정 IP 주소인 43.200.141.20/32는 프라이빗 IP 주소에서 오는 트래픽을 퍼블릭 IP 주소로 변환한 IP이기 때문에 프라이빗 IP 주소에서 오는 요청만 허용
private subnet의 private IP를 public IP로 변환시키는 Nat gateway의 기본 퍼블릭 IPv4 주소( 43.200.141.20 ) 만 허용하여 private subnet에서는 접속가능하지만 private subnet이 아닌 곳에서 접속이 불가능한 모습 확인

