Control de acceso con grupos de seguridad - Amazon Relational Database Service

Control de acceso con grupos de seguridad

Los grupos de seguridad controlan el acceso del tráfico entrante y saliente a una instancia de base de datos. En Amazon RDS se utilizan tres tipos de grupos de seguridad: grupos de seguridad de la VPC, grupos de seguridad de base de datos y grupos de seguridad de EC2-Classic En pocas palabras, estos funcionan de la manera siguiente:

  • Un grupo de seguridad de VPC controla el acceso a instancias de base de datos e instancias EC2 dentro de una VPC.

  • Un grupo de seguridad de base de datos controla el acceso a instancias de base de datos EC2-Classic que no están en una VPC.

  • Un grupo de seguridad de EC2-Classic controla el acceso a una instancia EC2. Para obtener más información acerca de los grupos de seguridad de EC2-Classic, consulte EC2-Classic en la documentación de Amazon EC2.

De forma predeterminada, el acceso a la red está desactivado para una instancia de base de datos. Puede especificar reglas en un grupo de seguridad que permitan el acceso desde un rango de direcciones IP, un puerto o un grupo de seguridad. Cuando se configuran las reglas de entrada, se aplican las mismas reglas a todas las instancias de base de datos que están asociadas a ese grupo de seguridad. Puede especificar hasta 20 reglas en un grupo de seguridad.

Grupos de seguridad de la VPC

Cada regla de grupo de seguridad de VPC permite a un origen específico obtener acceso a una instancia de base de datos de una VPC asociada a ese grupo de seguridad de VPC. El origen puede ser un rango de direcciones (por ejemplo, 203.0.113.0/24), u otro grupo de seguridad de VPC. Cuando se especifica un grupo de seguridad de VPC como origen, se permite el tráfico entrante procedente de todas las instancias, normalmente servidores de aplicaciones, que utilizan el grupo de seguridad de VPC. Los grupos de seguridad de VPC pueden tener reglas que gobiernan el tráfico entrante y saliente, aunque las reglas de tráfico saliente normalmente no se aplican a las instancias de bases de datos. Las reglas de tráfico saliente solo se aplican si la instancia de base de datos actúa como cliente. Por ejemplo, las reglas de tráfico saliente se aplican a una base de datos Oracle con enlaces a la base de datos saliente. Debe utilizar la API de Amazon EC2 o la opción Security Group (Grupo de seguridad) de la consola de VPC para crear grupos de seguridad de VPC.

Cuando cree reglas para un grupo de seguridad de VPC que permitan el acceso a las instancias de una VPC, debe especificar un puerto para cada rango de direcciones a las que la regla permite el acceso. Por ejemplo, si desea habilitar el acceso SSH a las instancias de la VPC, puede crear una regla que permita el acceso al puerto TCP 22 para el rango de direcciones especificado.

Puede configurar varios grupos de seguridad de VPC que permitan el acceso a puertos distintos para las distintas instancias de la VPC. Por ejemplo, puede crear un grupo de seguridad de VPC que permita el acceso al puerto TCP 80 para los servidores web de la VPC. A continuación, puede crear otro grupo de seguridad de VPC que permita el acceso al puerto TCP 3306 para las instancias de base de datos MySQL de RDS de la VPC.

Para obtener más información sobre los grupos de seguridad de VPC, consulte Grupos de seguridad en la Guía del usuario de Amazon Virtual Private Cloud.

Grupos de seguridad de base de datos

Los grupos de seguridad de base de datos se utilizan con instancias de bases de datos que no están en una VPC y pertenecen a la plataforma EC2-Classic. Cada regla de grupo de seguridad de base de datos permite a un origen específico obtener acceso a una instancia de base de datos asociada a ese grupo de seguridad de base de datos. El origen puede ser un rango de direcciones (por ejemplo, 203.0.113.0/24), o un grupo de seguridad de EC2-Classic. Cuando se especifica un grupo de seguridad de EC2-Classic como origen, se permite el tráfico entrante procedente de todas las instancias EC2 que usan ese grupo de seguridad de EC2-Classic. Las reglas de grupo de seguridad de base de datos se aplican únicamente al tráfico entrante; actualmente no se permite el tráfico saliente para las instancias de base de datos.

