Administración de acceso para colas cifradas de Amazon SQS con políticas de privilegio mínimo - Amazon Simple Queue Service

Administración de acceso para colas cifradas de Amazon SQS con políticas de privilegio mínimo

Puede utilizar Amazon SQS para intercambiar datos confidenciales entre aplicaciones mediante el cifrado del servidor (SSE) integrado con AWS Key Management Service (KMS). Con la integración de Amazon SQS y AWS KMS, puede administrar de forma centralizada las claves que protegen Amazon SQS, así como las claves que protegen sus demás recursos de AWS.

Múltiples servicios de AWS pueden actuar como orígenes de eventos que envían eventos a Amazon SQS. Para que un origen de eventos pueda acceder a la cola cifrada de Amazon SQS, debe configurar la cola con una clave de AWS KMS administrada por el cliente. A continuación, utilice la política de claves para permitir que el servicio utilice los métodos de la API AWS KMS necesarios. El servicio también requiere permisos de autenticación de acceso para que la cola pueda enviar eventos. Puede conseguirlo mediante una política de Amazon SQS, que es una política basada en recursos que puede utilizar para controlar el acceso a la cola de Amazon SQS y a sus datos.

En las secciones siguientes se proporciona información sobre cómo controlar el acceso a la cola de Amazon SQS cifrada a través de la política de Amazon SQS y la política de claves de AWS KMS. Las políticas de esta guía le ayudarán a conseguir el privilegio mínimo.

En esta guía también se describe cómo las políticas basadas en recursos abordan el problema del suplente confuso mediante la utilización de las claves de contexto de condición de IAM globales aws:SourceArn, aws:SourceAccount y aws:PrincipalOrgID.

Descripción general

En este tema, le guiaremos a través de un caso de uso común para ilustrar cómo puede crear la política de claves y la política de colas de Amazon SQS. Este caso de uso se muestra en la siguiente imagen.

Publicación de mensajes de Amazon SNS en Amazon SQS.

En este ejemplo, el productor de mensajes es un tema de Amazon Simple Notification Service (SNS) que está configurado para la distribución ramificada de mensajes a su cola cifrada de Amazon SQS. El consumidor de mensajes es un servicio de computación, como una función de AWS Lambda, una instancia de Amazon Elastic Compute Cloud (EC2) o un contenedor de AWS Fargate. A continuación, la cola de Amazon SQS se configura para enviar los mensajes fallidos a una cola de mensajes fallidos (DLQ). Esto es útil para depurar su aplicación o sistema de mensajería porque las DLQ le permiten aislar los mensajes no consumidos para determinar por qué su procesamiento no se realizó correctamente. En la solución definida en este tema, se utiliza un servicio de computación como una función de Lambda para procesar los mensajes almacenados en la cola de Amazon SQS. Si el consumidor de mensajes se encuentra en una nube privada virtual (VPC), la instrucción de política DenyReceivingIfNotThroughVPCE incluida en esta guía le permite restringir la recepción de mensajes a esa VPC específica.

nota

Esta guía contiene solo los permisos de IAM necesarios en forma de instrucciones de política. Para construir la política, debe agregar las instrucciones a la política de Amazon SQS o a la política de claves de AWS KMS. En esta guía no se proporcionan instrucciones sobre cómo crear la cola de Amazon SQS o la clave de AWS KMS. Para obtener instrucciones sobre cómo crear estos recursos, consulte Creación de una cola de Amazon SQS y Creación de claves.

La política de Amazon SQS definida en esta guía no admite el redireccionamiento de mensajes directamente a la misma cola de Amazon SQS o a una cola diferente.

Política de claves de privilegio mínimo para Amazon SQS

En esta sección describimos los permisos de privilegio mínimo necesarios para la clave administrada de AWS KMS por el cliente que se utiliza para cifrar la cola de Amazon SQS. Con estos permisos, puede limitar el acceso solo a las entidades previstas a la vez que implementa el privilegio mínimo. La política de claves debe constar de las siguientes instrucciones de política, que describimos detalladamente a continuación:

Concesión de permisos de administrador a la clave de AWS KMS

Para crear una clave de AWS KMS, debe proporcionar permisos de administrador de AWS KMS al rol de IAM que utilice para implementar la clave de AWS KMS. Estos permisos de administrador se definen en la siguiente instrucción de política de AllowKeyAdminPermissions. Cuando agregue esta instrucción a su política de claves de AWS KMS, asegúrese de reemplazar el <ARN de rol de administrador> por el nombre de recurso de Amazon (ARN) del rol de IAM utilizado para implementar la clave de AWS KMS, administrar la clave de AWS KMS o ambas cosas. Puede ser el rol de IAM de su canalización de implementación o el rol de administrador de su organización en AWS Organizations.

