创建私有人力 (OIDC IdP) - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建私有人力 (OIDC IdP)

当您想使用自己的 OpenID Connect (OIDC) 身份提供者 (IdP) 对工作人员进行身份验证和管理时,请使用身份提供者创建一个私有人力。使用本页面了解如何配置 IdP 以与 Amazon SageMaker Ground Truth (Ground Truth) 或 Amazon Augmented AI (Amazon A2I) 通信,并了解如何使用自己的 IdP 创建人力。

要使用 OIDC IdP 创建人力,您的 IdP 必须支持,因为 Ground Truth 和 Amazon A2I 会使用您指定的一个或多个组来创建工作团队。您可以使用工作团队为标注作业和人工审核任务指定工作人员。由于组不是一种标准声明,您的 IdP 可能会对一组用户(工作人员)采用不同的命名约定。因此,您必须使用从 IdP 发送到 Ground Truth 或 Amazon A2I 的自定义声明 sagemaker:groups 来识别工作人员所属的一个或多个用户组。要了解更多信息,请参阅向 Ground Truth 和 Amazon A2I 发送必需和可选的声明

您可以使用 SageMaker API 操作 CreateWorkforce 创建 OIDC IdP 人力。创建私有人力后,该人力及其关联的所有工作团队和工作人员都可用于所有 Ground Truth 标注作业任务和 Amazon A2I 人工审核工作流任务。要了解更多信息,请参阅创建 OIDC IdP 人力

向 Ground Truth 和 Amazon A2I 发送必需和可选的声明

当您使用自己的 IdP 时,Ground Truth 和 Amazon A2I 会通过从您的 AuthorizationEndpoint 获得身份验证 CODE,使用 IssuerClientIdClientSecret 对工作人员进行身份验证。

Ground Truth 和 Amazon A2I 将使用此 CODE 从 IdP 的 TokenEndpointUserInfoEndpoint 获取自定义声明。您可以配置 TokenEndpoint 以返回 JSON Web 令牌 (JWT),或配置 UserInfoEndpoint 以返回 JSON 对象。JWT 或 JSON 对象必须包含您指定的必需和可选声明。声明是一个键值对,其中包含有关工作人员的信息或有关 OIDC 服务的元数据。下表列出了 IdP 返回的 JWT 或 JSON 对象中必须包含和可以选择包含的声明。

注意

下表中的某些参数可以使用 :- 指定。例如,您可以使用声明中的 sagemaker:groupssagemaker-groups 指定工作人员所属的组。

名称 必需 接受的格式和值 描述 示例

sagemaker:groupssagemaker-groups

数据类型

如果工作人员属于单个组,请使用字符串标识该组。

如果工作人员属于多个组,请使用最多 10 个字符串的列表。

允许的字符

Regex:[\p{L}\p{M}\p{S}\p{N}\p{P}]+

限额

每个工作人员 10 个组

每个组名称 63 个字符

将工作人员分配给一个或多个组。组用于将工作人员映射到工作团队。

属于单个组的工作人员示例:"work_team1"

属于多个组的工作人员示例:["work_team1", "work_team2"]

sagemaker:subsagemaker-sub

数据类型

字符串

这对于在 Ground Truth 平台内跟踪工作人员身份进行审计以及识别该工作人员处理的任务是必需的。

对于 ADFS:客户必须使用主安全标识符 (SID)。

"111011101-123456789-3687056437-1111"

sagemaker:client_idsagemaker-client_id

数据类型

字符串

允许的字符

Regex:[\w+-]+

限额

128 个字符

客户端 ID。必须为此客户端 ID 发放所有令牌。

"00b600bb-1f00-05d0-bd00-00be00fbd0e0"

sagemaker:namesagemaker-name

数据类型

字符串

要在工作人员门户中显示的工作人员名称。

"Jane Doe"

email

数据类型

字符串

工作人员的电子邮件。Ground Truth 使用此电子邮件通知工作人员,他们已被邀请参加标注任务。如果您为工作人员所在的工作团队设置了 Amazon SNS 主题,Ground Truth 还会在标注任务可用时使用此电子邮件通知该工作人员。

"example-email@domain.com"

email_verified

数据类型

布尔型

接受的值

True, False

指示用户电子邮件是否经过验证。

True

以下是您的 UserInfoEndpoint 可以返回的 JSON 对象语法示例。

{ "sub":"122", "exp":"10000", "sagemaker-groups":["group1","group2"] "sagemaker-name":"name", "sagemaker-sub":"122", "sagemaker-client_id":"123456" }

Ground Truth 或 Amazon A2I 会对 sagemaker:groupssagemaker-groups 中列出的组进行比较,以验证您的工作人员是否属于标注作业或人工审核任务中指定的工作团队。验证工作团队后,标注作业或人工审核任务将发送给该工作人员。

