메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

Amazon RDS 보안 그룹

보안 그룹은 DB 인스턴스에서 송수신되는 트래픽에 대한 액세스를 제어합니다. DB 보안 그룹, VPC 보안 그룹, EC2 보안 그룹이라는 세 가지 유형의 보안 그룹이 Amazon RDS에서 사용됩니다. 간단히 말해 DB 보안 그룹은 VPC에 있지 않은 EC2-Classic DB 인스턴스에 대한 액세스를 제어하고, VPC 보안 그룹은 VPC 내부에 있는 DB 인스턴스 및 EC2 인스턴스에 대한 액세스를 제어하며, EC2 보안 그룹은 EC2 인스턴스에 대한 액세스를 제어합니다.

기본적으로 DB 인스턴스에 대한 네트워크 액세스는 해제되어 있습니다. IP 주소 범위, 포트 또는 EC2 보안 그룹에서 액세스를 허용하는 보안 그룹의 규칙을 지정할 수 있습니다. 수신 규칙이 설정되면 동일한 규칙이 해당 보안 그룹과 연결된 모든 DB 인스턴스에 적용됩니다. 보안 그룹에서 최대 20개의 규칙을 지정할 수 있습니다.

DB 보안 그룹

DB 보안 그룹은 VPC에 있지 않고 EC2-Classic 플랫폼에 있는 DB 인스턴스에서 사용됩니다. 각 DB 보안 그룹 규칙을 설정하면 특정 소스가 해당 DB 보안 그룹과 연결되어 있는 DB 인스턴스에 액세스할 수 있습니다. 소스는 주소 범위(예: 203.0.113.0/24) 또는 EC2 보안 그룹일 수 있습니다. EC2 보안 그룹을 소스로 지정하면 해당 EC2 보안 그룹을 사용하는 모든 EC2 인스턴스에서 수신 트래픽이 허용됩니다. DB 보안 그룹 규칙은 인바운드 트래픽에만 적용되며, 아웃바운드 트래픽은 현재 DB 인스턴스에서 허용되지 않습니다.

DB 보안 그룹을 생성할 때 대상 포트 번호를 지정하지 않아도 됩니다. DB 보안 그룹에 대해 정의된 모든 규칙에서 DB 인스턴스에 대해 정의된 포트 번호가 대상 포트 번호로 사용됩니다. DB 보안 그룹은 AWS Management Console의 Amazon RDS API 또는 Amazon RDS 페이지를 사용하여 생성할 수 있습니다.

DB 보안 그룹으로 작업하는 방법에 대한 자세한 내용은 DB 보안 그룹 작업(EC2-Classic 플랫폼) 단원을 참조하십시오.

VPC 보안 그룹

각 VPC 보안 그룹 규칙을 설정하면 특정 소스가 해당 VPC 보안 그룹과 연결되어 있는 VPC의 DB 인스턴스에 액세스할 수 있습니다. 소스는 주소 범위(예: 203.0.113.0/24) 또는 다른 VPC 보안 그룹일 수 있습니다. VPC 보안 그룹을 소스로 지정하면 소스 VPC 보안 그룹을 사용하는 모든 인스턴스(일반적으로 애플리케이션 서버)에서 수신 트래픽이 허용됩니다. VPC 보안 그룹에 인바운드와 아웃바운드 트래픽을 모두 제어하는 규칙이 있을 수 있지만, 아웃바운드 트래픽 규칙은 DB 인스턴스에 적용되지 않습니다. VPC 보안 그룹을 생성하려면 VPC 콘솔에서 Amazon EC2 API 또는 [Security Group] 옵션을 사용해야 합니다.

VPC의 인스턴스에 대한 액세스를 허용하는 VPC 보안 그룹과 관련된 규칙을 생성할 때 그 규칙이 액세스를 허용하는 주소들의 각 범위에 대해 포트를 지정해야 합니다. 예를 들어, VPC의 인스턴스에 대한 SSH 액세스를 활성화하고 싶다면 지정된 주소 범위와 관련해 TCP 포트 22에 대한 액세스를 허용하는 규칙을 생성해야 합니다.

VPC의 서로 다른 인스턴스에게 서로 다른 포트에 대한 액세스를 허용하는 여러 개의 VPC 보안 그룹을 구성할 수 있습니다. 예를 들어, VPC의 웹 서버와 관련해 TCP 포트 80에 대한 액세스를 허용하는 VPC 보안 그룹을 생성하고, VPC의 RDS MySQL DB 인스턴스와 관련해 TCP 포트 3306에 대한 액세스를 허용하는 또 다른 VPC 보안 그룹을 생성할 수 있습니다.

VPC 보안 그룹에 관한 자세한 정보는 Amazon Virtual Private Cloud 사용 설명서보안 그룹을 참조하십시오.

