身份和访问管理 API

ENTERPRISE

使用 IAM API 管理用户和权限

身份和访问管理 API (IAM) API 允许您通过 RESTful 界面管理用户、用户组、权限以及 LDAP 配置设置。它提供比 DC/OS UI 更多的功能。

请求和响应格式

API 仅支持 JSON。您必须在 HTTP 标头中包含 application/json 作为 Content-Type,如下所示。

  1. Content-Type: application/json

主机名和基础路径

要使用的主机名会根据程序运行的位置而有所不同。

  • 如果您的程序在 DC/OS 群集之外运行,则应使用群集 URL。这可以通过启动 DC/OS UI 并从浏览器复制域名来获取。或者,您可以登录到 DC/OS CLI 并键入 dcos config show core.dcos_url 以获取群集 URL。在生产环境中,这应该是位于主服务器前面的负载均衡器的路径。
  • 如果您的程序在群集内部运行,则应使用 master.mesos
/acs/api/v1 附加到主机名,如下所示。

  1. https://<host-ip>/acs/api/v1

身份验证和授权

所有 IAM 端点都需要认证令牌和 dcos:superuser 权限—auth 端点除外。auth 端点不需要认证令牌,因为它们的目的是在成功登录后返回认证令牌。

获取认证令牌

使用 IAM API

要获得认证令牌,请将 POST 请求主体中的本地用户或服务账户的凭据传递给 /auth/login

要登录本地用户账户,应在请求中提供 uidpassword

注意:了解如何通过 DC/OS 在 curl 命令中建立信任

  1. curl -i -X POST https://<host-ip>/acs/api/v1/auth/login -d '{"uid": "<uid>", "password": "<password>"}' -H 'Content-Type: application/json'

要登录服务账户,请在请求中提供用户 ID 和服务登录令牌。服务登录令牌是 RS256 型的 RFC 7519 JWT。它必须以 JWT 格式结合服务账户 (uid) 和过期时间 (exp) 声明来构建。服务登录令牌的 JWT 要求为:

  1. 标头
  1. {
  2. "alg": "RS256",
  3. "typ": "JWT"
  4. }
  1. 有效负载
  1. {
  2. "uid": "<uid>",
  3. "exp": "<expiration_time>"
  4. }

然后必须使用服务账户的私钥对所提供的信息进行加密。可以使用 jwt.io手动完成,或者使用您最喜欢的 JWT 库进行编程。最终的编码步骤应产生可传递给 IAM 的 base64 已编码 JWT。

  1. curl -X POST https://<host-ip>/acs/api/v1/auth/login -d '{"uid": "<service-account-id>", "token": "<service-login-token>"}' -H 'Content-Type: application/json'

两个请求都会返回 DC/OS 认证令牌,如下所示。

  1. {
  2. "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJib290c3RyYXB1c2VyIiwiZXhwIjoxNDgyNjE1NDU2fQ.j3_31keWvK15shfh_BII7w_10MgAj4ay700Rub5cfNHyIBrWOXbedxdKYZN6ILW9vLt3t5uCAExOOFWJkYcsI0sVFcM1HSV6oIBvJ6UHAmS9XPqfZoGh0PIqXjE0kg0h0V5jjaeX15hk-LQkp7HXSJ-V7d2dXdF6HZy3GgwFmg0Ayhbz3tf9OWMsXgvy_ikqZEKbmPpYO41VaBXCwWPmnP0PryTtwaNHvCJo90ra85vV85C02NEdRHB7sqe4lKH_rnpz980UCmXdJrpO4eTEV7FsWGlFBuF5GAy7_kbAfi_1vY6b3ufSuwiuOKKunMpas9_NfDe7UysfPVHlAxJJgg"
  3. }

DC/OS 认证令牌也是 RS256 类型的 RFC 7519 JWT。

使用 DC/OS CLI

使用 dcos auth login 登录 DC/OS CLI 时,它会在本地存储认证令牌值。您可以在 curl 命令中将此值引用为变量(在下一部分中讨论)。

或者,您可以使用以下命令获取认证令牌值。

  1. dcos config show core.dcos_acs_token

传递认证令牌

使用 HTTP 标头

复制令牌值并将其传递到 HTTP 标头的 Authorization 字段中,如下所示。

  1. Authorization: token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJib290c3RyYXB1c2VyIiwiZXhwIjoxNDgyNjE1NDU2fQ.j3_31keWvK15shfh_BII7w_10MgAj4ay700Rub5cfNHyIBrWOXbedxdKYZN6ILW9vLt3t5uCAExOOFWJkYcsI0sVFcM1HSV6oIBvJ6UHAmS9XPqfZoGh0PIqXjE0kg0h0V5jjaeX15hk-LQkp7HXSJ-V7d2dXdF6HZy3GgwFmg0Ayhbz3tf9OWMsXgvy_ikqZEKbmPpYO41VaBXCwWPmnP0PryTtwaNHvCJo90ra85vV85C02NEdRHB7sqe4lKH_rnpz980UCmXdJrpO4eTEV7FsWGlFBuF5GAy7_kbAfi_1vY6b3ufSuwiuOKKunMpas9_NfDe7UysfPVHlAxJJgg

将curl 用作字符串值

例如,使用 curl,您将按以下方式传递此值。

  1. curl -H "Authorization: token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJib290c3RyYXB1c2VyIiwiZXhwIjoxNDgyNjE1NDU2fQ.j3_31keWvK15shfh_BII7w_10MgAj4ay700Rub5cfNHyIBrWOXbedxdKYZN6ILW9vLt3t5uCAExOOFWJkYcsI0sVFcM1HSV6oIBvJ6UHAmS9XPqfZoGh0PIqXjE0kg0h0V5jjaeX15hk-LQkp7HXSJ-V7d2dXdF6HZy3GgwFmg0Ayhbz3tf9OWMsXgvy_ikqZEKbmPpYO41VaBXCwWPmnP0PryTtwaNHvCJo90ra85vV85C02NEdRHB7sqe4lKH_rnpz980UCmXdJrpO4eTEV7FsWGlFBuF5GAy7_kbAfi_1vY6b3ufSuwiuOKKunMpas9_NfDe7UysfPVHlAxJJgg"

将curl 用作 DC/OS CLI 变量

然后,您可以在 curl 命令中引用此值,如下所示。

  1. curl -H "Authorization: token=$(dcos config show core.dcos_acs_token)"

刷新认证令牌

默认情况下,认证令牌在五天后过期。如果您的程序需要运行超过五天,则需要一个服务帐户。有关更多信息,请参阅配置自定义服务

API 参考

身份和访问管理 API - 图1

日志记录

虽然 API 会返回信息性错误消息,但您也可能会发现检查服务日志很有用。有关说明,请参阅服务和任务日志记录