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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建私有人力 (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 可能有一组用户(工作线程)的不同命名约定。因此,您必须使用发送到sagemaker:groups您的 IdP 或从Ground Truth中Amazon A2I发送的自定义声明来标识工作人员所属的一个或多个用户组。要了解更多信息,请参阅“将必需声明和可选声明发送到 Ground Truth 和 Amazon A2I”。

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

将必需声明和可选声明发送到 Ground Truth 和 Amazon A2I

当您使用自己的 IdP 时, Ground Truth 和 Amazon A2I 使用您的 IssuerClientId和 通过从 获取身份验证代码ClientSecret来验证工作人员的身份AuthorizationEndpoint

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

注意

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

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

sagemaker:groupssagemaker-groups

数据类型

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

如果工作线程属于多个组,请使用最多包含 10 个字符串的列表。

允许字符

正则表达式:[\\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

数据类型

字符串

允许字符

正则表达式:[\\w+-]+

引号

128 个字符

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

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

sagemaker:namesagemaker-name

数据类型

字符串

要在工作线程门户中显示的工作线程名称。

"Jane Doe"

email

数据类型

字符串

工作人员电子邮件。 Ground Truth 使用此电子邮件通知工作人员,他们已被邀请处理标记任务。如果您为工作人员所在的工作团队设置 Ground Truth 主题,则 Amazon SNS 也将使用此电子邮件在标记任务可用时通知工作人员。

"example-email@domain.com"

email_verified

数据类型

Bool

接受的值:

True, False

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

True

以下示例显示了 UserInfoEndpoint 可返回的 JSON 对象语法。

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

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

创建 OIDC IdP 人力

您可以使用 SageMaker API 操作CreateWorkforce和关联的特定于语言SDKs创建人力。在参数 中指定有关 OIDC IDP 的 WorkforceName 和 信息OidcConfig。建议您使用占位符重定向 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 详细信息的人力。具体来说,您必须为 OIDC IdP 配置所需的自定义 sagemaker 声明(有关更多详细信息,请参阅下一节)。因此,建议您使用占位符重定向 URI 配置 OIDC,然后在创建人力后更新 URI。请参阅创建 OIDC IdP 人力以了解如何使用此 API 创建人力。

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

重要

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

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

  1. 在 SageMakerhttps://console.aws.amazon.com/sagemaker/ 打开 控制台。

  2. 在导航窗格中,选择 Labeling workforces (标记人力)

  3. 选择 Private (私有) 选项卡。

  4. Private workforce summary (私有人力摘要) 中,您将看到 Labeling Portal sign-in URL (标记门户登录 URL)。这是您的工作线程门户 URL。

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

使用 创建私有人力时CreateWorkforce,请指定 WorkforceName。使用此名称调用 DescribeWorkforce 。下表包含使用 AWS CLI 和 的请求的示例适用于 Python (Boto3) 的 AWS 软件开发工具包。

适用于 Python (Boto3) 的开发工具包
response = client.describe_workforce(WorkforceName='string') print(f'The workforce subdomain is: {response['SubDomain']}')
AWS CLI
$ C:\> describe-workforce --workforce-name 'string'

验证 OIC 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. Replace {授权终端节点} 具有 OIDC IdP 的授权终端节点的 。

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

    3. Replace {重定向 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. Replace {重定向 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. 此步骤取决于您的 access_token IdP 返回的类型、纯文本访问令牌或 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 粘贴到 Encoded (编码) 框中对其进行解码。

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

  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返回的 是纯文本,则必须验证此响应是否包含所需信息。在这种情况下,响应必须在位于 的表中包含 Required SageMaker 声明将必需声明和可选声明发送到 Ground Truth 和 Amazon A2I。例如,sagemaker-groupssagamaker-name

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

后续步骤

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

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