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.com

RAM允许用户在一个云账号下创建多个用户身份,并为用户自动生成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为用户提供三种方式来实现计算资源的访问控制。

一、客户端生成一个随机Code(G32KRY***)用户浏览器访问 https://aka.ms/devicelogin , 用云账号为该随机CODE赋予权限。

浏览器赋权的随机Code,对所有计算资源具有完全访问控制权限。

Alt text

二、使用Azure AD域控制器服务产品,管理租户中的用户、组、应用程序和对组织资源的访问。

AAD产品:

通过AD产品添加的用户只有被明确了授予权限,才能访问管理资源。

用户可以注册多个企业应用程序,会自动生成ClientID和AccessKey,默认开启 Live SDK 支持,默认没有任何权限,需要手动赋予。

https://apps.dev.microsoft.com/#/appList

Alt text

三、产品自身提供了另外一套访问控制机制,可生成对应的访问KEY。

产品业务自身生成对应的访问密钥AceessKey,可以管理访问对应的产品。

Alt text

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泄露,将对用户在阿里云注册的所有计算资源,产生安全风险。