AWS 네트워크 ACL

  • VPC를 위한 선택적 보안 계층
  • 시큐리티 그룹과 다르게 차단, deny 룰을 사용할 수 있다
  • ruleNumber가 낮은 숫자일수록 우선적용된다
  • 20개까지 규칙을 지정할 수 있다고 한다
  • 실제로 가용가능한 개수는 18개다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
CidrBlock: '0.0.0.0/0',
Egress: false,
Protocol: '-1',
RuleAction: 'allow',
RuleNumber: 100
},
{
CidrBlock: '0.0.0.0/0',
Egress: false,
Protocol: '-1',
RuleAction: 'deny',
RuleNumber: 32767
}
  • 인바운드의 경우 이 2개가 기본적으로 세팅되어있다

aws-sdk 로 ACL 룰 추가, 교체하기

acl.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var in_params: EC2.CreateNetworkAclEntryRequest = {
CidrBlock: ipv4 + '/24',
Egress: false, //If true, OUTbound rule. fasle is INbound
NetworkAclId: aclId,
Protocol: `6`, // -1 : all protocl // 6 : 사용자 지정 tcp
PortRange: { From: 80, To: 443 }, // http - https
RuleAction: 'deny',
RuleNumber: acl_cnt, // 우선순위 ruleNumber
};

// 기존 존재하는 acl 규칙 개수에 따라서 mode를 달리한다
// mode값에 따라 메서드를 달리함
// 20개가 안되는 경우 createNetworkAclEntry 를 사용함
// 20개 모두 찬경우 replaceNetworkAclEntry를 통해 교체하는 방법
const method =
mode === 'create' ? 'createNetworkAclEntry' : 'replaceNetworkAclEntry';

return new Promise((resolve, reject) => {
ec2[method](in_params, function (err, data) {
if (err) {
console.log(err.message, acl_cnt);

return reject(err.message);
} else {
console.log('Create AclEntry Successful : \n', in_params); // successful response
resolve(in_params);
}
});
});
  • 이상한 요청을 차단하기 위해 알아보았다

참고

RDS 비공개하는 방법

  • 내 RDS 지키기
  • 내가 지정한 IP에서만 접근가능하도록 설정하자

따라하기

  • 설정하고싶은 RDS 화면에 들어간다
  • 연결 & 보안 > 보안 > vpc 보안 그룹
  • 을 눌러서 현재 rds에 적용되어 있는 보안그룹 설정으로 들어간다
  • 인바운드 규칙 > 인바운드 규칙 편집으로 들어간다
  • 아마 이런식으로 위치무관으로 되어있을 수 있는데
  • 이 규칙으로 인해 모든 컴퓨터에서 접근가능하게 해준다
  • 이 규칙을 이제 내 컴퓨터에서만 접근가능하도록 고쳐보자
    1. MySQL/Aurora 를 선택해서 포트를 제한한다
    1. 소스 유형에 내 IP 를 선택한다
    1. 내 공인 IP 주소로 바뀌었는지 확인한다
  • 이렇게하면 내 IP에서 MySQL 접근 포트인 3306 포트로만 접근을 허용하는 세팅이 된 것이다
  • 규칙 저장을 눌러 적용시켜준다
  • 끝!