DC/OS Apache Cassandra 安全
-
DC/OS Apache Cassandra 服务允许您创建服务帐户以为 Apache Cassandra 配置访问权限。服务允许您创建和分配访问所需的权限。
-
DC/OS Apache Cassandra 服务支持 Apache Cassandra的本地传输加密机制。该服务提供自动化和编排,以简化这些重要功能的使用。目前,不支持 Apache Cassandra 的身份验证和授权功能。
配置服务帐户
本部分介绍如何为 Apache Cassandra 配置 DC/OS 访问权限。根据您的 安全模式, Apache Cassandra 可能需要 服务身份认证 以访问 DC/OS。
安全模式 | 服务帐户 |
---|---|
已禁用 | 不可用 |
宽容 | 可选 |
严格 | 必填 |
如果您在宽容模式下安装服务且未指定服务帐户,Metronome 和 Marathon 将按照此服务的请求是由具有 超级用户权限的帐户做出的那样行事。
前提条件:
- 已安装 DC/OS CLI 并以超级用户身份登录。
- 已安装 Enterprise DC/OS CLI 0.4.14 或更高版本。
- 如果您的 安全模式 是
permissive
或strict
,您必须 获取 root 证书,才能发出本部分中的 curl 命令。
创建密钥对
在此步骤中,系统使用 Enterprise DC/OS CLI 创建 2048 位 RSA 公私密钥对。
创建公私密钥对并将每个值保存到当前目录中的单独文件中。
dcos security org service-accounts keypair <private-key>.pem <public-key>.pem
注意: 您可以使用 DC/OS 密钥存储库 以确保密钥对的安全。
创建服务帐户
从终端提示中创建一个新的服务帐户(<service-account-id>
) containing the public key (<your-public-key>.pem
)。
dcos security org service-accounts create -p <your-public-key>.pem -d "Cassandra <service-account-id>
注意: 您可以使用以下命令验证您的新服务帐户。
dcos security org service-accounts show <service-account-id>
创建密钥
创建密钥 (cassandra//<secret-name>
) with your service account (<service-account-id>
) and private key specified (<private-key>.pem
)。
如果您在与服务名称匹配的路径中存储密钥(例如,您的服务名称和密钥路径都是 cassandra
),则只有名为 cassandra
的服务可以访问它。
宽容 (Permissive)
dcos security secrets create-sa-secret <private-key>.pem <service-account-id> cassandra/<secret-name>
严格 (Strict)
dcos security secrets create-sa-secret --strict <private-key>.pem <service-account-id> cassandra/<secret-name>
注意: 您可以使用以下命令列出密钥:
dcos security secrets list /
创建和分配权限
使用以下 curl
命令快速为 Apache Cassandra 服务配置所需权限。
- 创建权限。
宽容 (Permissive)
运行这些命令,并且指定您的服务帐户名称 (<service-account-id>
) 。
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:task:user:nobody \
-d '{"description":"Allows Linux user nobody to execute tasks"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:framework:role:cassandra-role \
-d '{"description":"Controls the ability of cassandra-role to register as a framework with the Mesos master"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:role:cassandra-role \
-d '{"description":"Controls the ability of cassandra-role to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:role:cassandra-role \
-d '{"description":"Controls the ability of cassandra-role to access volumes"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to access volumes"}' \
-H 'Content-Type: application/json'
严格 (Strict)
运行这些命令,并且指定您的服务帐户名称 (<service-account-id>
) 。
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:framework:role:cassandra-role \
-d '{"description":"Controls the ability of cassandra-role to register as a framework with the Mesos master"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:role:cassandra-role \
-d '{"description":"Controls the ability of cassandra-role to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:role:cassandra-role \
-d '{"description":"Controls the ability of cassandra-role to access volumes"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to access volumes"}' \
-H 'Content-Type: application/json'
- 使用以下命令将权限和允许的操作授予服务帐户。
运行这些命令,并且指定您的服务帐户名称 (<service-account-id>
) 。
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:framework:role:cassandra-role/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:role:cassandra-role/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:role:cassandra-role/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:task:user:nobody/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:principal:<service-account-id>/users/<service-account-id>/delete
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:principal:<service-account-id>/users/<service-account-id>/delete
传输加密
启用传输加密后,DC/OS Apache Cassandra 将使用正确配置自动部署所有节点,以通过 SSL 加密通信。节点将使用 SSL 在它们之间安全地进行通信。
该服务使用 DC/OS CA 生成用于保护服务的 SSL 工件。任何信任 DC/OS CA 的客户端都会认为服务证书有效。
先决条件
- DC/OS 服务帐户密钥存储在 DC/OS 密钥存储库中。
- DC/OS 超级用户权限,用于修改服务帐户的权限。
配置传输加密
设置服务帐户
授予 服务帐户正确的权限。
- 在 DC/OS 1.10,所需权限为
dcos:superuser full
。 - 在 DC/OS 1.11+ 中,所需权限为:
dcos:secrets:default:/<service name>/* full
dcos:secrets:list:default:/<service name> read
dcos:adminrouter:ops:ca:rw full
dcos:adminrouter:ops:ca:ro full
其中 <service name>
是要安装的服务的名称。
安装服务
除了自有选项,安装 DC/OS Apache Cassandra 服务包括以下选项:
{
"service": {
"service_account": "<your service account name>",
"service_account_secret": "<full path of service secret>",
"security": {
"transport_encryption": {
"enabled": true, "allow_plaintext": <true|false default false>
}
}
}
}
客户端传输加密
启用传输加密时,服务客户端需要进行配置以使用 DC/OS CA 捆绑包 以验证它们对服务所进行的连接。请查阅客户端的文档,了解信任 CA 并适当配置您的客户端的信息。