【问题标题】:kerberos authentication in lambda functionlambda 函数中的 kerberos 身份验证
【发布时间】:2021-03-26 04:01:25
【问题描述】:

我现在有一个 aws lambda 函数(nodejs),可以将一些数据写入测试 kafka 集群。那个在生产中使用的 kerberos 进行身份验证所以我想知道是否有一种方法可以设置我的 lambda 函数来使用 kerberos 进行身份验证。我无法在网上找到很多关于此的内容...

【问题讨论】:

  • 您找到解决方案了吗?

标签: node.js amazon-web-services aws-lambda


【解决方案1】:

有两种方法可以解决这个问题。

调用 CLI 实用程序

这要求您在部署包中或通过层提供krb5-workstation 及其依赖项libkadm5 的内容。

  1. Lambda execution environment's AMI 启动 EC2 实例
  2. 更新所有包:sudo yum update
  3. 安装 MIT Kerberos 实用程序:sudo yum install krb5-workstation
  4. 制作Layer skeleton:mkdir bin lib
  5. 填充二进制文件:rpm -ql krb5-workstation | grep bin | xargs -I %% cp -a %% bin
  6. 填充他们的库:rpm -ql libkadm5 | xargs -I %% cp -a %% lib
  7. 准备图层:zip -r9 krb5-workstation-layer.zip bin lib
  8. 创建层并从您的 Lambda 函数中引用它。
  9. 从您的函数内部调用(例如)/opt/bin/kinit

原生实现

事实证明,如果您的代码调用 gss_acquire_cred(大多数代码通常通过绑定和抽象层调用),则您不需要 CLI 实用程序。

  1. 通过将客户端密钥表文件与部署包捆绑在一起或(可能更好)从 S3 + KMS 获取它,向您的函数提供客户端密钥表文件。
  2. KRB5_CLIENT_KTNAME 环境变量设置为keytab 文件的位置。

请求的附录

在任何一种情况下,如果您发现需要指定额外的 Kerberos 配置,请参阅krb5.conf 文档了解详细信息。如果/etc 不在表中,则“可以在 [the] KRB5_CONFIG [环境变量] 中指定多个以冒号分隔的文件名;将读取所有存在的文件。”

【讨论】:

  • 这很有帮助(尤其是 KRB5_CLIENT_KTNAME envvar),但是如何为 AWS Lambda 环境创建客户端 keytab?
  • 我必须做同样的事情,这个回复很有帮助。我还引用了代码@github.com/zyborg/Zyborg.AWS.Lambda.Kerberos,因为它看起来像是一个有效的实现。我遇到的其他障碍是 1)我无法从 /var/task 运行 kinit。我需要将其复制到 /tmp 并使用执行权限对其进行 chmod 2)我还必须为我的进程设置 KRB5_CONFIG 环境变量作为调用 kinit 的进程,以便它知道从哪里读取我的 kerberos 设置。
【解决方案2】:

令人惊讶的是,亚马逊似乎没有解决这个问题。 我的场景仅限于对数据库服务器使用 Kerberos 身份验证。 由于没有办法在启动时在 Lambda 实例上运行 kinit,这似乎是不可能的。 貌似可以在 Azure Functions 中实现。

【讨论】:

    【解决方案3】:

    neirbowj 所说的将让你大部分时间(而且我不知道这是否是我的特殊用例,但它让我越过了终点线):

    你需要一个像这样的环境变量:KRB5CCNAME=FILE:/tmp/tgt。请参阅:https://blog.tomecek.net/post/kerberos-in-a-container/ 以获得比我更好的解释。

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 2017-03-17
      • 2022-06-13
      • 1970-01-01
      • 2020-11-11
      相关资源
      最近更新 更多