声明规则语言 RegExReplace 具有多个匹配项

声明规则语言 RegExReplace 具有多个匹配项

背景:我正在尝试通过 ADFS 在本地 AD 和 AWS 之间设置单点登录。我无法访问我们的 ADFS 实例,而且我对 ADFS 确实不太了解,所以我只能猜测解决方案。幸运的是,我认为我已经接近目标了,只需解决一个声明规则转换问题,然后我相信一切都会正常进行。

问题:我遇到的问题是,我需要使用声明规则语言(我对此也没有太多经验)将 AD 组转换为 AWS 角色,但我提出的规则无法正常工作。

我尝试过的:我已经让 AD 组填充临时/变量类型,并传递到管道中的下一步,即颁发令牌。我需要解析的 AD 组的格式是:AWS#AWS_AccountName#AWS_RoleName#AWS_AccountNumber(即 AWS#Sandbox#SecurityAuditor#1234567890)。

我需要使用此组名中的 AWS_RoleName 和 AWS_AccountNumber 来生成要传递给 AWS 的 arn。我尝试使用 RegExReplace 通过以下规则执行此操作: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)#([-_a-z0-9]+)#([-_a-z0-9]+)#([-a-z0-9]+)”,“arn:aws:iam:$4:saml-provider/ADFS,arn:aws:iam:$4:role/AWSReservedSSO$3))

我的想法是使用 $ 来填写获取访问权限所需的 AWS 角色名。但是我认为这行不通,因为我刚刚读到 RegExReplace 用第三个参数生成的字符串替换源字符串中的所有 RegEx 匹配项。

有人能指出这个索赔规则的缺陷吗?或者可以制定更好的规则来获得期望的结果吗?

先感谢您

答案1

好吧,出于某种原因,我的 $index 构造不起作用。当我在正则表达式中用命名变量替换它们时,它开始正常工作。所以我更新后的声明规则如下所示:

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}))

相关内容