在AWS中保持我的s3存储桶安全的替代方案是什么?

时间:2018-01-14 18:26:54

标签: amazon-web-services security amazon-s3

目前,我有一个名为stackoverflow2017的s3存储桶,其中包含一些文件:

enter image description here

并且,ACL配置如下:

enter image description here

您可以看到存储桶是私有的,甚至我自己的帐户也无法访问它。

我可以按照以下方式为策略设置策略:

$ aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/S3PolicyForDeveloper --user-name developer

但是,我想知道其他选择。

问题:批准访问开发人员,应用程序等的课程有哪些替代方案和最佳做法?

1 个答案:

答案 0 :(得分:2)

有几种方法可以在s3中保护您的存储桶,我可以列出这四种应用权限的方法

上面的列表遵循权限层次结构,第一个是具有更多层次结构的权限,如果您的安全配置中存在以前的权限之一,则将覆盖最后一个权限。

参考: How to secure an Amazon S3 Bucket

IAM policies 用于授予对应用于其他资源的用户,组或角色的访问权限。如果用户或AWS资源(例如,特定的EC2实例集,Lambda函数,另一个帐户等)需要访问一个或多个存储桶,则可以采用这种方式。它还有助于确保您应用最小权限原则并仅授予必要的权限。

Bucket policies 适用于该存储桶和该存储桶中的密钥。如果您需要以数据为中心授予权限,则存储桶策略是实现此目的的最简单方法。当您的存储桶作为静态网站启用时,这尤其有用。您可以使用存储桶策略将存储桶中的所有内容设置为只读。

Access control lists 隐藏在所有权限方法的封面下方。 ACL是一种细粒度控件,允许您根据需要对更广泛的工具(如存储桶和IAM策略)进行例外处理。根据我的经验,您很少需要调整特定的ACL,但能力就在那里,在某些应用场景中,这取决于您的存储桶/密钥策略。

Query string authentication URL-based access 是Amazon S3中隐藏的宝石。这些方法允许您根据特定URL授予权限。使用此类身份验证有两种常见模式;

  • 允许某人或某物将密钥上传到您的存储桶
  • 提供对特定密钥的临时访问

这是确保提供对Amazon S3存储桶的一次性访问的绝佳方法。

限制访问s3资源的替代方法

1。将IAM策略设置为组或用户。

此方法允许您为组或用户设置IAM policy,您可以通过CLI,API调用或通过AWS控制台执行此操作。

  • 控制台

IAM User IAM用户

点击链接developer - 按下按钮Add permissions

IAM Policy IAM政策

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1515865413837",
      "Action": [
        "s3:ListBucket",
        "s3:ListObjects"
      ],
      "Effect": "Allow", // Can be Denied
      "Resource": "arn:aws:s3:::stackoverflow2017"
    }
  ]
}

该政策S3PolicyForDeveloper向用户developer授予清单BucketsObjects在清单stackoverflow2017内的权限。

要将策略设置为组,请按照组列表中的相同步骤进行操作。

  • 命令行界面(CLI)

以下命令显示如何将IAM policy分配给IAM用户。基本上,将创建一个名为S3PolicyForDeveloper的新IAM策略,并立即将其附加到IAM用户。

$ aws iam put-user-policy --user-name developer --policy-name S3PolicyForDeveloper --policy-document file:///policies/S3PolicyForDeveloper.json

enter image description here

另一方面,假设您要将现有的IAM policy附加到IAM用户,为此执行以下命令:

$ aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/S3PolicyForDeveloper --user-name developer

enter image description here

以下命令显示如何将IAM policy分配给IAM组。基本上,将创建一个名为S3PolicyForDeveloper的新IAM策略,并立即将其附加到IAM组。

$ aws iam put-group-policy --group-name developers --policy-document file:///policies/S3PolicyForDeveloper.json --policy-name S3PolicyForDeveloper

enter image description here

要将IAM策略附加到组,请执行以下命令:

$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/S3PolicyForDeveloper --group-name developers

enter image description here

2。将存储桶策略设置为存储桶。

存储桶策略允许您向特定存储桶授予特定权限。例如,您可以将桶的访问权限授予特定的IP地址集,AWS中的特定帐户等等。

这是广告资源stackoverflow2017的政策:

{
    "Version": "2012-10-17",
    "Id": "Policy1515865416346",
    "Statement": [
        {
            "Sid": "Stmt1515865413837",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::stackoverflow2017/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "192.168.1.1"
                }
            }
        }
    ]
}

如您所见,resource密钥包含stackoverflow2017广告文件/*Condition,表示此政策已应用于广告资源的内容, 192.168.1.1密钥包含ARN,在这种情况下,此存储桶只能从IP地址Principal中读取。 { "Version": "2012-10-17", "Id": "Policy1515865416346", "Statement": [ { "Sid": "Stmt1515865413837", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789:root" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::stackoverflow2017/*" }, { "Sid": "Stmt1515865413838", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::stackoverflow2017" } ] } 密钥包含允许或拒绝访问资源的用户,帐户,服务或其他实体,在本例中为指定存储区。

list/read

只有执行此操作的帐户为put时,上述政策才允许stackoverflow2017123456789广告资源stackoverflow2017中的新对象。

此方法允许您将Policy Conditions设置为存储桶,您可以通过CLI,API调用或通过AWS控制台执行此操作。

  • 控制台

单击存储桶stackoverflow2017 - 单击选项卡权限 - 单击按钮存储桶策略。

Bucket policy

粘贴Bucket策略,或者您可以使用enter image description here生成它。

  • 命令行界面(CLI)

命令bellow使用文件Stackoverflow2017.json

将新的存储桶策略放入存储桶$ aws s3api put-bucket-policy --bucket stackoverflow2017 --policy file://Stackoverflow2017.json
{{1}}

AWS Policy Generator

资源

希望有所帮助!