No es necesario especificar un número de puerto de destino al crear reglas de grupo de seguridad de base de datos. El número de puerto definido para la instancia de base de datos se usa como número de puerto de destino para todas las reglas definidas para el grupo de seguridad de base de datos. Los grupos de seguridad de base de datos se pueden crear utilizando las operaciones de la API de Amazon RDS o la página de Amazon RDS de la Consola de administración de AWS.

Para obtener más información acerca de cómo trabajar con grupos de seguridad de base de datos, consulte Uso de grupos de seguridad de base de datos (plataforma EC2-Classic).

Grupos de seguridad de base de datos Grupos de seguridad de la VPC

En la siguiente tabla se muestran las principales diferencias entre los grupos de seguridad de base de datos y los grupos de seguridad de VPC.

Grupo de seguridad de base de datos Grupo de seguridad de VPC
Controla el acceso a las instancias de bases de datos situadas fuera de una VPC. Controla el acceso a las instancias de bases de datos situadas en una VPC.
Utiliza las operaciones de la API de Amazon RDS o la página de Amazon RDS de la Consola de administración de AWS para crear y administrar grupos y reglas. Utiliza las operaciones de la API de Amazon EC2 o la página de Amazon VPC de la Consola de administración de AWS para crear y administrar grupos y reglas.
Cuando se añade una regla a un grupo, no es necesario especificar el número de puerto o el protocolo. Cuando se añada una regla a un grupo, especifique el protocolo como TCP. Además, especifique el mismo número de puerto que se utilizó para crear las instancias de base de datos (u opciones) que se vayan a añadir como miembros al grupo.
Los grupos permiten el acceso desde los grupos de seguridad de EC2-Classic de la cuenta de AWS o de otras cuentas. Los grupos únicamente permiten el acceso desde otros grupos de seguridad de VPC de la VPC.

Escenario de grupos de seguridad

Un uso común de una instancia de base de datos en una VPC es compartir datos con un servidor de aplicaciones que se ejecuta en una instancia Amazon EC2 de la misma VPC, al que obtiene acceso desde una aplicación cliente situada fuera de la VPC. Para este escenario, se utilizan las páginas de RDS y VPC de la Consola de administración de AWS o las operaciones de la API de RDS y EC2 para crear las instancias y los grupos de seguridad necesarios:

  1. Cree un grupo de seguridad de VPC (por ejemplo, sg-appsrv1) y defina reglas de entrada que utilicen las direcciones IP de la aplicación cliente como origen. Este grupo de seguridad permite que la aplicación cliente se conecte a las instancias EC2 de una VPC que utilice este grupo de seguridad.

  2. Cree una instancia EC2 para la aplicación y añada la instancia EC2 al grupo de seguridad de VPC (sg-appsrv1) que creó en el paso anterior. La instancia EC2 de la VPC comparte el grupo de seguridad de VPC con la instancia de base de datos.

  3. Cree un segundo grupo de seguridad de VPC (por ejemplo, sg-dbsrv1) y cree una regla nueva especificando el grupo de seguridad de VPC que creó en el paso 1 (sg-appsrv1) como origen.

  4. Cree una instancia de base de datos y añada la instancia de base de datos al grupo de seguridad de VPC (sg-dbsrv1) que creó en el paso anterior. Cuando cree la instancia de base de datos, utilice el mismo número de puerto que especificó para la regla de grupo de seguridad de VPC (sg-dbsrv1) que creó en el paso 3.

En el siguiente diagrama se muestra este escenario.


                    Instancia de base de datos e instancia EC2 en una VPC

Para obtener más información acerca del uso de una VPC, consulte VPC Amazon Virtual Private Cloud y Amazon RDS.

Creación de un grupo de seguridad de VPC

Puede crear un grupo de seguridad de VPC para una instancia de base de datos mediante la consola de VPC. Para obtener información sobre la creación de un grupo de seguridad, consulte Proporcionar acceso a la instancia de base de datos en la VPC mediante la creación de un grupo de seguridad y Grupos de seguridad en la Guía del usuario de Amazon Virtual Private Cloud.

Asociación de un grupo de seguridad con una instancia de base de datos

Puede asociar un grupo de seguridad con una instancia de base de datos mediante la opción Modify (Modificar) de la consola de RDS, la API de Amazon RDS ModifyDBInstance o el comando modify-db-instance de AWS CLI.