创建 OIDC IdP 人力

您可以使用 SageMaker API 操作 CreateWorkforce 和相关的特定于语言的 SDK 创建人力。在参数 OidcConfig 中指定 WorkforceName 和有关 OIDC IDP 的信息。建议您使用占位符重定向 URI 配置 OIDC,然后在创建人力后使用工作人员门户 URL 更新 URI。要了解更多信息,请参阅配置 OIDC IdP

下面显示了一个请求示例。请参阅 CreateWorkforce,了解有关此请求中每个参数的更多信息。

CreateWorkforceRequest: { #required fields WorkforceName: "example-oidc-workforce", OidcConfig: { ClientId: "clientId", ClientSecret: "secret", Issuer: "https://example-oidc-idp.com/adfs", AuthorizationEndpoint: "https://example-oidc-idp.com/adfs/oauth2/authorize", TokenEndpoint: "https://example-oidc-idp.com/adfs/oauth2/token", UserInfoEndpoint: "https://example-oidc-idp.com/adfs/oauth2/userInfo", LogoutEndpoint: "https://example-oidc-idp.com/adfs/oauth2/log-out", JwksUri: "https://example-oidc-idp.com/adfs/discovery/keys" }, SourceIpConfig: { Cidrs: ["string", "string"] } }

配置 OIDC IdP

如何配置 OIDC IdP 取决于您使用的 IdP 和您的业务需求。

配置 IdP 时,必须指定回调或重定向 URI。在 Ground Truth 或 Amazon A2I 对工作人员进行身份验证后,此 URI 将工作人员重定向到工作人员门户,工作人员可以在那里访问标注或人工审核任务。要创建工作人员门户 URL,需要使用 CreateWorkforce API 操作创建一个包含 OIDC IdP 详细信息的人力。具体来说,您必须使用所需的自定义 sagemaker 声明配置 OIDC IdP(详见下一节)。因此,建议您使用占位重定向 URI 配置 OIDC,然后在创建人力后更新 URI。请参阅创建 OIDC IdP 人力,了解如何使用此 API 创建人力。

您可以在 SageMaker Ground Truth 控制台中或使用 SageMaker API 操作 DescribeWorkforce 查看工作人员门户 URL。工作人员门户 URL 位于响应的 SubDomain 参数中。

重要

确保将人力子域添加到 OIDC IdP 允许列表中。将子域添加到允许列表时,它必须以 /oauth2/idpresponse 结尾。

在创建私有人力后查看工作人员门户 URL(控制台):
  1. 通过 https://console.aws.amazon.com/sagemaker/ 打开 SageMaker 控制台。

  2. 在导航窗格中,选择标注人力

  3. 选择私有选项卡。

  4. 私有人力摘要中,您将看到标注门户登录 URL。这是您的工作人员门户 URL。

在创建私有人力后查看工作人员门户 URL (API):

使用 CreateWorkforce 创建私有人力时,需要指定一个 WorkforceName。使用此名称调用 DescribeWorkforce。下表包括使用 Amazon CLI 和 Amazon SDK for Python (Boto3) 的请求示例。

SDK for Python (Boto3)
response = client.describe_workforce(WorkforceName='string') print(f'The workforce subdomain is: {response['SubDomain']}')
Amazon CLI
$ C:\> describe-workforce --workforce-name 'string'

验证 OIDC IdP 人力身份验证响应

创建 OIDC IdP 人力后,可以通过以下过程使用 cURL 验证其身份验证工作流。此过程假定您可以访问终端,并已安装 cURL。

要验证 OIDC IdP 授权响应,请执行以下操作:
  1. 使用如下配置的 URI 获取授权码:

    {AUTHORIZE ENDPOINT}?client_id={CLIENT ID}&redirect_uri={REDIRECT URI}&scope={SCOPE}&response_type=code
    1. {AUTHORIZE ENDPOINT} 替换为 OIDC IdP 的授权端点。

    2. {CLIENT ID} 替换为 OAuth 客户端中的客户端 ID。

    3. {REDIRECT URI} 替换为工作人员门户 URL。如果 /oauth2/idpresponse 尚不存在,则必须将其添加到 URL 的末尾。

    4. 如果您有自定义范围,请使用它来替换 {SCOPE}。如果您没有自定义范围,请将 {SCOPE} 替换为 openid

    下面是经过上述修改后的 URI 示例:

    https://example.com/authorize?client_id=f490a907-9bf1-4471-97aa-6bfd159f81ac&redirect_uri=https%3A%2F%2F%2Fexample.labeling.sagemaker.aws%2Foauth2%2Fidpresponse&response_type=code&scope=openid
  2. 将步骤 1 中修改后的 URI 复制并粘贴到浏览器中,然后按键盘上的 Enter 键。

  3. 使用 IdP 进行身份验证。

  4. 复制 URI 中的身份验证码查询参数。此参数存在于 code=。以下是响应内容的示例。在此示例中,复制 code=MCNYDB... 和此后的所有内容。

    https://example.labeling.sagemaker.aws/oauth2/idpresponse?code=MCNYDB....
  5. 在进行以下所列的必要修改后,打开终端并输入以下命令:

    curl --request POST \ --url '{TOKEN ENDPOINT}' \ --header 'content-type: application/x-www-form-urlencoded' \ --data grant_type=authorization_code \ --data 'client_id={CLIENT ID}' \ --data client_secret={CLIENT SECRET} \ --data code={CODE} \ --data 'redirect_uri={REDIRECT URI}'
    1. {TOKEN ENDPOINT} 替换为 OIDC IdP 的令牌端点。

    2. {CLIENT ID} 替换为 OAuth 客户端中的客户端 ID。

    3. {CLIENT SECRET} 替换为 OAuth 客户端中的客户端密钥。

    4. {CODE} 替换为您在步骤 4 中复制的身份验证码查询参数。

    5. {REDIRECT URI} 替换为工作人员门户 URL。

    下面是进行上述修改后的 cURL 请求示例:

    curl --request POST \ --url 'https://example.com/token' \ --header 'content-type: application/x-www-form-urlencoded' \ --data grant_type=authorization_code \ --data 'client_id=f490a907-9bf1-4471-97aa-6bfd159f81ac' \ --data client_secret=client-secret \ --data code=MCNYDB... \ --data 'redirect_uri=https://example.labeling.sagemaker.aws/oauth2/idpresponse'
  6. 此步骤取决于 IdP 返回的 access_token 类型,是纯文本访问令牌还是 JWT 访问令牌。

    • 如果 IdP 不支持 JWT 访问令牌,则 access_token 可以是纯文本(例如 UUID)。您看到的响应可能类似于下面的内容。在这种情况下,请转到步骤 7。

      { "access_token":"179c144b-fccb-4d96-a28f-eea060f39c13", "token_type":"Bearer", "expires_in":3600, "refresh_token":"ef43e52e-9b4f-410c-8d4c-d5c5ee57631a", "scope":"openid" }
    • 如果 IdP 支持 JWT 访问令牌,则步骤 5 应生成 JWT 格式的访问令牌。例如,响应可能类似于下面的内容:

      { "access_token":"eyJh...JV_adQssw5c", "refresh_token":"i6mapTIAVSp2oJkgUnCACKKfZxt_H5MBLiqcybBBd04", "refresh_token_expires_in":6327, "scope":"openid", "id_token":"eyJ0eXAiOiJK9...-rDaQzUHl6cQQWNiDpWOl_lxXjQEvQ" }

      复制 JWT 并对其进行解码。您可以使用 python 脚本或第三方网站进行解码。例如,您可以访问网站 https://jwt.io/,并将 JWT 粘贴到编码框中进行解码。

      确保解码后的响应包含以下内容:

  7. 在进行下面列出的必要修改后,在终端中输入以下命令:

    curl -X POST -H 'Authorization: Bearer {ACCESS TOKEN}' -d '' -k -v {USERINFO ENDPOINT}
    1. {USERINFO ENDPOINT} 替换为 OIDC IdP 的用户信息端点。

    2. {ACCESS TOKEN} 替换为在步骤 7 中收到的响应中的访问令牌。这是 "access_token" 参数的条目。

    下面是进行上述修改后的 cURL 请求示例:

    curl -X POST -H 'Authorization: Bearer eyJ0eX...' -d '' -k -v https://example.com/userinfo
  8. 对上述过程中最后一步的响应可能类似于下面的代码块。

    如果步骤 6 中返回的 access_token 是纯文本,则必须验证此响应是否包含所需信息。在这种情况下,响应必须包含向 Ground Truth 和 Amazon A2I 发送必需和可选的声明中的表中的必需 SageMaker 声明。例如 sagemaker-groupssagamaker-name

    { "sub":"122", "exp":"10000", "sagemaker-groups":["group1","group2"] "sagemaker-name":"name", "sagemaker-sub":"122", "sagemaker-client_id":"123456" }

后续步骤

使用 IdP 创建私有人力并验证 IdP 身份验证响应后,可以使用 IdP 组创建工作团队。要了解更多信息,请参阅管理私有人力 (OIDC IdP)

您可以将工作人员访问任务的权限限制到特定的 IP 地址,并使用 SageMaker API 更新或删除人力。要了解更多信息,请参阅使用 Amazon SageMaker API 管理私有人力