开发者社区 问答 正文

如何实现多个keytab用户同时生效呢?

    Flink1.9环境下,搭建Flink on yarn平台,用户之间实现租户/资源隔离,在kerberos环境下运行Flink perjob模式,需要在Flink-conf.yaml中添加:         security.kerberos.login.use-ticket-cache: true         security.kerberos.login.keytab: /home/flink/p_zhangjunjie.keytab         security.kerberos.login.principal: p_zhangjunjie@LOCAL.COM     但是如果多个用户使用Flink环境资源,比如说除了p_zhangjunjie,还是p_wanglin,然后我在Flink-conf.yaml中添加:         security.kerberos.login.use-ticket-cache: true         security.kerberos.login.keytab: /home/flink/p_zhangjunjie.keytab         security.kerberos.login.principal: p_zhangjunjie@LOCAL.COM

        security.kerberos.login.use-ticket-cache: true         security.kerberos.login.keytab: /home/flink/p_wanglin.keytab         security.kerberos.login.principal: p_wanglin@LOCAL.COM     但是只有最下面的一个(比如p_wanglin)生效。使用p_zhangjunjie就报错:那如何实现多个keytab用户同时生效呢?

谢谢!麻烦大家帮忙解决一下了。哪怕提供个思路都可以。

*来自志愿者整理的flink邮件归档

展开
收起
游客nnqbtnagn7h6s 2021-12-06 20:11:17 632 分享 版权
阿里云 AI 助理回答

在Flink 1.9环境下,要实现多用户(租户)在Kerberos安全认证下共享Flink on YARN平台并保持资源隔离,同时让每个用户的keytab文件都能生效,直接在flink-conf.yaml中静态配置多个用户的kerberos凭证是不可行的,因为这些配置项是全局性的,只能加载最后一个配置的用户凭证。为了解决这个问题,可以采取以下策略:

解决方案

动态配置Kerberos凭证

  1. 利用YARN的Container执行环境

    • 在提交Flink Per-Job任务时,通过YARN的ApplicationMaster容器启动脚本动态设置每个Job的Kerberos凭证。这意味着你需要为每个用户或job创建一个特定的启动脚本,该脚本在启动Flink作业前设置正确的security.kerberos.login.keytabsecurity.kerberos.login.principal环境变量。
  2. 自定义Flink客户端提交脚本

    • 编写一个客户端脚本,根据传入的不同用户参数动态修改或生成包含正确Kerberos配置的临时flink-conf.yaml文件,然后使用这个临时配置文件提交Flink作业。
  3. 使用Hadoop Secure Client:

    • 利用Hadoop的安全客户端特性,可以在提交作业时通过命令行参数或者Java系统属性传递每个用户的keytab路径和principal。例如,在提交Flink作业时,可以通过-Djava.security.krb5.conf=<path_to_krb5_conf>-Djava.security.auth.login.config=<path_to_jaas_config>以及相应的keytab路径来指定用户的Kerberos身份。
  4. 基于角色的访问控制(RBAC)与Kerberos委托:

    • 考虑到长期管理和扩展性,可以探索结合Kerberos委托票据和Flink的RBAC功能。虽然Flink 1.9原生支持有限,但可以通过定制化改造或等待后续版本支持更完善的RBAC机制,使得不同用户能以自己的凭证登录并被分配到合适的权限和资源。

实施步骤示例

假设选择自定义Flink客户端提交脚本方法:

  1. 编写脚本:创建一个脚本,接收用户标识作为参数,根据不同的用户生成或修改临时的flink-conf.yaml文件,确保其中包含正确的Kerberos配置信息。

  2. 调用Flink提交命令:在脚本中,使用生成的临时配置文件路径调用flink run命令提交作业。

  3. 清理临时文件:作业提交后,脚本应负责清理临时生成的配置文件,以避免冲突和泄露敏感信息。

注意事项

  • 安全性:处理keytab文件时务必注意安全,限制访问权限,并确保传输过程中的安全性。
  • 资源隔离:在YARN上通过队列或其他资源管理手段确保不同用户/租户之间的资源隔离。
  • 测试验证:实施上述方案后,需全面测试各种场景,确保所有用户均能成功认证并运行作业。

综上所述,通过动态配置和自定义脚本的方法,可以有效解决多用户环境下Kerberos凭证的配置问题,实现资源共享的同时保证了安全性与隔离性。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答