DB 보안 그룹과 VPC 보안 그룹 비교

다음 표는 DB 보안 그룹과 VPC 보안 그룹의 주된 차이를 보여 줍니다.

DB 보안 그룹 VPC 보안 그룹
VPC 외부의 DB 인스턴스에 대한 액세스를 제어합니다. VPC에 있는 DB 인스턴스에 대한 액세스를 제어합니다.
AWS Management Console의 Amazon RDS APIs 또는 Amazon RDS 페이지를 사용하여 그룹/규칙을 생성하고 관리합니다. AWS Management Console의 Amazon EC2 APIs 또는 Amazon VPC 페이지를 사용하여 그룹/규칙을 생성하고 관리합니다.
그룹에 규칙을 추가하면 포트 번호나 프로토콜을 지정하지 않아도 됩니다. 그룹에 규칙을 추가하면 프로토콜을 TCP로 지정해야 하며, 그룹에 구성원으로 추가하려는 DB 인스턴스(또는 옵션)를 생성하는 데 사용한 포트 번호와 동일한 포트 번호를 지정해야 합니다.
그룹이 AWS 계정 또는 기타 계정의 EC2 보안 그룹에서 액세스를 허용합니다. 그룹이 VPC에 있는 다른 VPC 보안 그룹에서만 액세스를 허용합니다.

보안 그룹 시나리오

VPC에서 RDS 인스턴스를 사용하는 일반적인 사례는 동일한 VPC의 EC2 인스턴스에서 실행 중이며 VPC 외부의 클라이언트 애플리케이션에서 액세스한 애플리케이션을 사용하여 데이터를 공유하는 것입니다. 이 시나리오에서는 다음을 수행하여 필요한 인스턴스와 보안 그룹을 생성합니다. AWS 콘솔의 RDS 및 VPC 또는 RDS 및 EC2 API를 사용할 수 있습니다.

  1. VPC 보안 그룹(예: "sg-appsrv1")을 생성하고 클라이언트 애플리케이션의 IP 주소를 소스로 사용하는 인바운드 규칙을 생성합니다. 이 보안 그룹에서는 클라이언트 애플리케이션이 이 보안 그룹을 사용하는 VPC의 EC2 인스턴스에 연결할 수 있습니다.

  2. 애플리케이션에 대한 EC2 인스턴스를 생성하고 이전 단계에서 생성한 VPC 보안 그룹("sg-appsrv1")에 EC2 인스턴스를 추가합니다. VPC의 EC2 인스턴스는 DB 인스턴스와 VPC 보안 그룹을 공유합니다.

  3. 두 번째 VPC 보안 그룹(예: "sg-dbsrv1")을 생성하고 1단계에서 만든 VPC 보안 그룹("sg-appsrv1")을 소스로 지정해 새 규칙을 생성합니다.

  4. 새 DB 인스턴스를 생성하고 이전 단계에서 생성한 VPC 보안 그룹("sg-dbsrv1")에 DB 인스턴스를 추가합니다. 인스턴스를 생성할 때 3단계에서 생성한 VPC 보안 그룹("sg-dbsrv1") 규칙에 대해 지정한 것과 동일한 보안 포트 번호를 사용하십시오.

다음 다이어그램은 이 시나리오를 보여 줍니다.

 VPC 및 EC2 보안 그룹 시나리오

DB 보안 그룹 작업에 대한 자세한 내용은 DB 보안 그룹 작업(EC2-Classic 플랫폼)을(를) 참조하십시오.

DB VPC 보안 그룹 삭제

DB VPC 보안 그룹은 보안 정보를 VPC 보안 그룹과 동기화하는 RDS 메커니즘입니다. 그러나 이제 RDS가 VPC 보안 그룹 정보를 직접 사용하도록 업데이트되었으므로 이 동기화는 더 이상 필요하지 않습니다.

현재 사용 중인 DB VPC 보안 그룹을 삭제하는 것이 좋습니다. DB VPC 보안 그룹을 삭제하지 않을 경우, RDS DB 인스턴스와 관련된 예상치 못한 동작으로 인해 DB 인스턴스 액세스가 끊어지는 심각한 상황까지 발생할 수 있습니다. 이러한 예상치 못한 동작은 옵션 그룹, DB 인스턴스 업데이트 등의 작업 결과 RDS에서 DB VPC 보안 그룹을 VPC 보안 그룹과 다시 동기화하기 때문에 발생합니다. 이러한 재동기화로 인해 보안 정보를 잘못되고 오래된 보안 정보로 덮어쓰게 되고, RDS DB 인스턴스 액세스에 심각한 영향을 줄 수 있습니다.

DB VPC 보안 그룹이 있는지 확인하는 방법은 무엇입니까?

