取引先のクラウドサービスから毎月届く英文のSOC 2報告書を読み取り、例外事項と利用者側の統制(CUEC)を委託先管理の台帳に載せて、自社で手当てが要るものを洗い出す
取引先のクラウドサービスから届く英文のSOC 2 Type 2 報告書を読み取り、テストで例外が出た統制と、利用者側で実施すべき統制(CUEC)を取り出して委託先管理の台帳に載せます。自社で手当てが要るものを一覧にします。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- EC/IT・SaaS/保険/金融
- 対象部門
- 情報システム/法務
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 委託先のポータルから報告書をダウンロードし、保管フォルダに入れる
- 報告書を開き、対象期間、監査人の意見の種類、除外された再委託先(carve-out)を確かめる
- 統制のテストの結果の表を1ページずつめくり、「No exceptions noted」でない行を探して台帳に書き写す
- CUEC の一覧を台帳に書き写し、自社のどの統制が対応するかを考える
- 例外事項と CUEC のうち、自社で手当てが要りそうなものを、統制の担当部署へ連絡する
- 人委託先のポータルから報告書をダウンロードし、NDAの条件を確かめて受付フォルダ(Amazon S3)に入れる
- 自動保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 自動AWS Textract が章立て(LAYOUT)、表(TABLES)、決まった問い合わせ(QUERIES)で報告書を読み取る
- 自動Python が章の見出しから、意見・システムの記述・テストの結果・CUEC の範囲を切り出す
- 自動テストの結果の表から、結果の列が「例外なし」の決まり文句でない行を取り出す
- 自動Claude API が、例外事項を「何が・何件で・委託先の回答は何か」に分け、CUEC を自社の統制の一覧に対応づける
- 自動前回の報告書の台帳の記録と比べ、新しく出た例外と、前回からの対象期間の空白を出す
- 人セキュリティの担当が、例外事項と CUEC の対応づけを原本のページで確かめる
- 人CUEC の対応先の統制の担当部署が、自社で実施しているかを答える
- 人担当と法務が、手当ての要否と委託先への質問を決め、台帳を確定する
各工程の詳しい説明を読む
- 委託先のポータルから報告書をダウンロードし、保管フォルダに入れる
- 報告書を開き、対象期間、監査人の意見の種類、除外された再委託先(carve-out)を確かめる
- 統制のテストの結果の表を1ページずつめくり、「No exceptions noted」でない行を探して台帳に書き写す
- CUEC の一覧を台帳に書き写し、自社のどの統制が対応するかを考える
- 例外事項と CUEC のうち、自社で手当てが要りそうなものを、統制の担当部署へ連絡する
(a)例外事項を見落とす。 3番目で読む表は、統制が100を超えることも珍しくなく、ほとんどの行は「No exceptions noted」です。 同じ文言が何十ページも続く中で、1行だけ違う文言が出てきます。見落とすのは、たいていページの境目で表が続いている行です。
(b)CUEC が書き写されるだけで終わる。 4番目で、CUEC を自社の統制に対応づけるには、自社の統制の一覧を知っている必要があります。セキュリティの担当は報告書は読めても、人事の退職手続きや経理の権限の見直しがどう回っているかは知りません。 結果として、CUEC は台帳に書き写されたまま、誰にも確かめられません。
(c)読み方が担当によって違う。 意見に限定が付いているか、再委託先が除外されているか、対象期間が前回の報告書とつながっているか。ベテランの担当は最初の数ページで確かめますが、新しい担当は表から読み始めます。
(d)報告書が届くたびに2時間かかる。 忙しい月は、届いた報告書が保管フォルダに入ったまま、台帳の受領日だけが埋まります。
- 【人】 委託先のポータルから報告書をダウンロードし、NDAの条件を確かめて受付フォルダ(Amazon S3)に入れる
- 【自動】 保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 【自動】 AWS Textract が章立て(LAYOUT)、表(TABLES)、決まった問い合わせ(QUERIES)で報告書を読み取る
- 【自動】 Python が章の見出しから、意見・システムの記述・テストの結果・CUEC の範囲を切り出す
- 【自動】 テストの結果の表から、結果の列が「例外なし」の決まり文句でない行を取り出す
- 【自動】 Claude API が、例外事項を「何が・何件で・委託先の回答は何か」に分け、CUEC を自社の統制の一覧に対応づける
- 【自動】 前回の報告書の台帳の記録と比べ、新しく出た例外と、前回からの対象期間の空白を出す
- 【人】 セキュリティの担当が、例外事項と CUEC の対応づけを原本のページで確かめる
- 【人】 CUEC の対応先の統制の担当部署が、自社で実施しているかを答える
- 【人】 担当と法務が、手当ての要否と委託先への質問を決め、台帳を確定する
5番目を機械の規則で行うのが、この設計の分かれ目です。 例外を「探す」ことはAIに任せません。表の結果の列の文言が、決まり文句の一覧に当たるかどうかで機械的に分けます。 当たらない行はすべて人の目に回るので、AIの読み落としで例外が消えることがありません。
9番目を担当部署に返すのは、統制が実際に回っているかを担当部署しか知らないからです。
02今回想定するシステム構成
英文のSOC 2 Type 2 報告書(PDF。委託先のポータルからダウンロード) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:LAYOUT / TABLES / QUERIES) │ 章の見出し、表のセル(行・列・列見出し)、問い合わせの答え、信頼度 ▼【完了の通知】Amazon SNS AWS Lambda ── GetDocumentAnalysis で結果を集める ▼ Python ── 章の切り出し、結果の列の特定、例外の行の取り出し、前回との比較 ▼ Claude API ── 例外事項の分解、CUEC と自社の統制の対応づけ ▼ 台帳の案(exceptions / cuecs / report_meta / flags) ▼ 【セキュリティの担当が原本で確認】→【統制の担当部署が回答】→【担当と法務が確定】 ▼ 委託先管理の台帳
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis。LAYOUT、TABLES、QUERIES) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(例外事項の分解、CUEC の対応づけ) | OpenAI API、Gemini API |
| 集計 | Python(章の切り出し、例外の行の取り出し、前回との比較) | AWS Step Functions の中の処理 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(報告書、読み取り結果、台帳の案の版。KMSで暗号化) | ― |
委託先管理の台帳と自社の統制の一覧は、新しく足すものではありません。 最初の準備は、自社の統制の一覧に「CUEC の対応づけに使う短い説明」と「担当部署」の列がそろっているかを確かめることです。
OCRに AWS Textract を選ぶのは、報告書が英文で、章立てと表を同時に読めるからです。 StartDocumentAnalysis は S3 にある PDF などを非同期で解析し、完了を Amazon SNS に通知します。FeatureTypes には TABLES、FORMS、QUERIES、SIGNATURES、LAYOUT を指定でき、この構成では LAYOUT、TABLES、QUERIES の3つを使います。 対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、日本語の報告書は読めません。
非同期の処理では、PDFは500MBと3,000ページまで扱えます。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)への保存を起点にします。 報告書は委託先のポータルから人がダウンロードするので、届く日は決まっていません。1本ずつ、入れたときに動かします。
保存の前に、人がNDAの条件を確かめます。 外部のサービスでの処理を認めない報告書は、受付フォルダに入れず、人が読む流れに回します。この確認を処理の手前に置くのは、入れてしまえば読み取りが始まるからです。
読み取りが終わると、Textract が SNS に完了を通知します。 通知を受けた Lambda が結果を集め、後段の処理に渡します。2段に分けるのは、長い報告書の読み取りに時間がかかるためで、Lambda が完了を待ち続ける形にしません。
加えて、月に1回、台帳の受領の予定を見ます。 前回の報告書の対象期間の終わりから、委託先ごとの発行の間隔を過ぎても次の報告書が無い委託先を一覧にし、ポータルを確かめるよう担当に知らせます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| SOC 2 報告書 | PDF。委託先名、ダウンロードした日、NDAの確認の記録 | 受付フォルダ |
| 読み取り結果 | 章の見出し、表のセル(行・列・列見出し)、問い合わせの答え、信頼度 | AWS Textract |
| 前回の台帳の記録 | 前回の対象期間、例外事項、CUEC と対応づけ、評価 | 委託先管理の台帳 |
| 自社の統制の一覧 | 統制番号、内容、短い説明、担当部署 | 自社の統制の一覧 |
| 決まり文句の一覧 | 「例外なし」を表す文言(No exceptions noted、No deviations noted など) | 自社で用意する一覧 |
質を決めるのは、いちばん下の2つです。 自社の統制の一覧に短い説明が無ければ、CUEC の対応づけは統制の名前だけで行うことになり、「アクセス管理」のような広い名前に何でも寄ってしまいます。 決まり文句の一覧は、監査人ごとの言い回しを集めたもので、運用しながら足していきます。
前回の台帳の記録は、対象期間の空白と、例外の繰り返しを見るために持ちます。 前回が3月末までで今回が7月1日からなら、4月から6月は誰も監査していない期間です。 同じ統制で2回続けて例外が出ていれば、委託先の手当てが効いていないということです。
データの取得方法を決める
読み取りは、StartDocumentAnalysis に S3 の場所と FeatureTypes を渡して始めます。ClientRequestToken に報告書のファイルのハッシュを入れます。 同じトークンなら同じ JobId が返るので、二重に保存されても二重に読み取りません。JobTag に委託先のコードを入れておくと、完了の通知でどの報告書かが分かります。
結果は GetDocumentAnalysis で集めます。 1回に返るブロックは既定で最大1,000件で、続きがあれば NextToken が返ります。150ページの報告書では何十回も呼ぶことになるので、NextToken が無くなるまで繰り返します。 JobId は7日間だけ有効です。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 章の見出し | LAYOUT_SECTION_HEADER のブロック | 意見・システムの記述・テストの結果・CUEC の範囲の切り出し |
| 表のセル | TABLE と CELL のブロック(RowIndex、ColumnIndex) | テストの結果の表の行と列 |
| 列見出し | CELL の EntityTypes が COLUMN_HEADER | 結果の列がどれかの特定 |
| 問い合わせの答え | QUERY と QUERY_RESULT のブロック | 対象期間、監査人の名前、意見の種類 |
| 読み取りの状態 | JobStatus、Warnings | 一部のページの失敗の検知 |
問い合わせ(QUERIES)は、表紙と意見のページに絞ります。 たとえば「What is the period covered by this report?」「What is the name of the service auditor?」です。QueriesConfig では問い合わせごとに対象のページを指定でき、非同期の処理では1ページに30件までです。問い合わせは英語の文書でだけ使えます。
結果の列は、列見出しの文言で決めます。 見出しのセルの文字が「Results」「Test Results」「Results of Tests」のどれかに当たる列を結果の列とし、当たる列が無い表は、人に回します。 列の位置で決めると、監査人ごとに4列の表と5列の表があるため、ずれます。
AIへ渡す前に整形する
- 形式とページ数の確認 … PDFであること、500MBと3,000ページを超えないことを確かめます
- パスワードの確認 … Textract はパスワードで保護されたPDFを扱えません。保護されたものは読み取りに回さず、担当に知らせます
- 章の切り出し …
LAYOUT_SECTION_HEADERの文言から、意見(Independent Service Auditor's Report)、システムの記述、テストの結果、CUEC の範囲を決めます - ページをまたぐ表をつなぐ … 同じ列見出しの表が次のページの先頭に続いていれば、1つの表として扱います
- 決まり文句で行を分ける … 結果の列の文言を小文字にし、空白をそろえてから、決まり文句の一覧と比べます。当たらない行をすべて例外の候補にします
- CUEC の行を集める … CUEC の範囲の表か箇条書き(
LAYOUT_LIST)から、1件ずつの文に分けます - 前回の記録を引く … 委託先のコードで前回の台帳の記録を読み、対象期間と例外事項を並べます
5番目で、例外の候補を広めに取るのが要です。 「No exceptions noted.」に句点があるか、「No exception noted」と単数形か。文言のわずかな違いで「例外なし」から外れた行は、人が見て数秒で片づきます。 逆に、例外を「例外なし」と取り違えるほうは、人の目に二度と戻りません。
4番目のつなぎ方を誤ると、ページの境目の行が二重に数えられるか、見出しの無い表として捨てられます。 第3章の(a)で人が見落としていたのと同じ場所です。同じ列数で、先頭に列見出しが無い表は、前のページの表の続きとして扱います。
AIに処理させる
AIの仕事は2つです。 例外の候補の行を分解することと、CUEC を自社の統制に対応づけることです。例外の候補を選ぶことはさせません。
| させること | 中身 |
|---|---|
| 例外事項の分解 | 統制番号、統制の内容、監査人のテスト、例外の内容(件数・期間を含む)、委託先の回答(Management's Response)に分ける |
| 決まり文句の取り違えの判定 | 候補の行が、言い回しが違うだけの「例外なし」かを判定し、理由を書く |
| CUEC の対応づけ | CUEC 1件ごとに、自社の統制の一覧から対応する統制を最大3つ選び、根拠の語を書く |
| 対応の無い CUEC の印 | 一覧に対応する統制が無いものに no_match を付ける |
| させないこと | 理由 |
|---|---|
| 例外事項が許容できるかの評価 | 取り扱うデータと契約に照らした判断で、担当と法務が行う |
| 意見の種類の判定 | 意見のページを読み取った文字列をそのまま出す。限定かどうかの解釈は人 |
| 自社でその統制が回っているかの判断 | 担当部署にしか分からない |
| 委託先の回答の要約での言い換え | 原文を残す。要約で意味が変わる |
| 対応の無い CUEC への新しい統制の提案 | 自社の統制の設計は別の仕事 |
2行目の「言い回しが違うだけの例外なし」の判定は、人の確認を軽くするためのものです。 AIが「例外なし」と判定しても、行は台帳の案から消さず、benign_wording の印を付けて残します。 人が一覧で確かめて消します。
「委託先の回答を言い換えない」も大事です。 委託先は例外に対して「影響は限定的」「補完する統制がある」と書きます。要約すると、その主張がAIの判断のように見えてしまいます。
指示内容を固定する
あなたは委託先管理の担当として、英文のSOC 2 Type 2 報告書から取り出した行を整理する係です。
渡された行と自社の統制の一覧だけを根拠にしてください。一般的な知識で補わないでください。
【作業1:例外の候補の行】{exception_candidates}
それぞれの行について、次を英文の原文のまま書き出してください。
- control_id / control_description / test_performed / result_text / management_response
- result_text に件数・対象の母集団・期間が書かれていれば、count / population / period に分けて写す
- 言い回しが違うだけで例外が無いと読める場合は benign_wording を true にし、理由を1文で書く
【作業2:CUEC の一覧】{cuecs}
【自社の統制の一覧】{internal_controls}
CUEC 1件ごとに、自社の統制から対応するものを最大3つ選び、
根拠にした語(CUEC の語と自社の統制の説明の語)を evidence に書いてください。
対応するものが無ければ match を no_match にしてください。
【厳守事項】
- 例外が許容できるか、影響が大きいか小さいかを書かないでください。
- management_response を要約・言い換えしないでください。原文をそのまま写してください。
- 件数や期間が書かれていなければ「不明」とし、推測で埋めないでください。
- 自社でその統制が実施されているかを書かないでください。
- 対応の無い CUEC に、新しい統制を提案しないでください。
- benign_wording を true にしても、行を省かないでください。
「行を省かない」を明記しないと、AIは例外なしと判断した行を出力から落とします。 落ちた行は、人が一覧で確かめる機会を失います。省かせずに印を付けさせ、消すのは人です。
「影響が大きいか小さいかを書かない」も外せません。 委託先の回答に「影響は限定的」と書かれていると、AIはそれを根拠に「軽微」と書きたがります。その一語が台帳に残ると、誰も評価していないのに評価済みに見えます。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONを受け取ります。 output_config.format に json_schema を指定すると、スキーマに沿ったJSONが返ります。スキーマは additionalProperties: false で閉じます。
{
"vendor_code": "V-0412",
"report_meta": {
"period_from": "2025-10-01", "period_to": "2026-09-30",
"auditor": "", "opinion_text": "", "carve_out_subservice": ["" ],
"query_confidence": 0
},
"exceptions": [
{ "control_id": "CC6.2", "control_description": "", "test_performed": "",
"result_text": "", "count": "2", "population": "25", "period": "不明",
"management_response": "", "benign_wording": false,
"page": 87, "ocr_confidence": 0 }
],
"cuecs": [
{ "cuec_text": "", "page": 34,
"match": "matched | no_match",
"internal_controls": [ { "id": "IC-HR-07", "evidence": "" } ] }
],
"flags": ["period_gap", "repeat_exception", "no_results_column"]
}
1つ目の理由は、page で原本のページへすぐ戻れることです。 人の確認は、台帳の案の1行と原本のページを並べて見る作業です。ページ番号が無いと、150ページの中を探し直すことになります。
2つ目は、flags を Python が付けることです。 対象期間の空白(period_gap)、前回と同じ統制での例外(repeat_exception)、結果の列が見つからない表(no_results_column)は、前回の記録と表の構造から機械的に決まります。 AIには付けさせません。
3つ目は、opinion_text を原文で持つことです。 意見の種類を「適正」「限定付き」に分けるのは人で、台帳には監査人の文言をそのまま残します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 報告書の受け付け |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | 章立て・表・問い合わせの読み取り |
| Amazon SNS | 完了の通知 | 読み取りの終わりを Lambda に伝える |
| Claude API | Lambda からの呼び出し | 例外事項の分解と CUEC の対応づけ |
| 委託先管理の台帳 | 案の書き出し/確定は人 | 台帳の案を「確認待ち」の状態で載せる |
| 自社の統制の一覧 | 読み取りだけ | CUEC の対応づけの材料 |
台帳には「確認待ち」の状態で載せます。 確定の操作は人だけが行えるようにし、確定していない案が顧客への回答や監査の資料に使われないようにします。 自社の統制の一覧には書き込みません。
人が確認する
この構成の確認は、必須です。 委託先管理の記録は、自社の顧客や監査人に示すものです。
- 報告書の基本を確かめる … 対象期間、監査人、意見の文言を原本の表紙と意見のページで見ます。意見に限定が付いていないかは、ここで人が読みます
- 例外事項を原本で確かめる …
exceptionsの各行をpageで開き、取り出した文言が合っているかを見ます。benign_wordingの行は一覧で確かめて消します - CUEC を担当部署に回す … 対応づけの下書きを、対応先の統制の担当部署に送り、実施しているかを答えてもらいます
- 手当てを決める … 担当と法務が、例外事項と回答の無い CUEC について、委託先への質問、自社の統制の追加、契約の見直しのどれが要るかを決めます
2番目で、件数と母集団を必ず原本で見てください。 「2 of 25」と「2 of 250」では意味が違い、読み取りの1文字の誤りで評価が変わります。
1件あたり30分を目安にします。 例外事項が無い報告書は10分ほどで終わり、例外や回答の無い CUEC が多い報告書は1時間を超えます。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | Textract は扱えない。保護を外してよいかをNDAの条件で確かめ、外せないものは人が読む |
| 日本語など対応外の言語の報告書 | 読み取りに回さず、人が読む流れに回す |
| 結果の列が見つからない表 | no_results_column を付け、その表を人に回す |
| 読み取りが一部のページで失敗 | JobStatus が PARTIAL_SUCCESS か Warnings にページがあれば、そのページを人が読む |
| CUEC の節が無い報告書 | 「CUEC の記載なし」と台帳に書き、委託先に念のため確かめる |
| 対象期間が前回とつながらない | period_gap を付け、ブリッジレター(継続運用の書簡)を委託先に求める |
| 除外された再委託先がある | 再委託先の名前を一覧にし、その再委託先の報告書を集める対象に足すかを人が決める |
| Type 1 の報告書が届いた | 期間の運用のテストが無いので、例外事項の欄は空にして、その旨を台帳に書く |
6行目のブリッジレターは、報告書の対象期間の終わりから次の報告書までをつなぐ書簡です。 AWS は継続運用の書簡(Bridge Letter)を毎月更新して公開しているとしています。空白の期間の手当てとして、委託先に求める材料になります。
記録を残す
- 報告書の原本、ダウンロードした日、NDAの確認の記録
- Textract の読み取り結果の全文(S3 に KMS で暗号化して保存)
- 例外の候補として取り出した行と、決まり文句の一覧のその時点の版
- Claude の出力の全文と、人が直した箇所
- CUEC ごとの担当部署の回答と回答日
- 手当ての決定、委託先への質問と回答、台帳の確定日と確定した人
3つ目で決まり文句の一覧の版を残すのは、一覧に文言を足すと過去の判定の意味が変わるためです。 ある時点で「例外なし」に足した文言が、実は例外を含む言い回しだったと後で分かったとき、どの報告書の判定をやり直すかが決まります。
最後の行は、自社の監査や顧客からの質問への回答の材料です。 委託先の例外に、いつ気づき、何をしたかを示せます。
04実装レベルの3段階
半自動化で、②の50分は大きく減ります。 例外の候補が一覧で出るからです。ただし CUEC を自社の統制に照らす作業は人に残ります。本格構成で1件30分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化を1か月使うと、監査人ごとの決まり文句の言い回しが集まります。
05工数削減シミュレーション
導入後 30件 × 30分 ÷ 60 = 15 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外のクラウドサービスやSaaSを百を超える契約で使い、委託先管理のために英文のSOC 2 Type 2 報告書を毎年・半年ごとに集めている企業。報告書が委託先ごとに時期をずらして毎月数十本届き、情報システム部のセキュリティ担当が1本ずつ読んで例外事項と利用者側の統制を書き写している場合。金融・保険のように、委託先の管理の記録を監督官庁や監査人に示す必要がある場合。
- 集めている報告書が年に数本で、目視で足りる場合。報告書の多くが日本語で書かれている場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、問い合わせの機能は英語だけです)。報告書の配布の条件(NDA)が外部のサービスでの処理を認めていない場合。なお、例外事項が自社にとって許容できるか、委託先との契約を続けるかの判断は情報システム部と法務が行うもので、この構成では代替できません。
07最小構成で試す方法
- 手元にある SOC 2 Type 2 報告書から、例外事項があると分かっているものを3本選ぶ(外部のサービスでの処理をNDAが認めているもの)
- それぞれの報告書について、前回の担当が台帳に書いた例外事項と CUEC を用意する
- テストの結果の章と CUEC の章のページを、手元のAIサービスに貼り付ける
- 「この表から、結果の列が No exceptions noted でない行をすべて、原文のまま書き出してください。省かないでください。CUEC を1件ずつ書き出してください」と指示する
- 出てきた結果を、前回の担当の台帳と突き合わせる
| 出てきた内容 | 判断 |
|---|---|
| 台帳と同じ例外事項がすべて出た | 読み取りと章の切り出しの構築に進む |
| 台帳に無い例外事項が出た | 前回の見落としの可能性。構成の効き目そのもの |
| ページの境目の行が抜けた | 表のつなぎ方の問題。前処理で直る |
2行目が出ることは珍しくありません。 第3章の(a)が実際に起きていたということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| ページの境目の行が抜ける | 同じ列数で列見出しの無い表を、前の表の続きとしてつなぐ |
| 結果の列を位置で決めてずれる | COLUMN_HEADER のセルの文言で決める |
| 言い回しの違いで例外の候補が増えすぎる | 決まり文句の一覧に足す。AIの判定で候補から消さない |
| AIが例外なしの行を出力から落とす | 「行を省かない」と指示し、件数を入力と突き合わせる |
| 件数と母集団の読み違い | 原本のページで人が確かめる |
| 委託先の回答をAIが評価に言い換える | 原文を写させ、評価の語を禁じる |
| CUEC が広い名前の統制に寄る | 自社の統制の一覧に短い説明を持たせる |
| 長い報告書の結果を取り切れない | NextToken が無くなるまで GetDocumentAnalysis を呼ぶ |
| 7日を過ぎて結果が取れない | JobId の有効期間を過ぎたら読み取りからやり直す |
上の2行が、この構成を作る理由そのものです。 機械が人と同じ場所で落とすなら、構成の意味がありません。
4行目は、入力と出力の件数を比べるだけで分かります。 この突き合わせを Python に入れておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 委託先のSOC 2 報告書(委託先のシステムの構成、統制の内容、監査で見つかった例外)、自社の統制の一覧、委託先管理の評価です。どれも、外に出れば委託先と自社の弱点の地図になります。
- NDAの条件を処理の手前で確かめる … SOC 2 報告書の閲覧にはNDAが必要なことが多く、AWS もそうしています。外部のサービスでの処理を認めているかを確かめてから受付フォルダに入れます
- 保存は暗号化する …
StartDocumentAnalysisのKMSKeyIdを指定すると、出力先のバケットに置く結果が、その鍵でサーバー側暗号化されます。指定しない場合は SSE-S3 で暗号化されます - 見られる人を絞る … 受付フォルダ、読み取り結果、台帳の案は、セキュリティの担当と法務だけが読めるようにします。CUEC を担当部署に回すときは、その CUEC の文だけを送り、報告書そのものは渡しません
- 評価をAIにさせない … 例外事項が許容できるかは、取り扱うデータと契約に照らして人が決めます
- Claude に渡す範囲を絞る … 渡すのは例外の候補の行と CUEC の文、自社の統制の短い説明だけです。報告書の全文は渡しません
4番目を崩さないでください。 台帳の「評価」の欄にAIの文が入ると、誰が評価したのかが記録から分からなくなります。
誤りが起きた場合のリスクは、例外事項を見落として手当てをしないことと、報告書の中身を不要な範囲に渡すことの2つです。 前者は決まり文句による機械的な取り出しと原本での確認で、後者はNDAの確認、暗号化、渡す範囲の絞り込みで防ぎます。
10まず何から始めるか
1週目:決まり文句の一覧を作る
手元の報告書10本から、テストの結果の列の「例外なし」の言い回しを集めます。監査人ごとの違いがここで見えます。
2週目:3本で試す
例外事項があると分かっている報告書3本で最小構成を試し、前回の担当の台帳と突き合わせます。ページの境目の行が出るかを最優先で見ます。
3週目:NDAの条件を確かめる
法務と、報告書ごとの配布の条件を確かめ、外部のサービスで処理できる委託先の一覧を作ります。処理できない委託先は、人が読む流れに残します。
4週目:読み取りと例外の取り出しをつなぐ
S3 への保存から Textract の読み取り、例外の候補の一覧までを作ります。この時点では AI の対応づけを足さず、候補の一覧だけを見ます。
2か月目: 例外事項の分解と CUEC の対応づけを足し、担当部署への回付を始めます。3か月目以降: 前回との比較と台帳への案の書き出しを足し、1本120分が何分になったかを実測します。報告書が届いた月のうちに、例外事項と CUEC の回答が台帳にそろうようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
StartDocumentAnalysis が S3 の JPEG、PNG、TIFF、PDF を非同期で解析し、完了を SNS に通知すること。FeatureTypes が TABLES/FORMS/QUERIES/SIGNATURES/LAYOUT であること。ClientRequestToken で同じ JobId が返ること。JobTag、QueriesConfig のページ指定、KMSKeyId(指定しない場合は SSE-S3)。JobId が7日間有効なこと。非同期のPDFの上限が500MBであること | AWS: StartDocumentAnalysis | 2026-10-08 |
GetDocumentAnalysis の MaxResults が既定・最大とも1,000で、NextToken で続きを取ること。JobStatus(IN_PROGRESS/SUCCEEDED/FAILED/PARTIAL_SUCCESS)、Warnings、QUERY と QUERY_RESULT のブロック | AWS: GetDocumentAnalysis | 2026-10-08 |
表が TABLE と CELL(RowIndex、ColumnIndex)で返り、セルの EntityTypes に COLUMN_HEADER などが付くこと | AWS: Tables | 2026-10-08 |
レイアウトの要素が LAYOUT_SECTION_HEADER、LAYOUT_LIST、LAYOUT_TABLE などで返り、読む順に並ぶこと | AWS: Layout Response Objects | 2026-10-08 |
| 対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、問い合わせは英語の文書だけであること。非同期のPDFが500MB・3,000ページまでであること。PDFはパスワードで保護できないこと。非同期の問い合わせが1ページ30件までであること | AWS: Set Quotas in Amazon Textract | 2026-10-08 |
| AWS の SOC 2 報告書が年2回、直近12か月を対象に出され、AWS Artifact で提供されること。SOC 1・SOC 2 の閲覧にNDAが必要で、SOC 3 は公開されていること。継続運用の書簡(Bridge Letter)が毎月更新されること | AWS: SOC FAQs | 2026-10-08 |
構造化出力を output_config.format に json_schema を指定して受け取れること。additionalProperties は false だけが使えること | Claude Docs: Structured outputs | 2026-10-08 |
例外事項の評価と委託先との契約の判断は、情報システム部と法務が、取り扱うデータと契約に照らして行ってください。 本記事は公開仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0870)についてのご相談はこちらから。
