我想要了解如何解决这个问题:
我想在我的S3存储桶中有一些对象只能访问少数用户(来自我的网络应用程序的用户)。我查看了AWS文档,似乎我需要为每个用户提供AWS访问密钥(?)。
显然我不想这样做,所以在我的应用程序中是否有办法锁定某些用户并让其他用户进入?我使用Node.JS和MySQL(存储我的用户),如果这有所不同。
非常感谢你的帮助。
答案 0 :(得分:1)
S3访问/许可方案的简单描述是......与大多数其他AWS资源一样,访问S3基于以IAM为中心的访问控制。因此,您可以通过授予用户访问权限(在S3上设置)或授予用户S3访问权限(在IAM中将其设置为策略)来授予对S3存储桶的访问权限。因此,访问S3的任何人或任何人都必须通过AWS进行身份验证。同样,这是一个非常高级的描述,只是简单地指出访问是基于用户/角色身份验证。
现在,假设您的网络应用程序在AWS(EC2?)上运行,那么(希望)已经(希望)为您分配了一个IAM角色。一旦为该IAM角色分配了执行此操作的权限,EC2实例上运行的应用程序现在可以通过该角色访问任何AWS资源。
但是,您不希望所有的webapp用户都访问S3,所以我的两个想法是:
1)检查应用程序中的用户凭据(假设用户需要以某种方式对您的应用程序进行身份验证),并根据用户凭据确定是否调用S3。然后,您将使用分配给EC2实例的IAM角色(EC2实例只能分配1个IAM角色)并访问S3。
这第二个想法非常糟糕,对我来说闻起来很糟糕。我只是指出它是一种可能性,并强调如何使用IAM用户/角色。
2)此建议不会使用分配给EC2实例的IAM角色,但我始终主张为实例分配角色,您始终可以锁定该角色并拒绝访问所有AWS资源,但您可以& #39; t在启动后为实例添加角色。
有两个IAM用户(S3Granted和S3Denied,每个用户显然都有适当的访问S3的策略)。然后,您的webapp的每个用户(例如Hillary Clinton,Donald Trump,Bernie Sanders和Ted Cruz)将根据他们是否应该访问S3来映射到两个IAM用户中的一个。这将是MySQL数据库中的一个字段。您不必预先检查凭据(因为那样您只需要执行选项#1并继续执行S3呼叫,无论用户如何,S3将根据IAM用户帐户授予或拒绝访问权限webapp用户与之相关联。您在技术上不需要S3Denied用户(您可能没有用户),但我认为指定IAM用户会更清晰。
e.g:
WebAppUser/Bernie Sanders --> IAMUser/S3Granted
WebAppUser/Hillary Clinton --> IAMUser/S3Denied
WebAppUser/Ted Cruz --> IAMUser/S3Granted
WebAppUser/Donald Trump --> IAMUser/S3Denied
对于选项#2,您需要在某处为IAM用户m(S3Granted和S3Denied)存储Access密钥,以便您可以正确进行身份验证。
此外,您需要进行一些异常处理,以便您可以正确地通知您的用户他们已被拒绝访问。
总的来说,#2只是一个坏主意。如果您在MySQL数据库中只有一个字段指定他们是否可以访问S3并通过IAM角色进行S3调用或拒绝在您的webapp中执行此操作,那将会更加清晰。不要将其留给S3授予或拒绝访问权。