DB VPC 보안 그룹은 더 이상 사용되지 않기 때문에 RDS 콘솔에 표시되지 않습니다. 그러나 describe-db-security-groups AWS CLI 명령 또는 DescribeDBSecurityGroups API 작업을 호출하여 VPC DB 보안 그룹이 있는지를 확인할 수 있습니다.

JSON을 출력 형식으로 지정하여 describe-db-security-groups AWS CLI 명령을 호출할 경우 다음 예제에 표시된 것처럼 보안 그룹에 대한 두 번째 출력 줄에서 VPC 식별자로 DB VPC 보안 그룹을 식별할 수 있습니다.

Copy
{ "DBSecurityGroups": [ { "VpcId": "vpc-abcd1234", "DBSecurityGroupDescription": "default:vpc-abcd1234", "IPRanges": [ { "Status": "authorized", "CIDRIP": "xxx.xxx.xxx.xxx/n" }, { "Status": "authorized", "CIDRIP": "xxx.xxx.xxx.xxx/n " } ], "OwnerId": "123456789012", "EC2SecurityGroups": [], "DBSecurityGroupName": "default:vpc-abcd1234" } ] }

DescribeDBSecurityGroups API 작업을 실행할 경우 다음 예제와 같이 <VpcId> 응답 요소를 사용하여 DB VPC 보안 그룹을 식별할 수 있습니다.

Copy
<DBSecurityGroup> <EC2SecurityGroups/> <DBSecurityGroupDescription>default:vpc-abcd1234</DBSecurityGroupDescription> <IPRanges> <IPRange> <CIDRIP>xxx.xxx.xxx.xxx/n</CIDRIP> <Status>authorized</Status> </IPRange> <IPRange> <CIDRIP>xxx.xxx.xxx.xxx/n</CIDRIP> <Status>authorized</Status> </IPRange> </IPRanges> <VpcId>vpc-abcd1234</VpcId> <OwnerId>123456789012</OwnerId> <DBSecurityGroupName>default:vpc-abcd1234</DBSecurityGroupName> </DBSecurityGroup>

DB VPC 보안 그룹을 어떻게 삭제합니까?

DB VPC 보안 그룹은 RDS 콘솔에 표시되지 않으므로 delete-db-security-group AWS CLI 명령 또는 DeleteDBSecurityGroup API 작업을 호출하여 VPC DB 보안 그룹을 삭제해야 합니다.

DB VPC 보안 그룹을 삭제한 후에도 VPC의 DB 인스턴스는 해당 VPC의 VPC 보안 그룹에 의해 계속해서 보호됩니다. 삭제된 DB VPC 보안 그룹은 VPC 보안 그룹 정보의 복사본에 불과합니다.

AWS CloudFormation 템플릿 검토

AWS CloudFormation 템플릿의 이전 버전에 DB VPC 보안 그룹을 만들라는 지침이 포함되어 있을 수 있습니다. DB VPC 보안 그룹은 아직 완전히 폐기되지 않았으므로 계속해서 만들어질 수 있습니다. 또한 DB 인스턴스에 보안 설정을 프로비저닝하는 데 사용하는 AWS CloudFormation 템플릿에서도 DB VPC 보안 그룹을 만들지 않도록 하십시오. 다음 예제에 표시된 것처럼 EC2VpcId를 가진 RDS DBSecurityGroup을 만드는 AWS CloudFormation 템플릿을 사용하지 마십시오.

Copy
"DbSecurityByEC2SecurityGroup" : { Type" : "AWS::RDS::DBSecurityGroup", "Properties" : { "GroupDescription" : "Ingress for Amazon EC2 security group", "EC2VpcId" : { "MyVPC" }, "DBSecurityGroupIngress" : [ { "EC2SecurityGroupId" : "sg-b0ff1111", "EC2SecurityGroupOwnerId" : "111122223333" }, { "EC2SecurityGroupId" : "sg-ffd722222", "EC2SecurityGroupOwnerId" : "111122223333" } ] } }

대신 다음 예제와 같이 VPC 보안 그룹을 사용하여 VPC의 RDS DB 인스턴스에 대한 보안 정보를 추가하십시오.

Copy
"DBInstance" : { "Type": "AWS::RDS::DBInstance", "Properties": { "DBName" : { "Ref" : "DBName" }, "Engine" : "MySQL", "MultiAZ" : { "Ref": "MultiAZDatabase" }, "MasterUsername" : { "Ref" : "<master_username>" }, "DBInstanceClass" : { "Ref" : "DBClass" }, "AllocatedStorage" : { "Ref" : "DBAllocatedStorage" }, "MasterUserPassword": { "Ref" : "<master_password>" }, "VPCSecurityGroups" : [ { "Fn::GetAtt": [ "VPCSecurityGroup", "GroupId" ] } ] }