【问题标题】:How to load sensitive value to processor dynamically from specified parameter in NiFi如何从 NiFi 中的指定参数动态加载敏感值到处理器
【发布时间】:2020-11-24 06:32:24
【问题描述】:

我有一个数据流,其中数据(下面的示例)从 azure 事件中心获取并根据destination_type 发送到其他目的地。例如 s3

示例:

{
    "client_name": "foo",
    "destination_type": "s3",
    "data": {
        "key1": "foo-value1",
        "key2": "foo-value2",
        "key3": "foo-value3"
    }
}
{
    "client_name": "bar",
    "destination_type": "s3",
    "data": {
        "key1": "bar-value1",
        "key2": "bar-value2",
        "key3": "bar-value3"
    }
}

我可以使用 EvaluateJsonPath 获取此 client_namedestination_type 并将其设为属性

现在基于 client_namedestination_type,我必须动态配置处理器属性

我打算将凭据存储在具有敏感值和格式的参数中

CREDS_<client_name>_S3_ACCESSKEY = <Access Key ID>
CREDS_<client_name>_S3_SECRETACCESSKEY = <Secret Access Key>

例如。对于 PutS3Object - BucketAccess Key ID & Secret Access Key 需要根据 client_name 加载

#{CREDS_${client_name}_S3_ACCESSKEY}
#{CREDS_${client_name}_S3_SECRETACCESSKEY}

但这些似乎行不通,任何人都可以提出任何替代方法来动态加载敏感值

【问题讨论】:

    标签: amazon-s3 apache-nifi spring-expression-language


    【解决方案1】:

    参数是提前解析的,所以在执行过程中不能使用变量来调整参数名称。

    此外,文档建议 PutS3Object 不支持参数,仅支持变量注册表 (https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-aws-nar/1.12.1/org.apache.nifi.processors.aws.s3.PutS3Object/index.html)。

    支持参数。

    所以你现在尝试做的事情是不可能的。

    相反,您可以为每个客户端创建一个 PutS3Object,其 Key 在敏感字段中,然后在 client_name 属性上使用 RouteOnAttribute 以转到正确的处理器。不理想,但它会是最简单的构建流程。

    【讨论】:

    • 所有属性都支持参数,不像表达式语言你必须定义它可以解析哪种类型的变量,参数默认内置在框架中
    • 是的,目前还不确定如何处理。不过谢谢你。另外,我检查了 StreamSets Data Collector,即使它不允许这种方式。似乎它违背了平台的设计和原则。参考:issues.streamsets.com/browse/SDC-7460
    【解决方案2】:

    PutS3Object 中的那些属性支持变量注册表,因此您可以在运行时使用变量注册表更新的组合。(可能会很慢)。

    或者使用 Execute streaming 命令在 S3 Put 运行时传递 AccessKey 和 Secret Key 作为 env 变量。

    有点像这样:

      ExecuteStreamingCommand Procesor
      Command Path: /usr/bin/env
      Command Arguments: AWS_ACCESS_KEY_ID=${AccessKeyId} AWS_SECRET_ACCESS_KEY=${SecretAccessKey} aws s3 cp ${source_key} $(target_key)
    

    第二个是hack,但它有效:)

    【讨论】:

    • 嘿,我尝试了变量注册表/参数,但很难使用它。 .. #{CREDS_${client_name}_S3_ACCESSKEY}
    • 第二个选项呢?
    • 不想将敏感数据存储为属性,想以任何骇人听闻的方式避免它......不过,谢谢。 :)
    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多