我正在和另一个人合作做一个项目,叫他鲍勃。
我想在 Amazon EC2 实例上运行一个专有软件。该软件将向外部服务器发送网络数据包(HTTP 请求)。
我不希望 Bob 能够获得此软件。但是,我希望 Bob 能够阻止我发送网络数据包,这样我就无法阻止他以后这样做了。
我不确定怎么做。也许可以通过某种方式赋予 Bob 终止实例的权力,也许可以通过某种方式赋予他阻止数据包发出的能力,我不知道。
很想听听如何以最小的额外延迟实现这一点的想法(例如,通过 Bob 拥有的单独 EC2 实例路由我的数据包会太慢)。谢谢!
答案1
为 Bob 创建 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"
}
]
}
Bob 可能需要更多权限,但当您尝试此操作时,您会发现它们。我可能会将 Bob 放入一个组并将权限分配给该组,而不是直接分配给用户。
答案2
只要您是帐户所有者,您就可以控制 Bob 可以做什么或不能做什么,但您只能自愿限制自己。如果 Bob 是帐户所有者,您就无法阻止他为所欲为。就您而言,您希望对你们双方都施加限制。解决此问题的一种方法是让受信任的第三方控制帐户并为你们双方设置权限。
答案3
这是另一个想法:
编写软件时,应确保软件需要“许可证密钥”才能运行。软件可以加密,或具有其他类似特征,因此,除非有密钥,否则无法运行。密钥将存储在您控制的服务器上。
Bob 拥有一台由他控制的服务器,但服务器上的软件需要您的密钥才能运行。Bob 可以随意终止服务器,但如果没有您的密钥(由您控制),他就无法窃取您的软件。
软件密钥并非万无一失——有可能对您的软件进行逆向工程。但您应该能够避免这样做过于耗时或昂贵。
所有主要软件制造商都采用同样的理念来控制其软件。MS Windows 就是一个很好的例子。