您是否可以或必须使用服务帐户配置 Marathon-LB 因 [安全模式] 而异(/1.10/security/ent/#security-modes)。
disabled
:可选permissive
:可选strict
:必需
为了增加集群的安全性并符合最低权限的原则,我们建议在 permissive
模式中为 Marathon-LB 配置一个服务帐户。否则,Marathon 和 Metronome 将按照 Marathon-LB 配置到一个具有 superuser
权限的服务帐户行事。
此外,如果您计划升级至 strict
模式,在 disabled
和 permissive
模式中为 Marathon-LB 配置一个服务帐户将使升级更加轻松。如果您设置了与同一 Marathon 实例相互作用的多个 Marathon-LB 实例,您可以对每个 Marathon-LB 实例使用相同的服务帐户。
本主题描述如何配置与本土 Marathon 实例相互作用的 Marathon-LB 实例。要为 Marathon-LB 设置服务帐户,请完成以下步骤。
本文档假定以下内容:
marathon-lb
是marathon-lb
marathon
服务名称;如果您正在不同位置安装marathon-lb
,您必须相应地更改密钥位置。marathon-lb/service-account-secret
是存储 Marathon-LB 服务帐户凭证的密钥的完整路径; 如果您更改marathon-lb
服务名称,您必须更改此项。mlb-private-key.pem
是包含私钥的文件的名称。mlb-public-key.pem
是包含公钥的文件的名称。
我们建议您坚持使用这些名称,因为这样可以更容易地复制和粘贴命令。如果您决定更改名称,请确保在发出它们之前修改命令。
创建密钥对
首先,您需要生成 2048 位 RSA 公私密钥对。虽然您可以使用任何工具完成此操作,但 DC/OS Enterprise CLI 最为方便,因为它以 DC/OS 所需的格式返回密钥。
先决条件:
-
使用以下命令创建公私密钥对并将每个值保存到当前目录中的单独文件中。
dcos security org service-accounts keypair mlb-private-key.pem mlb-public-key.pem
-
输入
ls
查看命令创建的两个新文件。您可能也想自行打开文件并验证其内容。 -
继续进入 下一部分。
创建服务帐户
本部分介绍如何使用 DC/OS Enterprise CLI 或 Web 界面创建服务帐户。
使用 DC/OS Enterprise CLI
先决条件:
- 已安装 DC/OS CLI
- DC/OS Enterprise CLI 0.4.14 或更高版本
- 通过
dcos auth login
以超级用户身份登录。
-
使用以下命令创建一个名为
marathon-lb-sa
并包含您刚刚生成的公钥的新服务帐户。dcos security org service-accounts create -p mlb-public-key.pem -d "Marathon-LB service account" marathon-lb-sa
-
使用以下命令验证您的新服务帐户。
dcos security org service-accounts show marathon-lb-sa
-
继续 创建服务帐户密钥。
使用 Web 界面
-
在 DC/OS Web 界面,导航至 组织 -> 服务帐户 选项卡。
-
单击 新服务帐户。
-
输入与帐户相关联的描述、服务帐户 ID 和公钥。将相关的公钥文件的内容复制到 公钥 字段。
-
继续 创建服务帐户密钥。
创建服务帐户密钥
本部分介绍如何使用 DC/OS Enterprise CLI 或 Web 界面创建与包含私钥的服务帐户相关联的密钥。
使用 DC/OS Enterprise CLI
先决条件:
- 已安装 DC/OS CLI
- DC/OS Enterprise CLI 0.4.14 或更高版本
- 通过
dcos auth login
以超级用户身份登录。
- 根据您的安全模式,使用以下命令之一在
marathon-lb
路径中创建一个名为service-account-secret
的新密钥(完整的密钥路径是marathon-lb/service-account-secret
。在marathon-lb
路径中定位查找该密钥将确保只有 Marathon-LB 服务才能访问它。密钥将包含私钥、服务帐户名称和其他数据。
严格或宽容:
dcos security secrets create-sa-secret --strict mlb-private-key.pem marathon-lb-sa marathon-lb/service-account-secret
禁用:
dcos security secrets create-sa-secret mlb-private-key.pem marathon-lb-sa marathon-lb/service-account-secret
- 确保已成功创建密钥:
dcos security secrets list /
- 如果您安装了 jq 1.5 或更高版本,您还可以使用以下命令检索密钥,并确保其包含正确的服务帐户 ID 和私钥。
dcos security secrets get /marathon-lb/service-account-secret --json | jq -r .value | jq
- 现在,您已经将私钥存储在密钥存储库中,我们建议从文件系统中删除私钥文件。这将防止不良用户使用私钥来进行 DC/OS 身份认证。
rm -rf mlb-private-key.pem
- 继续 为服务帐户提供权限。
使用 Web 界面
-
以具有
dcos:superuser
权限的用户登录 DC/OS Web 界面。 -
打开 系统 -> 安全 选项卡。
-
单击 新密钥。
-
将
marathon-lb/service-account-secret
输入到 ID 字段中,在marathon-lb
路径中创建一个名为service-account-secret
的新密钥。在marathon-lb
路径中定位查找该密钥将确保只有 Marathon-LB 服务才能访问它。 -
如果您有
strict
或permissive
集群,将以下 JSON 粘贴到 值 字段。
{
"scheme": "RS256",
"uid": "marathon-lb-sa",
"private_key": "<private-key-value>",
"login_endpoint": "https://master.mesos/acs/api/v1/auth/login"
}
如果您有 disabled
集群,将以下 JSON 粘贴到 值 字段。
{
"scheme": "RS256",
"uid": "marathon-lb-sa",
"private_key": "<private-key-value>",
"login_endpoint": "http://master.mesos/acs/api/v1/auth/login"
}
-
用该标签更换
<private-key-value>
使用在 创建密钥对 中创建的私钥值。 -
单击 创建。您的密钥已经存储!
提示: 确保将密钥路径复制到文本编辑器中。后面您将需要该信息。
- 继续进入 下一节。
为服务帐户配置权限
使用以下命令,您可以快速为 Marathon-LB 服务帐户配置所需权限。这些命令可从集群外部执行。
先决条件
- 已安装 DC/OS CLI
- 作为超级用户通过
dcos auth login
登录
所有 CLI 命令也可通过 [IAM API] 执行(/1.10/security/ent/iam-api/)。
-
使用以下命令将权限和允许的操作授予服务帐户。
dcos security org users grant marathon-lb-sa dcos:service:marathon:marathon:services:/ read --description "Allows access to any service launched by the native Marathon instance" dcos security org users grant marathon-lb-sa dcos:service:marathon:marathon:admin:events read --description "Allows access to Marathon events"
-
继续进入 下一部分。
创建 config.json 文件
config.json
文件必要的内容将根据您的 安全模式而有所不同。
严格和宽容模式 config.json
如果您的密钥叫做 marathon-lb/service-account-secret
,您可以将以下 JSON 复制并粘贴到新文件中,并以名称 config.json
保存。否则,根据需要更改名称 marathon-lb/service-account-secret
。
{
"marathon-lb": {
"secret_name": "marathon-lb/service-account-secret",
"marathon-uri": "https://marathon.mesos:8443"
}
}
继续进入 Install Marathon-LB。
禁用模式 config.json
如果您的密钥叫做 marathon-lb/service-account-secret
,您可以将以下 JSON 复制并粘贴到新文件中,并以名称 config.json
保存。否则,根据需要更改名称 marathon-lb/service-account-secret
。
{
"marathon-lb": {
"secret_name": "marathon-lb/service-account-secret"
}
}
继续进入 下一部分。
安装 Marathon-LB
要安装服务,请使用以下命令。
dcos package install --options=config.json marathon-lb
您还可以把 config.json
提供给其他人,用于安装 Marathon-LB。请参阅 Marathon-LB 文档 了解更多信息。