Repokid是一款针对AWS的分布式最小权限高速部署工具,该工具基于Aardvark项目的Access Advisor API实现其功能,可以帮助广大研究人员根据目标AWS账号中的IAM角色策略移除多余服务被授予的访问权限。
工具要求
DynamoDB mkvirtualenv虚拟环境 Python Docker
工具安装
广大研究人员可以直接使用下列命令将该项目源码克隆至本地,并进行工具配置:
代码语言:javascript复制mkvirtualenv repokid
git clone git@github.com:Netflix/repokid.git
cd repokid
pip install -e .
repokid config config.json
DynamoDB
我们需要配置一个DynamoDB表,该表需要包含下列属性:
1、RoleId(字符串)作为主分区键; 2、一个名为Account的全局辅助索引; 3、一个名为RoleName的全局辅助索引;
本地运行:
代码语言:javascript复制docker-compose up
打开浏览器并访问「http://localhost:8000」即可查看DynamoDB节点,访问「http://localhost:8001」即可查看DynamoDB管理员面板。
IAM权限
代码语言:javascript复制{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:DeleteInstanceProfile",
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:GetAccountAuthorizationDetails",
"iam:GetInstanceProfile",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListInstanceProfiles",
"iam:ListInstanceProfilesForRole",
"iam:ListRolePolicies",
"iam:PutRolePolicy",
"iam:UpdateRoleDescription"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
工具使用
标准工作流
更新角色缓存:
代码语言:javascript复制repokid update_role_cache <ACCOUNT_NUMBER>
显示角色缓存:
代码语言:javascript复制repokid display_role_cache <ACCOUNT_NUMBER>
显示指定角色的信息:
代码语言:javascript复制repokid display_role <ACCOUNT_NUMBER> <ROLE_NAME>
操作指定角色:
代码语言:javascript复制repokid repo_role <ACCOUNT_NUMBER> <ROLE_NAME>
操作账号中的所有角色:
代码语言:javascript复制repokid repo_all_roles <ACCOUNT_NUMBER> -c
针对特定权限执行操作
代码语言:javascript复制$ repokid find_roles_with_permissions "s3:putobjectacl" "sts:assumerole" --output=myroles.json
...
$ repokid remove_permissions_from_roles --role-file=myroles.json "s3:putobjectacl" "sts:assumerole" -c
以代码库使用
Repokid还支持以代码库的形式使用,使用时需要导入repokid.lib模块:
代码语言:javascript复制from repokid.lib import display_role, repo_role, update_role_cache
account_number = "123456789012"
display_role(account_number, "superCoolRoleName")
update_role_cache(account_number)
repo_role(account_number, "superCoolRoleName", commit=True)
许可证协议
本项目的开发与发布遵循Apache-2.0开源许可证协议。
项目地址
Repokid:
https://github.com/Netflix/repokid
https://github.com/Netflix-Skunkworks/aardvark https://aws.amazon.com/dynamodb/