实战案例 | 使用 AWS Organizations 确保只有组织内其它 AWS 账号拥有访问权限


  项目需求

某公司使用 AWS Organizations 管理属于多个部门的不同 AWS 账户,公司在管理账户中有一个 S3 存储桶。公司需要一个既能满足安全要求又尽量减少运营开销的解决方案,实现只有AWS Organizations 内的AWS 账户可以访问该定 S3 存储桶访问。

  作业步骤

本次采用AWS Console界面完成作业。
注意:根据项目的具体情况,可以采用不同的实施方法。比如使用命令行(CLI)部署、代码部署 (CloudFomation、Terraform等)、以及其它开发语言(SDK)完成作业。

步骤一:
1.1 打开 AWS Organization 控制台界面
1.2 确认AWS Organization 服务已经启用
1.3 选择策略,开启 Resource control policies 功能

步骤二:
2.1 转到Resource control policies 界面
2.2 创建 RCP,用以限制对 S3 存储桶的访问,确保只有组织内的特定主体能够访问
2.3 设定策略内容
实现的功能为,请求不是来自组织内部的主体,也不是来自 AWS 服务,则对 S3 存储桶的访问将被拒绝。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EnforceOrgIdentities",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:PrincipalOrgID": "[MY ORG ID]"
                },
                "BoolIfExists": {
                    "aws:PrincipalIsAWSService": "false"
                }
            }
        }
    ]
}

步骤三:
1.1 打开 Resource control policies 界面
1.2 将创建的 RCP 其连接到组织的根、组织部门或组织内的特定 AWS 账户

  结果验证

1.1 在 AWS Organization 内部的 AWS 账户中创建测试用的 S3 存储桶
1.2 将该存储桶的访问权限设定为公开访问,意图模仿因为工程师的疏忽而错误设置目标S3 存储桶的权限设置。
1.3 通过AWS Organization 内部的 AWS 账户内外的用户和主体,分别尝试访问目标 S3 存储桶,验证只有 AWS Organization 内部的 AWS 账户的用户和主体才可以访问。