更新时间:2026-07-01 GMT+08:00
分享

基于OIDC协议的信任委托SSO概述

设想您正在开发一个访问华为云资源的应用程序,例如使用GitHub Actions工作流来访问华为云OBS服务和GaussDB。在使用这些工作流时,您需要向华为云服务发起请求,而这些请求必须使用华为云访问密钥进行签名。然而,我们强烈建议不要在华为云之外的应用程序中长期存储华为云凭证。相反,应将应用程序配置为在需要时通过OIDC身份提供商动态请求临时的华为云安全凭证。这些临时凭证会映射到一个华为云信任委托,该信任委托仅具备执行应用程序所需任务的最小权限。

通过OIDC身份提供商,您无需编写自定义登录代码或自行管理用户身份。您可以在应用程序中使用OIDC(例如GitHub Actions或任何兼容OIDC的身份提供商)来与华为云进行身份验证。应用程序会获取一个OIDC令牌,然后用该令牌在华为云中交换临时安全凭证,这些凭证会映射到一个 IAM 信任委托,从而获得访问您华为云账号中特定资源的权限。使用身份提供商有助于提升华为云账号的安全性,因为您无需在应用中嵌入或分发长期有效的安全凭证。

OIDC身份提供商同时支持机器到机器的身份验证(例如 CI/CD 流水线、自动化脚本和无服务器应用)以及用户身份验证。

使用基于OIDC协议的SSO对华为云进行API访问

通过OIDC身份提供商,您可以让外部身份提供商中的应用安全访问华为云资源,而无需在应用中存储长期访问凭证。基于OIDC的联邦身份认证流程可分为IAM侧配置和访问流程两个阶段。
  • IAM侧配置
    如下图所示,管理员在IAM侧完成与外部身份提供商的信任建立及权限配置。
    图1 在IAM侧配置身份提供商和信任委托
    主要步骤包括:
    1. 创建IAM OIDC身份提供商,用于接入外部身份系统;
    2. 创建IAM信任委托,建立与身份提供商之间的信任关系;
    3. 为信任委托配置身份策略,定义可被授予的资源权限范围。

    通过上述配置,云平台完成对外部身份的信任初始化,为后续基于OIDC的访问控制提供基础。

  • 访问流程
    如下图所示,用户通过联邦身份访问云资源的流程如下:
    图2 访问流程
    1. 发起认证:通过客户端应用程序向身份提供商发起身份认证请求。
    2. 用户身份验证:身份提供商基于组织的身份存储库对用户进行身份验证。
    3. 签发OIDC令牌(ID Token):验证成功后,外部身份提供商生成包含用户身份信息的OIDC令牌,并返回给客户端应用程序。(具体交互流程取决于所使用的授权模式,例如不同的Grant Type)
    4. 调用STS接口:客户端应用程序调用STS的AssumeAgencyWithOIDC接口,并传入IAM OIDC身份提供商URN、信任委托URN、Session Name以及从身份提供商获取的OIDC令牌。
    5. OIDC令牌校验:STS根据已配置的OIDC URL获取/.well-known/openid-configuration,解析其中的jwks_uri,并获取对应的JWK公钥,对OIDC令牌的签名及有效性进行校验。
    6. 返回临时凭证:校验通过后,STS向客户端应用程序返回临时安全凭证(Access Key / Secret Key / Security Token)。
    7. 访问云资源:客户端应用程序使用临时安全凭证调用云服务 API,例如访问Object Storage Service(OBS)执行桶或对象相关操作。

    由OIDC身份提供商签发的JSON Web Token(JWT)在其exp声明中包含一个过期时间,用于指明令牌何时失效。IAM根据OIDC Core 1.0标准的允许,为该过期时间提供了一个额外的5分钟宽限窗口,以应对时钟偏差(clock skew)。 这意味着,即使IAM在JWT标明的过期时间之后收到该令牌,只要仍处于这额外的5分钟窗口内,令牌仍会被接受并继续进行评估和处理。

用于OIDC联邦身份认证访问华为云资源的信任委托概述

您在IAM中创建的信任委托将确定您组织中的OIDC身份提供商主体在华为云中允许执行的操作。当您为信任委托创建信任策略时,您可以将先前创建的IAM身份提供商指定为信任主体。此外,您还可以使用Condition设置信任策略的条件,以便仅允许与特定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身份提供商的信任委托

相关文档