使用多重匹配 RegEx 转换声明

Transforming a claim using multiple match RegEx

我正在按照此 article 将我们的本地 AD 与 AWS 连接起来。我们的 AD 组将被翻译成 AWS 组,在 AD 中以 AWS#Account#Role#AccountNumber 格式编写。在 ADFS 中,我正在编写一个自定义声明,该声明将采用该特定声明并将其转换为需要在 AD 组名称中定义的角色和帐号的 arn。我希望使用匹配类型为 ((?i)([-_a-z0-9]+) 的 RegExReplace,它应该可以准确地从传入令牌中返回多个匹配项。

我的问题是,有没有一种方法可以使用那里生成的多个匹配项生成一个字符串 ("arn:aws:iam::saml-provider/ADFS,arn:aws:iam::role/"),利用多个匹配项生成我需要的 AWS 格式?

我通常不使用 ADFS,但这是我的任务,非常感谢任何帮助。

在我的角色规则中(在收集 AD 组规则后执行),我将声明规则语言转换更新为:

c:[Type=="http://temp/variable", 
Value=~"(?i)(^AWS)#([-_a-z0-9]+)#([-_a-z0-9]+)#([-_a-z0-9]+)"] => 
issue(Type="https://aws.amazon.com/SAML/Attributes/Role", 
Value=RegExReplace(c.Value, 
                   "(?i)(^AWS)#(?<accountname>[-_a-z0-9]+)#(?<role>[-_a-z0-9]+)#(?<accountnumber>[-a-z0-9]+)", 
                   "arn:aws:iam:${accountnumber}:saml-provider/ADFS,arn:aws:iam:${accountnumber}:role/${role}))

这基本上是说,对于添加到临时变量并匹配此正则表达式的任何 AD 组,发出此类型的声明。在 RegExReplace 中,我将变量名称分配给分组匹配项,然后使用 ${} 语法访问这些匹配项。这成功了,现在我看到了 arn 格式的角色列表。