2017-04-18 172 views
1

我在S3桶中有一个云信息模板(url遵循模式,但不完全等于:https://s3.amazonaws.com/bucket-name/cloudform.yaml)。我需要能够从CLI访问bash脚本。我希望组织中的所有人(都在此单个帐户中)可以访问此模板,但组织外的其他人无法访问模板。我尝试过的存储桶政策如下所示:S3主要桶策略权限

{ 
"Version": "2012-10-17", 
"Id": "Policy11111111", 
"Statement": [ 
    { 
     "Sid": "Stmt111111111", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::7777777777:root" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::bucket-name/*" 
    } 
] 
} 

有了这项政策,我和我的办公室中的其他人无法访问该网址。即使我用root帐户登录,我也遇到了拒绝访问。

而且,这种变化(只设置主要为*),使斗访问人:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy11111111", 
    "Statement": [ 
     { 
      "Sid": "Stmt111111111", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::bucket-name/*" 
     } 
    ] 
} 

显然迹象都指向我的主要领域是错误配置。 777777777是我在“我的帐户”页面下看到的帐户ID的替代品。

那么,我需要在IAM前端担心这个吗?考虑到我是以root用户身份登录的,我想我应该可以访问此内容,只要我输入存储桶策略即可。任何帮助将非常感激。

回答

1

简短而亲切:

桶政策不允许你做你想要什么,因为主构件通配符限制。最好的办法是创建一个IAM组,并将所有IAM用户放入该组,如果他们需要访问。

龙版本:

只是为了讲清楚,到https://s3.amazonaws.com/bucket-name/cloudform.yaml任何要求必须签名,并有必要的身份验证参数或要求将拒绝访问被拒绝。唯一的例外是如果存储桶策略或存储桶ACL允许公共访问,但听起来不像这是你想要的。

当你说“组织中的每个人(都在这个单一帐户中)”时,我假设你指的是帐户下的IAM用户正在从AWS控制台访问文件,或者使用其他代码或工具的IAM用户(例如AWS CLI)来访问该文件。

所以这听起来像你想要的是指定委托人作为

"Principal": { 
    "AWS": "arn:aws:iam::777777777777:user/*" 
} 

因为这是模式会是怎样为777777777777帐户ID下的任何IAM用户的能力。不幸的是,这是不允许的,因为除非你使用catch-all通配符“*”,否则委托人不允许使用通配符。换句话说,“*”是允许的,但“前缀*”或“*后缀”不是。 (祝AWS证明这更好的。)

你可以指定你在斗政策,像这样每个用户IAM:

"Principal": { 
    "AWS": [ 
     "arn:aws:iam::777777777777:user/alice", 
     "arn:aws:iam::777777777777:user/bob", 
     "arn:aws:iam::777777777777:user/carl", 
     ... 
     "arn:aws:iam::777777777777:user/zed", 
} 

但你可能不希望更新的策略为每个新用户。

创建一个允许访问该文件的IAM组是最容易的。然后,您将添加所有IAM用户到该组。如果您添加新用户,那么您必须手动将它们添加到该组,因此它不像您最初想要的那样方便。