[アップデート] Guardrails for Amazon Bedrock が CloudFormation でもサポートされました

2024.04.28

いわさです。

約 1 か月前に Knowledge bases for Amazon Bedrock や、Agents for Amazon Bedrock が CloudFormation に対応していました。
Bedrock 系の CloudFormation 対応はこれまでなかったので気になっていた方も多かったのではないかと思います。

そして先日、Guardrails for Amazon Bedrock が GA となり早速青柳さんがブログを執筆されています。

実は GA の数日後には、早速 Guardrails for Amazon Bedrock も CloudFormation に対応していました。早いですね。
本日は CloudFormaiton 経由でガードレールを構築し、プロパティの設定方法やバージョン管理方法を確認してみましたので紹介します。

新リソースタイプ:AWS::Bedrock::Guardrail

今回のアップデートで、次のリソースタイプが新しく追加されており、本日時点ですでに利用可能でした。

ドキュメント上は必須プロパティとしては以下のみなのですが、これに加えていずれかのポリシーをひとつ以上構成する必要があります。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeGuardrail:
    Type: AWS::Bedrock::Guardrail
    Properties:
      Name: hoge0428guardrail2
      BlockedInputMessaging: hoge prompt message blocked
      BlockedOutputsMessaging: hoge response message blocked

コンソールでいうと以下のステップ2からステップ5のオプションですね。

ポリシーを設定しなかった場合は次のエラーメッセージが出力されました。

Guardrail must have at least one policy.

ちなみにステップ6もコンソール上はオプションですが、コンソールで省略した場合は「Sorry, the model cannot answer this question」という文字列が設定されます。

4つのポリシーをそれぞれ設定してみたので紹介します。

コンテンツフィルター

ContentPolicyConfigを構成することでコンソール上のコンテンツフィルターを設定することが出来ます。

ユースケースタイプと設定可能な強度は決まっているので以下を確認しましょう。

AWS::Bedrock::Guardrail ContentFilterConfig - AWS CloudFormation

適当に強度を設定してみました。
同じフィルターにプロンプトとレスポンスの強度を設定する感じなので、コンソールで設定する場合とはちょっとなんというか目線が違っており、一瞬混乱しました。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeGuardrail:
    Type: AWS::Bedrock::Guardrail
    Properties:
      Name: hoge0428guardrail2
      BlockedInputMessaging: hoge prompt message blocked
      BlockedOutputsMessaging: hoge response message blocked
      ContentPolicyConfig: 
        FiltersConfig: 
          - Type: SEXUAL
            InputStrength: LOW
            OutputStrength: MEDIUM
          - Type: HATE
            InputStrength: HIGH
            OutputStrength: NONE
          - Type: VIOLENCE
            InputStrength: NONE
            OutputStrength: HIGH
          - Type: INSULTS
            InputStrength: MEDIUM
            OutputStrength: LOW
          - Type: MISCONDUCT
            InputStrength: LOW
            OutputStrength: MEDIUM
          - Type: PROMPT_ATTACK
            InputStrength: MEDIUM
            OutputStrength: NONE

上記をデプロイすると次のようなガードレールが作成しました。
バージョンは作成されておらず、ドラフトバージョンのみが存在していますね。
デプロイバージョンについては後述します。

ドラフトバージョンの設定値を確認してみるとコンテンツフィルターやメッセージが次のように設定されていました。

拒否トピック

続いて、拒否トピックを設定してみます。
拒否トピックはTopicPolicyConfigで設定することが出来ます。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeGuardrail:
    Type: AWS::Bedrock::Guardrail
    Properties:
      Name: hoge0428guardrail3
      BlockedInputMessaging: hoge prompt message blocked
      BlockedOutputsMessaging: hoge response message blocked
      TopicPolicyConfig: 
        TopicsConfig: 
          - Type: DENY
            Name: hoge0428topic1
            Definition: hoge topic 1
            Examples: 
              - aaa
              - bbb
          - Type: DENY
            Name: hoge0428topic2
            Definition: hoge topic 2
            Examples: 
              - ccc
              - ddd

上記をデプロイしたところ次のようにガードレールが設定されました。
まぁ期待どおりですね!

ワードフィルター

また、WordPolicyConfigでワードフィルターを設定することが出来ます。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeGuardrail:
    Type: AWS::Bedrock::Guardrail
    Properties:
      Name: hoge0428guardrail2
      BlockedInputMessaging: hoge prompt message blocked
      BlockedOutputsMessaging: hoge response message blocked
      WordPolicyConfig: 
        WordsConfig: 
          - Text: hoge1
          - Text: fuga1
          - Text: puyo1
        ManagedWordListsConfig: 
          - Type: PROFANITY

機密情報フィルター

最後に、SensitiveInformationPolicyConfigにてコンソール上で言う「Sensitive Information filters」を構成することが出来ます。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeGuardrail:
    Type: AWS::Bedrock::Guardrail
    Properties:
      Name: hoge0428guardrail4
      BlockedInputMessaging: hoge prompt message blocked
      BlockedOutputsMessaging: hoge response message blocked
      SensitiveInformationPolicyConfig: 
        PiiEntitiesConfig: 
          - Type: PHONE
            Action: BLOCK
          - Type: PASSWORD
            Action: ANONYMIZE
        RegexesConfig: 
          - Name: String
            Pattern: aaa
            Action: BLOCK

ドラフトバージョンのみ管理できるようだ

AWS::Bedrock::Guardrailリソースタイプは GetAtt を使ってバージョン情報を取得することが出来ます。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Resources: 
  HogeGuardrail:
    Type: AWS::Bedrock::Guardrail
    Properties:
      Name: hoge0428guardrail4
      BlockedInputMessaging: hoge prompt message blocked
      BlockedOutputsMessaging: hoge response message blocked
      SensitiveInformationPolicyConfig: 
        PiiEntitiesConfig: 
          - Type: PHONE
            Action: BLOCK
          - Type: PASSWORD
            Action: BLOCK
        RegexesConfig: 
          - Name: String
            Pattern: aaa
            Action: BLOCK
Outputs:
  Version:
    Value: !GetAtt HogeGuardrail.Version

ただ、こちらどうやら本日時点ではDRAFTのみ取得されるようです。
既存バージョンの存在有無に関わらずリソースの更新を試してみたところ常にDRAFTのみが取得されました。

% rain deploy template.yaml hoge0428guardrail4 --region us-east-1
CloudFormation will make the following changes:
Stack hoge0428guardrail4:
Do you wish to continue? (Y/n) 
Deploying template 'template.yaml' as stack 'hoge0428guardrail4' in us-east-1.
Stack hoge0428guardrail4: UPDATE_COMPLETE
  Outputs:
    Version: DRAFT
Successfully updated hoge0428guardrail4

本日時点ではAWS::Bedrock::Guardrailリソースタイプにバージョンや ARN を指定するプロパティが存在していません。
AWS CLI でいう create-guardrail-version 相当の機能がまだ使えないようですね。おそらく今後のアップデートで追加のリソースタイプが追加されるか、バージョンや ARN が指定できるようになるのではないかと思っています。

さいごに

本日は Guardrails for Amazon Bedrock が CloudFormation でもサポートされたので使ってみました。
今回は対応がかなり早かったですね。
サポートされたリソースタイプはどれも東京リージョン対応はまだですが、色々と CloudFormation でサポートされるリソースも増えてきたので、Bedrock + IaC 周りのナレッジも今後出てきそうですね。