次のような XACML リクエストがあります (pseudo-xaml):
<Request>
<Attributes Category="resource">
<Attribute AttributeId="product">
<AttributeValue>A</AttributeValue>
</Attribute>
<Attribute AttributeId="market">
<AttributeValue>M2</AttributeValue>
<AttributeValue>M3</AttributeValue>
</Attribute>
<Attribute AttributeId="slice">
<AttributeValue>fus</AttributeValue>
<AttributeValue>do</AttributeValue>
<AttributeValue>rah</AttributeValue>
</Attribute>
</Attributes>
<Attributes Category="subject">
<Attribute AttributeId="product-market-slice-access">
<AttributeValue>A:::M2:::fus</AttributeValue>
<AttributeValue>A:::M2:::do</AttributeValue>
<AttributeValue>A:::M2:::rah</AttributeValue>
<AttributeValue>A:::M3:::fus</AttributeValue>
<AttributeValue>A:::M3:::do</AttributeValue>
<!--<AttributeValue>A:::M3:::rah</AttributeValue>--> <!-- Missing attribute, permission denied! -->
</Attribute>
</Attributes>
</Request>
上記のリクエストでアクセスを拒否し、サブジェクトに欠落している属性 (コメントアウト) が指定されている場合はアクセスを許可するポリシーを作成したいと考えています。
これを XACML/ALFA ポリシーで表現する方法はありますか?
XACML にバッグを「結合」できる関数 (sql-join を考えてください) があれば、それは役に立ちます。そうすれば、関数「AnyOfAll」と「String-Equal」の組み合わせを使用できます。
必要な関数の疑似 xml:
<WantedFunction>
<Input>
<Separator>:::</Separator>
<Bag>
<AttributeValue>A</AttributeValue>
<AttributeValue>B</AttributeValue>
</Bag>
<Bag>
<AttributeValue>M2</AttributeValue>
<AttributeValue>M3</AttributeValue>
</Bag>
<Bag>
<AttributeValue>fus</AttributeValue>
<AttributeValue>do</AttributeValue>
<AttributeValue>rah</AttributeValue>
</Bag>
</Input>
<Output>
<Bag>
<AttributeValue>A:::M2:::fus</AttributeValue>
<AttributeValue>A:::M2:::do</AttributeValue>
<AttributeValue>A:::M2:::rah</AttributeValue>
<AttributeValue>A:::M3:::fus</AttributeValue>
<AttributeValue>A:::M3:::do</AttributeValue>
<AttributeValue>A:::M3:::rah</AttributeValue>
<AttributeValue>B:::M2:::fus</AttributeValue>
<AttributeValue>B:::M2:::do</AttributeValue>
<AttributeValue>B:::M2:::rah</AttributeValue>
<AttributeValue>B:::M3:::fus</AttributeValue>
<AttributeValue>B:::M3:::do</AttributeValue>
<AttributeValue>B:::M3:::rah</AttributeValue>
</Bag>
</Output>
</WantedFunction>