AWS Management Solution V2

权限管理

1. 每个客户提供 AWS 账户,由 InceptionPad 的 AWS 管理员负责管理;
2. 账户中仅创建一个用于开发的 IAM User (名为 dev),附加项目需要用到的 AWS 服务权限,启用 AccessKey ;
3. AWS 管理员为每个账户管理一份 AWS MgmtProfile 。

操作规范

1. 任何一个新的 AWS 账户,首先开启 CloudTrail 服务;

2. EC2 上应用程序通过 IAM 角色和策略配置接入各种 AWS 服务;

3. 开发者的本地环境,通过 AccessKey 接入各种 AWS 服务;

4. 评估整个项目对于每个 AWS 服务的单日使用量,比如每天 Email 发送数量不会超过10000,则通过 CloudWatch 设定服务熔断条件;

5. 正在开发的项目, AWS 管理员每月第一个周一上午刷新对应的 AccessKey,发送给开发者;

6. 结束开发的项目, AWS 管理员要将 AccessKey 置为 Inactive 状态。

风险分析

1. 客户 AWS 账户中只有一个 AccessKey ,权限最小化,每月刷新或者置为 Inactive 状态;

2. CloudWatch 也会将损失控制在很小范围;

成本分析

1. 金钱成本,InceptionPad 不需要承担开发期间的 AWS 服务费用;

2. 管理成本,为每个客户管理一份 MgmtProfile ,每月刷新 AccessKey ;

3. 技术成本,应用程序内调用 AWS 服务的代码,对于使用 AccessKey 和不使用 AccessKey 两种情况略有不同。
    // 参数中存在credentials时,通过 AccessKey 鉴权。
    $s3 = new S3Client([
        'region' => 'us-east-1',
        'version' => 'latest',
        'credentials' => [
            'key'    => 'FAKE07I7OFTU2ETTMBOJ',
            'secret' => 'FAKE0/N4hTRx44dSXReZJSUzjnBJf2GpE6GC0kES',
        ]
    ]);

    // 参数中不存在credentials时,通过 IAM Role 鉴权。
    $s3 = new S3Client([
        'region' => 'us-east-1',
        'version' => 'latest',
    ]);

    // 所以,开发者本地开发程序的时候需要做类似的环境判断
    if ($env == 'local') {
        $s3 = new S3Client([
            'region' => 'us-east-1',
            'version' => 'latest',
            'credentials' => [
                'key'    => 'FAKE07I7OFTU2ETTMBOJ',
                'secret' => 'FAKE0/N4hTRx44dSXReZJSUzjnBJf2GpE6GC0kES',
            ]
        ]);
    } else {
        $s3 = new S3Client([
            'region' => 'us-east-1',
            'version' => 'latest',
        ]);
    }

    // 另外,实验中发现,在环境满足 IAM Role 鉴权要求的情况下,本不需要传递credentials参数,但是如果依然传了这个参数,那么是否能够通过鉴权完全取决于这个参数。

本地接入 AWS 服务的其他方案

1. 在开发账户中指定本地开发者的主机IP白名单(该方案尚未实验);

2. 本地不接入真正的 AWS 服务,而是提供一组可以使流程畅通的调试代码,比如发送邮件时将邮件上下文写入本地文件中。

AWS MgmtProfile 模板

1. AWS Console - https://385054677422.signin.aws.amazon.com/console
    account and password

2. AccessKey
    包含的权限 SES, S3
    刷新记录
        + 2019-12-01
        + 2020-01-01      

3. 服务使用情况
    IAM
        + User - dev
        + Role - AppInEC2
        + Policy - SES, S3
    EC2
        + 52.201.74.23 (prod)
        + 34.224.209.16 (dev)
    SES
    S3

4. 安全防护
    CloudTrail
    CloudWatch
        + Alarms
            Billing
            EmailSendCount
        + Events
            EC2 Instance State-change Notification

5. System Health

results matching ""

    No results matching ""