{ "Sid": "AllowKeyAdminPermissions", "Effect": "Allow", "Principal": { "AWS": [ "<admin-role ARN>" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }
nota

En una política de claves de AWS KMS, el valor del elemento Resource debe ser *, lo que significa “esta clave de AWS KMS”. El asterisco (*) identifica la clave de AWS KMS a la que se adjunta la política de claves.

Concesión de acceso de solo lectura a los metadatos de clave

Para conceder a otros roles de IAM acceso de solo lectura a los metadatos de clave, agregue la instrucción AllowReadAccessToKeyMetaData a su política de claves. Por ejemplo, la siguiente instrucción le permite enumerar todas las claves de AWS KMS de su cuenta con fines de auditoría. Esta instrucción concede al usuario raíz de AWS acceso de solo lectura a los metadatos de clave. Por lo tanto, cualquier entidad principal de IAM en la cuenta puede tener acceso a los metadatos de clave cuando sus políticas basadas en identidad tengan los permisos enumerados en la siguiente instrucción: kms:Describe*, kms:Get* y kms:List*. Asegúrese de reemplazar <ID de cuenta> por su propia información.

{ "Sid": "AllowReadAcesssToKeyMetaData", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<accountID>:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" }

Concesión de permisos de KMS de Amazon SNS a Amazon SNS para publicar mensajes en la cola

Para permitir que su tema de Amazon SNS publique mensajes en su cola cifrada de Amazon SQS, agregue la instrucción de política AllowSNSToSendToSQS a su política de claves. Esta instrucción concede a Amazon SNS permisos para utilizar la clave de AWS KMS a fin de publicar en su cola de Amazon SQS. Asegúrese de reemplazar <ID de cuenta> por su propia información.

nota

La Condition en la instrucción limita el acceso solo al servicio Amazon SNS en la misma cuenta de AWS.

{ "Sid": "AllowSNSToSendToSQS", "Effect": "Allow", "Principal": { "Service": [ "sns.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "<account-id>" } } }

Permiso a los consumidores para descifrar mensajes de la cola

La siguiente instrucción AllowConsumersToReceiveFromTheQueue concede al consumidor de mensajes de Amazon SQS los permisos necesarios para descifrar los mensajes recibidos de la cola de Amazon SQS cifrada. Cuando adjunte la instrucción de política, reemplace <ARN del rol de tiempo de ejecución del consumidor> por el ARN del rol tiempo de ejecución de IAM del consumidor de mensajes.

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": [ "<consumer's execution role ARN>" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }

Política de Amazon SQS de privilegio mínimo

Esta sección le guía a través de las políticas de colas de Amazon SQS de privilegio mínimo para el caso de uso que se trata en esta guía (por ejemplo, de Amazon SNS a Amazon SQS). La política definida está diseñada para evitar el acceso no intencionado mediante la utilización de una combinación de las instrucciones Deny y Allow. Las instrucciones Allow conceden acceso a la entidad o entidades previstas. Las instrucciones Deny impiden que otras entidades no previstas accedan a la cola de Amazon SQS, al mismo tiempo que excluyen a la entidad prevista en la condición de política.

La política de Amazon SQS incluye las siguientes instrucciones, que describimos detalladamente a continuación:

Restricción de los permisos de administración de Amazon SQS

La siguiente instrucción de política RestrictAdminQueueActions restringe los permisos de administración de Amazon SQS solo al rol o a los roles de IAM que utilice para implementar la cola, administrarla o ambas cosas. Asegúrese de reemplazar los <valores de marcador de posición> por su propia información. Especifique el ARN del rol de IAM utilizado para implementar la cola de Amazon SQS, así como los ARN de cualquier rol de administrador que deba tener permisos de administración de Amazon SQS.

{ "Sid": "RestrictAdminQueueActions", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes" ], "Resource": "<SQS Queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": [ "arn:aws:iam::<account-id>:role/<deployment-role-name>", "<admin-role ARN>" ] } } }

Restricción de las acciones de la cola de Amazon SQS de la organización especificada

Como ayuda para proteger sus recursos de Amazon SQS del acceso externo (acceso por parte de una entidad ajena a su organización de AWS), utilice la siguiente instrucción. Esta instrucción limita el acceso a la cola de Amazon SQS a la organización que especifique en la Condition. Asegúrese de reemplazar <ARN de cola de SQS> por el ARN del rol de IAM utilizado para implementar la cola de Amazon SQS e <ID de organización> por el ID de su organización.

{ "Sid": "DenyQueueActionsOutsideOrg", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:ChangeMessageVisibility", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:PrincipalOrgID": [ "<org-id>" ] } } }

Concesión de permisos de Amazon SQS a los consumidores

Para recibir mensajes de la cola de Amazon SQS, debe proporcionar al consumidor de mensajes los permisos necesarios. La siguiente instrucción de política concede al consumidor que especifique los permisos necesarios para consumir mensajes de la cola de Amazon SQS. Al agregar la instrucción a su política de Amazon SQS, asegúrese de reemplazar <ARN del rol de IAM en tiempo de ejecución del consumidor> por el ARN del rol de IAM en tiempo de ejecución utilizado por el consumidor y <ARN de cola de SQS> por el ARN del rol de IAM utilizado para implementar la cola de Amazon SQS.

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": "<consumer's IAM execution role ARN>" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>" }

Para impedir que otras entidades reciban mensajes de la cola de Amazon SQS, agregue la instrucción DenyOtherConsumersFromReceiving a la política de la cola de Amazon SQS. Esta instrucción restringe el consumo de mensajes al consumidor que usted especifique y no permite que otros consumidores tengan acceso, aunque sus permisos de identidad se lo concedan. Asegúrese de reemplazar <ARN de cola de SQS> y <ARN de rol de tiempo de ejecución del consumidor> por su propia información.

{ "Sid": "DenyOtherConsumersFromReceiving", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": "<consumer's execution role ARN>" } } }

Aplicación del cifrado de los datos en tránsito

La siguiente instrucción de política DenyUnsecureTransport obliga a los consumidores y productores a utilizar canales seguros (conexiones TLS) para enviar y recibir mensajes de la cola de Amazon SQS. Asegúrese de reemplazar <ARN de cola de SQS> por el ARN del rol de IAM utilizado para implementar la cola de Amazon SQS.

{ "Sid": "DenyUnsecureTransport", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "Bool": { "aws:SecureTransport": "false" } } }

Restricción de la transmisión de mensajes a un tema específico de Amazon SNS

La siguiente instrucción de política AllowSNSToSendToTheQueue permite que el tema de Amazon SNS especificado envíe mensajes a la cola de Amazon SQS. Asegúrese de reemplazar <ARN de cola de SQS> por el ARN del rol de IAM utilizado para implementar la cola de Amazon SQS y <ARN de tema de SNS> por el ARN de tema de Amazon SNS.

{ "Sid": "AllowSNSToSendToTheQueue", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

La siguiente instrucción de política DenyAllProducersExceptSNSFromSending impide que otros productores envíen mensajes a la cola. Reemplace <ARN de cola de SQS> y <ARN de tema de SNS> por su propia información.

{ "Sid": "DenyAllProducersExceptSNSFromSending", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

(Opcional) Restricción de la recepción de mensajes a un punto de conexión de VPC específico

Para restringir la recepción de mensajes a solo un punto de conexión de VPC específico, agregue la siguiente instrucción de política a su política de colas de Amazon SQS. Esta instrucción impide que un consumidor de mensajes reciba mensajes de la cola a menos que los mensajes procedan del punto de conexión de VPC deseado. Reemplace <ARN de cola de SQS> por el ARN del rol de IAM utilizado para implementar la cola de Amazon SQS y <vpce_id> por el ID del punto de conexión de VPC.

{ "Sid": "DenyReceivingIfNotThroughVPCE", "Effect": "Deny", "Principal": "*", "Action": [ "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:sourceVpce": "<vpce id>" } } }

Instrucciones de política de Amazon SQS para la cola de mensajes fallidos

Agregue las siguientes instrucciones de política, identificadas por su ID de instrucción, a su política de acceso de DLQ:

  • RestrictAdminQueueActions

  • DenyQueueActionsOutsideOrg

  • AllowConsumersToReceiveFromTheQueue

  • DenyOtherConsumersFromReceiving

  • DenyUnsecureTransport

Además de agregar las instrucciones de política anteriores a su política de acceso de DLQ, también debe agregar una instrucción para restringir la transmisión de mensajes a las colas de Amazon SQS, como se describe en la sección siguiente.

Restricción de la transmisión de mensajes a las colas de Amazon SQS

Para restringir el acceso solo a las colas de Amazon SQS de la misma cuenta, agregue la siguiente instrucción de política DenyAnyProducersExceptSQS a la política de colas de DLQ. Esta instrucción no limita la transmisión de mensajes a una cola específica porque necesita implementar la DLQ antes de crear la cola principal, por lo que no conocerá el ARN de Amazon SQS cuando cree la DLQ. Si necesita limitar el acceso solo a una cola de Amazon SQS, modifique aws:SourceArn en la Condition con el ARN de su cola de origen de Amazon SQS cuando lo conozca.

{ "Sid": "DenyAnyProducersExceptSQS", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS DLQ ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "arn:aws:sqs:<region>:<account-id>:*" } } }
importante

Las políticas de colas de Amazon SQS definidas en esta guía no restringen la acción sqs:PurgeQueue a un rol o roles de IAM determinados. La acción sqs:PurgeQueue le permite eliminar todos los mensajes de la cola de Amazon SQS. También puede utilizar esta acción para realizar cambios en el formato de los mensajes sin reemplazar la cola de Amazon SQS. Al depurar una aplicación, puede borrar la cola de Amazon SQS para eliminar mensajes potencialmente erróneos. Cuando pruebe la aplicación, puede dirigir un elevado volumen de mensajes a través de la cola de Amazon SQS y, a continuación, purgarla para empezar de cero antes de pasar a producción. La razón de no restringir esta acción a un rol determinado se debe a que es posible que este rol no se conozca al implementar la cola de Amazon SQS. Deberá agregar este permiso a la política basada en identidades del rol para poder purgar la cola.

Prevención del problema del suplente confuso entre servicios

El problema del suplente confuso es una cuestión de seguridad en la que una entidad que no tiene permiso para realizar una acción puede obligar a una entidad con más privilegios a realizar la acción. Para evitarlo, AWS proporciona herramientas que lo ayudan a proteger su cuenta si proporciona acceso a terceros (conocido como entre cuentas) u otros servicios de AWS (conocido como entre servicios) a los recursos de su cuenta. Las instrucciones de política de esta sección pueden ayudarlo a prevenir el problema del suplente confuso entre servicios.

La suplantación entre servicios puedes producirse cuando un servicio (el servicio que lleva a cabo las llamadas) llama a otro servicio (el servicio al que se llama). El servicio que lleva a cabo las llamadas se puede manipular para utilizar sus permisos a fin de actuar en función de los recursos de otro cliente de una manera en la que no debe tener permiso para acceder. Como ayuda para protegerse contra este problema, las políticas basadas en recursos definidas en esta publicación utilizan las claves de contexto de condición de IAM globales aws:SourceArn, aws:SourceAccount y aws:PrincipalOrgID. Esto limita los permisos que un servicio tiene para un recurso específico, una cuenta específica o una organización específica en AWS Organizations.

Uso de Analizador de acceso de IAM para revisar el acceso entre cuentas

Puede utilizar Analizador de acceso de AWS IAM para revisar sus políticas de colas de Amazon SQS y políticas de claves de AWS KMS y alertarlo cuando una cola de Amazon SQS o una clave de AWS KMS conceda acceso a una entidad externa. Analizador de acceso de IAM le ayuda a identificar los recursos de su organización y sus cuentas que se comparten con una entidad externa. Esta zona de confianza puede ser una cuenta de AWS o la organización en AWS Organizations que especifique al activar Analizador de acceso de IAM.

El Analizador de acceso de IAM identifica los recursos compartidos con entidades principales externas mediante el uso de un razonamiento lógico para analizar las políticas basadas en recursos en su entorno de AWS. Para cada instancia de un recurso compartido fuera de su zona de confianza, Analizador de acceso genera un resultado. Los resultados incluyen información sobre el acceso y la entidad principal externa a la que se le concede. Revise los resultados para determinar si el acceso es intencionado y seguro, o si el acceso es no intencionado y supone un riesgo para la seguridad. En caso de accesos no intencionados, revise la política afectada y corríjala. Consulte esta entrada de blog para obtener más información sobre cómo Analizador de acceso de AWS IAM identifica el acceso no intencionado a sus recursos de AWS.

Para obtener más información sobre el Analizador de acceso de AWS IAM, consulte la documentación del Analizador de acceso de AWS IAM.