メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

Amazon RDS セキュリティグループ

セキュリティグループにより DB インスタンスに対する送受信トラフィックへのアクセスを制御します。Amazon RDS では、DB セキュリティグループ、VPC セキュリティグループ、EC2 セキュリティグループという 3 種類のセキュリティグループを使用します。簡単に説明すると、DB セキュリティグループは VPC の外にある EC2-Classic DB インスタンスへのアクセスを制御します。VPC セキュリティグループは VPC 内の DB インスタンスおよび EC2 インスタンスへのアクセスを制御します。EC2 セキュリティグループは EC2 インスタンスへのアクセスを制御します。

デフォルトでは、ネットワークアクセスは DB インスタンスに対してオフになっています。セキュリティグループで IP アドレス範囲、ポート、または EC2 セキュリティグループからのアクセスを許可するルールを指定できます。Ingress ルールを設定すると、そのセキュリティグループに関連付けられているすべての DB インスタンスに、同じルールが適用されます。セキュリティグループでは最大 20 のルールを指定できます。

DB Security Groups

DB セキュリティグループは、VPC の外にあり、EC2-Classic プラットフォーム上にある DB インスタンスに使用されます。DB セキュリティグループの各ルールにより、その DB セキュリティグループに関連付けられている DB インスタンスへのアクセスを特定のソースに許可できます。ソースとしては、アドレスの範囲 (203.0.113.0/24 など) または EC2 セキュリティグループを指定できます。ソースとして EC2 セキュリティグループを指定すると、EC2 セキュリティグループを使用するすべての EC2 インスタンスからの受信トラフィックを許可することになります。DB セキュリティグループのルールは受信トラフィックにのみ適用されます。DB インスタンスからの送信トラフィックは現在、許可されていません。

DB セキュリティグループルールを作成するときに送信先ポート番号を指定する必要はありません。DB インスタンスに定義したポート番号が、DB セキュリティグループに定義したすべてのルールの送信先ポート番号として使用されます。DB セキュリティグループは、Amazon RDS API または AWS マネジメントコンソールの Amazon RDS ページを使用して作成できます。

DB セキュリティグループの使用の詳細については、「DB セキュリティグループの操作 (EC2-Classic プラットフォーム)」を参照してください。

VPC セキュリティグループ 

VPC セキュリティグループの各ルールにより、その VPC セキュリティグループに関連付けられている VPC 内の DB インスタンスへのアクセスを特定のソースに許可できます。ソースとしては、アドレスの範囲 (203.0.113.0/24 など) または別の VPC セキュリティグループを指定できます。VPC セキュリティグループをソースとして指定すると、ソース VPC セキュリティグループを使用するすべてのインスタンス (通常はアプリケーションサーバー) からの受信トラフィックを許可することになります。VPC セキュリティグループのルールは受信と送信の両方のトラフィックに適用されます。ただし、送信トラフィックのルールは DB インスタンスには適用されません。VPC セキュリティグループを作成するには、「Amazon EC2 API」を使用するか、VPC コンソールの [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 ユーザーガイド』の「セキュリティグループ」を参照してください。

VPC セキュリティグループと DB セキュリティグループとの違い

以下の表に、DB セキュリティグループと VPC セキュリティグループとの主な違いを示します。

DB セキュリティグループ VPC セキュリティグループ
VPC の外にある DB インスタンスへのアクセスを制御する. VPC 内の DB インスタンスへのアクセスを制御する
AWS マネジメントコンソールの Amazon RDS API または Amazon RDS ページを使用してグループ/ルールを作成および管理します。 AWS マネジメントコンソール の Amazon EC2 API または Amazon VPC ページを使用してグループ/ルールを作成および管理します。
グループにルールを追加するときは、ポート番号やプロトコルを指定する必要はない グループにルールを追加するときは、プロトコルとして TCP を指定し、グループに関連付ける DB インスタンス (またはオプション) の作成に使用される同じポート番号を指定する必要がある
AWS アカウントまたはその他のアカウントの EC2 セキュリティグループからのアクセスを許可する VPC 内の別の VPC セキュリティグループからのみのアクセスを許可する

セキュリティグループのシナリオ

VPC 内の RDS インスタンスの一般的な用途は、同じ VPC 内の EC2 インスタンスで実行され、VPC の外にあるクライアントアプリケーションによってアクセスされるアプリケーションサーバーとデータを共有することです。このシナリオでは、以下の操作を実行して、必要なインスタンスとセキュリティグループを作成します。AWS Console の VPC ページを使用するか、RDS API または EC2 API を使用できます。

  1. VPC セキュリティグループ (「sg-appsrv1」など) を作成し、ソースとしてクライアントアプリケーションの IP アドレスを使用するという受信ルールを定義します。このセキュリティグループにより、クライアントアプリケーションは、このセキュリティグループを使用する VPC 内の EC2 インスタンスに接続できるようになります。

  2. アプリケーションの EC2 インスタンスを作成し、前の手順で作成した VPC セキュリティグループ (「sg-appsrv1」) に EC2 インスタンスを追加します。VPC 内の EC2 インスタンスは DB インスタンスと VPC セキュリティグループを共有します。

  3. 2 つ目の VPC セキュリティグループ (「sg-dbsrv1」など) を作成し、手順 1 で作成した VPC セキュリティグループ (「sg-appsrv1」) をソースとして新しいルールを作成します。

  4. 新しい DB インスタンスを作成し、前の手順で作成した VPC セキュリティグループ (「sg-dbsrv1」) に追加します。インスタンスを作成するとき、手順 3 で作成した VPC セキュリティグループ (「sg-dbsrv1」) のルールに指定した同じポート番号を使用します。

以下の図に、このシナリオを示しています。

 VPC と EC2 のセキュリティグループのシナリオ

DB セキュリティグループの使用の詳細については、「DB セキュリティグループの操作 (EC2-Classic プラットフォーム)」を参照してください。

DB VPC セキュリティグループの削除

DB VPC セキュリティグループは、セキュリティ情報を VPC セキュリティグループと同期するための、RDS のメカニズムです。しかし、VPC セキュリティグループ情報を直接使用するように RDS が更新されたので、この同期は必要なくなりました。

現在使用している DB VPC セキュリティグループは削除することを強くお勧めします。DB VPC セキュリティグループを削除しないと、DB インスタンスへのアクセスが失われるなど、RDS 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 コマンドを呼び出すと、次の例に示すように、セキュリティグループの出力の 2 行目に示された 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 コンソールに表示されないため、DB VPC セキュリティグループを削除するには delete-db-security-group AWS CLI コマンドまたは DeleteDBSecurityGroup API アクションを呼び出す必要があります。

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" ] } ] }