Para obtener más información acerca de la modificación de una instancia de base de datos , consulte Modificación de una instancia de base de datos de Amazon RDS. Para consideraciones relativas al grupo de seguridad al restaurar una instancia de base de datos a partir de una instantánea de base de datos, consulte Consideraciones relativas al grupo de seguridad.

Eliminación de grupos de seguridad de base de datos de VPC

Los grupos de seguridad de base de datos de VPC son un mecanismo de RDS para sincronizar información de seguridad con un grupo de seguridad de VPC. Sin embargo, esta sincronización ya no es necesaria porque RDS se ha actualizado para utilizar directamente la información de los grupos de seguridad de VPC.

nota

Los grupos de seguridad de la VPC de base de datos están obsoletos y son diferentes de los grupos de seguridad de base de datos, de los grupos de seguridad de la VPC y de los grupos de seguridad de EC2-Classic.

Recomendamos que elimine todos los grupos de seguridad de base de datos de VPC que utilice actualmente. Si no elimina los grupos de seguridad de base de datos de VPC, puede que se produzcan comportamientos no deseados en las instancias de base de datos, que pueden ser tan graves como perder el acceso a una instancia de base de datos. Los comportamientos no deseados podrían ser el resultado de adoptar una acción, como una actualización en una instancia de base de datos, un grupo de opciones o algo similar. Dichas actualizaciones hacen que RDS vuelva a sincronizar el grupo de seguridad de base de datos de VPC con el grupo de seguridad de VPC. Esta resincronización puede hacer que la información de seguridad se sobrescriba con información de seguridad incorrecta y obsoleta. Este a su vez puede afectar gravemente a su acceso a las instancias de base de datos.

¿Cómo puedo determinar si tengo un grupo de seguridad de base de datos de VPC?

Debido a que los grupos de seguridad de base de datos de VPC han quedado obsoletos, no aparecen en la consola de RDS. Sin embargo, puede llamar al comando describe-db-security-groups de la AWS CLI o a la operación DescribeDBSecurityGroups de la API para determinar si tiene algún grupo de seguridad de base de datos de VPC.

En este caso, puede llamar al comando describe-db-security-groups de la AWS CLI y especificar JSON como formato de salida. Si lo hace, puede identificar los grupos de seguridad de base de datos de VPC mediante el identificador de VPC de la segunda línea de la salida del grupo de seguridad, como se muestra en el ejemplo siguiente.

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

Si ejecuta la operación de la API DescribeDBSecurityGroups, a continuación puede identificar los grupos de seguridad de VPC de base de datos mediante el elemento <VpcId> de la respuesta, como se muestra en el ejemplo siguiente.

<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>

¿Cómo se elimina un grupo de seguridad de base de datos de VPC?

Dado que los grupos de seguridad de base de datos de VPC no aparecen en la consola de RDS, debe llamar al comando delete-db-security-group de la AWS CLI o a la operación DeleteDBSecurityGroup de la API para eliminar un grupo de seguridad de base de datos de VPC.

Después de eliminar un grupo de seguridad de base de datos de VPC, las instancias de base de datos de la VPC siguen estando protegidas por el grupo de seguridad de VPC de esa VPC. El grupo de seguridad de base de datos de VPC que se eliminó era simplemente una copia de la información del grupo de seguridad de VPC.

Revise sus plantillas de AWS CloudFormation

Las versiones anteriores de las plantillas de AWS CloudFormation pueden contener instrucciones para crear un grupo de seguridad de base de datos de VPC. Debido a que los grupos de seguridad de base de datos de VPC no están totalmente obsoletos, todavía es posible crearlos. Asegúrese de que ninguna de las plantillas de AWS CloudFormation que utilice para aprovisionar una instancia de base de datos con configuraciones de seguridad cree también un grupo de seguridad de base de datos de VPC. No utilice plantillas de AWS CloudFormation que creen un DBSecurityGroup de RDS con una EC2VpcId, como se muestra en el siguiente ejemplo.

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

En su lugar, añada la información de seguridad de las instancias de bases de datos en una VPC utilizando grupos de seguridad de VPC, como se muestra en el siguiente ejemplo.

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