Я работаю над проектом с другим человеком, назовите его Боб.
Я хотел бы запустить проприетарное программное обеспечение на инстансе Amazon EC2. Это программное обеспечение будет отправлять сетевые пакеты (HTTP-запросы) на внешний сервер.
Я не хочу, чтобы Боб мог заполучить это программное обеспечение. Однако я хочу, чтобы Боб мог помешать мне посылать сетевые пакеты таким образом, чтобы я никогда не смог помешать ему делать это в будущем.
Не знаю как. Может быть, каким-то образом предоставив Бобу право завершить работу экземпляра, может быть, каким-то образом предоставив ему возможность останавливать отправку пакетов, я не знаю.
Хотелось бы услышать идеи о том, как это можно сделать с минимальной дополнительной задержкой (например, маршрутизация моих пакетов через отдельный экземпляр EC2, которым владеет Боб, будет слишком медленным). Спасибо!
Создайте Боба как пользователя IAM с присоединенной политикой, которая дает им только очень ограниченные права, достаточные для просмотра экземпляров и запуска / остановки этого одного экземпляра, а не прекращения его работы. Суть политики, скорее всего, будет примерно такой, но вам нужно будет ее протестировать / настроить.
{
"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"
}
]
}
Бобу, вероятно, потребуются дополнительные разрешения, но вы обнаружите их, когда попробуете это. Я бы, вероятно, поместил Боба в группу и назначил разрешения группе, а не непосредственно пользователю.
Пока вы являетесь владельцем учетной записи, вы контролируете, что Боб может или не может делать, но вы можете ограничивать себя только добровольно. Если Боб является владельцем учетной записи, вы не можете помешать ему делать то, что он хочет. В вашем случае вы хотите наложить ограничения на вас обоих. Один из способов решить эту проблему - создать учетную запись у доверенной третьей стороны и установить разрешения для вас обоих.
Вот еще одна идея:
Напишите свое программное обеспечение таким образом, чтобы для его работы требовался «лицензионный ключ». Программное обеспечение может быть зашифровано или иметь другие аналогичные характеристики, так что оно не может работать, пока ключ не доступен. Ключ будет храниться на сервере, который вы контролируете.
У Боба есть сервер, которым он управляет, но для работы программного обеспечения на нем нужен ваш ключ. Боб может завершить работу сервера, как ему заблагорассудится, но он не может украсть ваше программное обеспечение без вашего ключа, который вы контролируете.
Программные ключи не являются надежными - возможно перепроектировать ваше программное обеспечение. но у вас должна быть возможность сделать это слишком затратно по времени или дорого.
Это та же идея, которую используют все основные производители программного обеспечения для управления своим программным обеспечением. MS Windows - прекрасный тому пример.