Security, Identity, and Compliance

IAM

Bedrock やエージェントに「誰が・何を・どこまで」実行させるかを決める権限の最終防衛線。信頼ポリシーとリソースベースポリシーの組み合わせが試験の主戦場です。

  • B|実装まわり
  • D2 実装と統合
  • D3 安全性・セキュリティ・ガバナンス

ひとことで言うと

IAM 自体は生成AI固有のサービスではありません。Bedrock・エージェント・Knowledge Base が何にアクセスできるかを決める、権限の最終防衛線です。

要するに、又貸し禁止の合鍵です。Bedrock サービスに「エージェント実行ロール」という合鍵を渡すとき、渡しっぱなしにはしません。信頼ポリシーに「この合鍵は自分のアカウントの、このエージェントIDのためだけに使ってよい」という条件を刻みます。刻まなければ、理屈の上では他人の建物でもこの合鍵が使える状態になります。

なぜ生まれたか

IAM が無いとIAM 側の受け皿
Bedrock サービス自体に無制限の権限を持たせるしかないサービスロール(実行ロール)に必要な権限だけを列挙
別アカウントの誰かが自分のロールを勝手に引き受けられる(混乱した代理人問題)信頼ポリシーに aws:SourceAccount / ArnLike の AWS:SourceArn 条件
エージェントの Lambda アクションが誰からでも呼べてしまうLambda 側のリソースベースポリシーで呼び出し元を Bedrock かつ特定エージェントに限定

Bedrock のエージェント・Knowledge Base はいずれも AWS が自動生成するデフォルトロールを持ちますが、公式ドキュメントは「必要な権限だけを含めるカスタムロールを作る」ことを前提に手順を示しています。デフォルトのまま使うと、想定より広い権限が残ることがあります。

何に使うか

用途使い方関連ドメイン
Bedrock サービスロールの信頼ポリシーbedrock.amazonaws.com を Principal にし、sts:AssumeRole を許可D2
モデル呼び出しの権限bedrock:InvokeModel を特定の基盤モデル ARN に限定D1・D2
エージェントの Lambda 呼び出し許可Lambda のリソースベースポリシーで AWS:SourceArn をエージェント ARN に限定D2
ガードレール・KMS キーの利用許可bedrock:ApplyGuardrail や kms:Decrypt を個別に付与D3

試験でどう問われるか

問われ方正解に寄る条件引っかけの選択肢
エージェントが想定外のS3バケットまで触れてしまう権限が広すぎる → サービスロールを用途ごとに分離し必要な ARN だけ許可1つの共通ロールに全権限をまとめて使い回す
他アカウントが自分のBedrockロールを引き受けられないか心配混乱した代理人対策 → 信頼ポリシーに aws:SourceAccount と ArnLike の AWS:SourceArnロールのARNを非公開にするだけで対策とする
エージェントのアクショングループ(Lambda)を誰でも呼べる状態にしたくないLambda 側のリソースベースポリシーで呼び出し元をBedrock+エージェントARNに限定エージェントの実行ロールにLambda呼び出し権限を足すだけで済ませる
ガードレールをKMSで暗号化していて、エージェントから使うと失敗する実行ロールに kms:Decrypt が個別に必要ガードレールを紐づけるだけで暗号化キーの権限は不要と考える

IAM は D2(実装・統合)と D3(安全性・セキュリティ・ガバナンス)の両方に顔を出します。シナリオが「動かない・繋がらない」なら D2 寄り、「漏れる・奪われる」なら D3 寄りの文脈で権限設計を読むと選択肢が絞りやすくなります。

実務でどう使うか

  • エージェント・Knowledge Base は用途別にサービスロールを分ける。 1つのロールに全アクショングループ・全データソースの権限を積むと、事故時の影響範囲がそのまま全体になります
  • 信頼ポリシーの {{*}} は本番では具体的なリソースIDに絞る。 公式手順もワイルドカードは作成直後の一時的なものとして案内しています
  • KMS で暗号化したガードレール・Knowledge Base・データソースを使うたびに、対応する kms:Decrypt 系の権限を個別に足す必要があります。 ガードレールやKBを紐づけただけでは復号権限は付与されません

Knowledge Base のカスタムサービスロール自体には、KMSキーポリシー側の権限は不要です(キーポリシーは「誰がロールを作れるか」を制御し、ロールが実際にデータを扱う権限は別に付与します)。両者を混同すると、権限は足りているのに動かない原因を見誤ります。

取り違えやすいもの

迷う相手切り分けの一言
IAM Identity CenterIAM は AWS内部のプリンシパル(サービスロール等)の権限。Identity Center は人間のワークフォースが複数アカウントへサインインする仕組み
Amazon CognitoCognito はアプリのエンドユーザーの認証・認可。IAM は AWSリソース側(Bedrock・Lambda等)の権限
AWS Secrets ManagerIAM は「誰が何をできるか」の許可。Secrets Manager は値そのもの(APIキー・パスワード)の保管
IAM Access AnalyzerIAM はポリシーを設定する側。Access Analyzer は設定されたポリシーの結果を事後に検査する側

想起チェック

Q1. Bedrock がエージェント実行ロールを引き受けるとき、他アカウントに悪用されないようにする条件は?

信頼ポリシーの Condition に aws:SourceAccount(自アカウントID)と ArnLike の AWS:SourceArn(特定のエージェントARN) を指定します。これが無いと、理論上は他アカウントのBedrockからもこのロールを引き受けられる状態になります。

Q2. エージェントのアクショングループ用Lambda関数を、Bedrock以外から呼び出せないようにするには?

Lambda のリソースベースポリシーに、Principal を bedrock.amazonaws.com、AWS:SourceArn をエージェントARNとする条件を付けて lambda:InvokeFunction を許可します。実行ロール側の権限だけでは、呼び出し元を制限できません。

出典(AWS公式)