基于OIDC协议的信任委托SSO概述
设想您正在开发一个访问华为云资源的应用程序,例如使用GitHub Actions工作流来访问华为云OBS服务和GaussDB。在使用这些工作流时,您需要向华为云服务发起请求,而这些请求必须使用华为云访问密钥进行签名。然而,我们强烈建议不要在华为云之外的应用程序中长期存储华为云凭证。相反,应将应用程序配置为在需要时通过OIDC身份提供商动态请求临时的华为云安全凭证。这些临时凭证会映射到一个华为云信任委托,该信任委托仅具备执行应用程序所需任务的最小权限。
通过OIDC身份提供商,您无需编写自定义登录代码或自行管理用户身份。您可以在应用程序中使用OIDC(例如GitHub Actions或任何兼容OIDC的身份提供商)来与华为云进行身份验证。应用程序会获取一个OIDC令牌,然后用该令牌在华为云中交换临时安全凭证,这些凭证会映射到一个 IAM 信任委托,从而获得访问您华为云账号中特定资源的权限。使用身份提供商有助于提升华为云账号的安全性,因为您无需在应用中嵌入或分发长期有效的安全凭证。
OIDC身份提供商同时支持机器到机器的身份验证(例如 CI/CD 流水线、自动化脚本和无服务器应用)以及用户身份验证。
使用基于OIDC协议的SSO对华为云进行API访问
- IAM侧配置 如下图所示,管理员在IAM侧完成与外部身份提供商的信任建立及权限配置。图1 在IAM侧配置身份提供商和信任委托
主要步骤包括:- 创建IAM OIDC身份提供商,用于接入外部身份系统;
- 创建IAM信任委托,建立与身份提供商之间的信任关系;
- 为信任委托配置身份策略,定义可被授予的资源权限范围。
通过上述配置,云平台完成对外部身份的信任初始化,为后续基于OIDC的访问控制提供基础。
- 访问流程 如下图所示,用户通过联邦身份访问云资源的流程如下:图2 访问流程
- 发起认证:通过客户端应用程序向身份提供商发起身份认证请求。
- 用户身份验证:身份提供商基于组织的身份存储库对用户进行身份验证。
- 签发OIDC令牌(ID Token):验证成功后,外部身份提供商生成包含用户身份信息的OIDC令牌,并返回给客户端应用程序。(具体交互流程取决于所使用的授权模式,例如不同的Grant Type)
- 调用STS接口:客户端应用程序调用STS的AssumeAgencyWithOIDC接口,并传入IAM OIDC身份提供商URN、信任委托URN、Session Name以及从身份提供商获取的OIDC令牌。
- OIDC令牌校验:STS根据已配置的OIDC URL获取/.well-known/openid-configuration,解析其中的jwks_uri,并获取对应的JWK公钥,对OIDC令牌的签名及有效性进行校验。
- 返回临时凭证:校验通过后,STS向客户端应用程序返回临时安全凭证(Access Key / Secret Key / Security Token)。
- 访问云资源:客户端应用程序使用临时安全凭证调用云服务 API,例如访问Object Storage Service(OBS)执行桶或对象相关操作。
由OIDC身份提供商签发的JSON Web Token(JWT)在其exp声明中包含一个过期时间,用于指明令牌何时失效。IAM根据OIDC Core 1.0标准的允许,为该过期时间提供了一个额外的5分钟宽限窗口,以应对时钟偏差(clock skew)。 这意味着,即使IAM在JWT标明的过期时间之后收到该令牌,只要仍处于这额外的5分钟窗口内,令牌仍会被接受并继续进行评估和处理。
用于OIDC联邦身份认证访问华为云资源的信任委托概述
{
"Version": "5.0",
"Statement": [
{
"Action": [
"sts:agencies:assumeWithOIDC"
],
"Effect": "Allow",
"Principal": {
"Federated": [
"iam::{account-id}:oidcProvider:{provider-name}"
]
},
"Condition": {
"StringEquals": {
"oidc:iss": [
"https://accounts.example-idp.com"
],
"oidc:aud": [
"my-backend-service"
],
"oidc:sub": [
"550e8400-e29b-41d4-a716-446655440000"
]
}
}
}
]
} oidc:iss条件键用于验证发行者(Issuer)是否与您在信任策略中指定的内容匹配。对应OIDC令牌中的iss字段,是OIDC身份提供商发布者的URL。
oidc:aud条件键用于验证audience(受众)是否与您在信任策略中指定的内容匹配。
oidc:sub条件键用于验证subject(主体标识)是否与您在信任策略中指定的内容匹配。对应于OIDC令牌中的sub字段,是OIDC身份提供商范围内用户的唯一标识符。
通过以上配置,华为云可以基于OIDC令牌完成身份校验,并将访问权限映射到最小授权的信任委托,实现安全、可控的联邦访问。更多信息请参考创建OIDC身份提供商的信任委托。