apisdksec - ring04h/wyscan GitHub Wiki
云计算厂商资源访问管理研究(SDK)
@(云计算)[API|SDK|鉴权]
以下测试过程将以阿里云的RAM、亚马孙AWS的AIM、微软Azure的AAD做横向实现比较。
RAM (Resource Access Management)
阿里云为客户提供的用户身份管理与访问控制服务。使用RAM,可以创建、管理用户账号,可以控制这些用户账号对名下资源具有的访问操作权限。
提供Access Key ID和Access Key Secret访问管理计算资源,默认拥有所有权限。
https://ak-console.aliyun.comRAM允许用户在一个云账号下创建多个用户身份,并为用户自动生成AccessKey。
RAM创建的用户和AccessKey默认没有任何权限,需要用户依据策略,手动为实例分配访问控制权限。 https://ram.console.aliyun.com/
AIM(Identity and Access Management)
(IAM) 使用户能够安全地控制用户对 Amazon AWS 服务和资源的访问权限。可以使用 IAM 创建和管理 AWS用户和群组,并使用各种权限来允许或拒绝他们对 AWS 资源的访问。
AIM允许用户在一个账号下创建多个用户身份,并为用户自动生成AccessKey。
IAM 默认状态下启用安全保护;用户只有被明确授予了权限,才能访问 AWS 资源。 https://console.aws.amazon.com/iam/home
AAD(Azure Active Directory)
微软Azure为用户提供三种方式来实现计算资源的访问控制。
https://aka.ms/devicelogin , 用云账号为该随机CODE赋予权限。
一、客户端生成一个随机Code(G32KRY***)用户浏览器访问浏览器赋权的随机Code,对所有计算资源具有完全访问控制权限。
二、使用Azure AD域控制器服务产品,管理租户中的用户、组、应用程序和对组织资源的访问。
AAD产品:
通过AD产品添加的用户只有被明确了授予权限,才能访问管理资源。
用户可以注册多个企业应用程序,会自动生成ClientID和AccessKey,默认开启 Live SDK 支持,默认没有任何权限,需要手动赋予。
https://apps.dev.microsoft.com/#/appList
三、产品自身提供了另外一套访问控制机制,可生成对应的访问KEY。
产品业务自身生成对应的访问密钥AceessKey,可以管理访问对应的产品。
SDK 调用分析
阿里云
https://develop.aliyun.com/api
阿里云的SDK,用户指定对应的AccessKey + Secret,就能完成资源的访问管理控制。
access_key_id = 'BMBRiCF5HHgyvlS2';
access_key_secret = 'qb1SwCVfNGlmO9QF*******46EeS6tl'
亚马逊AWS
https://aws.amazon.com/cn/tools/
亚马逊的AWS SDK,指定对应的AccessKey + Secret,就能完成资源的访问管理控制。
# aws configure
# cat ~/.aws/credentials
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
微软Azure
Azure有三种方式,获取计算资源的访问控制权限。
- 浏览器为随机Code赋予权限
- 使用企业应用程序的AccessKey
- 使用业务自身的访问密钥AceessKey
微软Azure的SDK调用设计相对复杂,需要先获得用户的tenantID,企业应用程序的ClientID,再指定系统生成的AccessKEY。
https://azure.microsoft.com/downloads/
一、使用浏览器为随机的Code赋予访问控制权限
# azure login
info: Executing command login
info: To sign in, use a web browser to open the page https://aka.ms/devicelogin. Enter the code GSZELAD8A to authenticate.
二、使用企业应用程序的AccessKey,进行资源的访问与控制
# azure account show
info: Executing command account show
data: Name : 免费试用
data: ID : b08bb788-244d-415f-a7b1-28888ebee423
data: State : Enabled
data: Tenant ID : 1bcb7777-be0a-46b0-8dc1-a413164dd4d8
data: Is Default : true
data: Environment : AzureCloud
data: Has Certificate : No
data: Has Access Token : Yes
from azure.common.credentials import ServicePrincipalCredentials
credentials = ServicePrincipalCredentials(
client_id = 'ABCDEFAB-1234-ABCD-1234-ABCDEFABCDEF',
secret = 'XXXXXXXXXXXXXXXXXXXXXXXX',
tenant = 'ABCDEFAB-1234-ABCD-1234-ABCDEFABCDEF'
)
三、使用业务产品自身的KEY,对资源进行访问
# Azure的文件存储服务,为每个实例,在单独的产品里面分配访问秘钥
net use [drive letter] \\openskynet.file.core.windows.net\skynet /u:openskynet [storage account access key]
总结
各大主流云计算厂商对于SDK访问管理计算资源,都进行了安全管控,都保持了策略分组原则,最小权限原则,实现了非常好的安全粒度控制。
但阿里云由于历史迭代原因,https://ak-console.aliyun.com/#/accesskey AK产品还保留使用,该业务产品提供AccessKey没有遵循安全设计,直接给予了资源访问的最高权限,一旦用户定义的KEY+SECRET泄露,将对用户在阿里云注册的所有计算资源,产生安全风险。