
Estoy trabajando en un proyecto con otra persona, llámalo Bob.
Me gustaría ejecutar un software propietario en una instancia de Amazon EC2. Este software enviará paquetes de red (solicitudes HTTP) a un servidor externo.
No quiero que Bob pueda hacerse con este software. Sin embargo, quiero que Bob pueda impedirme enviar paquetes de red de tal manera que nunca pueda evitar que lo haga en el futuro.
No estoy seguro de cómo. Tal vez dándole a Bob de alguna manera el poder de terminar la instancia, tal vez dándole de alguna manera la capacidad de detener la salida de los paquetes, no lo sé.
Me encantaría escuchar ideas sobre cómo se puede lograr esto con una latencia adicional mínima (enrutar mis paquetes a través de una instancia EC2 separada que posee Bob sería demasiado lento, por ejemplo). ¡Gracias!
Respuesta1
Cree a Bob como usuario de IAM con una política adjunta que solo le otorga derechos muy limitados, lo suficiente para ver instancias e iniciar/detener esa instancia, no terminarla. Es probable que el núcleo de la política sea algo como esto, pero deberá probarlo o modificarlo.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:Describe*"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:::instance/i-012345"
}
]
}
Es probable que Bob necesite más permisos, pero los descubrirá cuando pruebe esto. Probablemente pondría a Bob en un grupo y asignaría los permisos a un grupo, en lugar de hacerlo directamente al usuario.
Respuesta2
Mientras seas el propietario de la cuenta, controlas lo que Bob puede o no puede hacer, pero sólo puedes restringirte voluntariamente. Si Bob es el propietario de la cuenta, no puedes impedirle que haga lo que quiera. En su caso, desea imponer restricciones a ambos. Una forma de resolver esto es tener un tercero de confianza en la cuenta y establecer permisos para ambos.
Respuesta3
Aquí tienes otra idea:
Escriba su software de tal manera que requiera una "clave de licencia" para funcionar. El software puede estar cifrado o tener alguna otra característica similar, de modo que no pueda ejecutarse a menos que la clave esté disponible. La clave se almacenará en un servidor que usted controle.
Bob tiene un servidor que controla, pero el software que contiene necesita su clave para ejecutarse. Bob puede cerrar el servidor como quiera, pero no puede robar su software sin su clave, que usted controla.
Las claves de software no son infalibles: es posible aplicar ingeniería inversa a su software. pero debería poder hacer que hacerlo requiera demasiado tiempo o sea costoso.
Esta es la misma idea que utilizan los principales fabricantes de software para controlar su software. MS Windows es un ejemplo perfecto.