ある SaaS 企業(Account A)は、顧客の AWS アカウントの S3 バケットにデータを書き込む Lambda 関数を運用しています。 顧客(Account B)は自社アカウントに IAM ロールを作成し、信頼ポリシーのプリンシパルとして AWS サービスプリンシパル lambda.amazonaws.com を指定しています。 セキュリティチームは「混乱した代理人(Confused Deputy)問題」を防ぐため、Account B の IAM ロールが Account A の特定の Lambda 関数からのみ引き受けられるよう制限したいと考えています。 Account B の IAM ロール信頼ポリシーに追加すべき最も適切な条件はどれですか?
混乱した代理人問題は、AWS サービスプリンシパル(lambda.amazonaws.com)がプリンシパルの場合に発生します。悪意のある第三者が Account A の Lambda を別顧客のロール引き受けに悪用する可能性があります。aws:SourceArn で特定の Lambda 関数 ARN を、aws:SourceAccount でアカウント ID を指定することで、正規の Lambda 関数のみがロールを引き受けられるよう制限できます。aws:SourceAccount を併用するのは、一部のグローバルサービスで ARN が使えないケースに対応するためです。 選択肢Aの aws:PrincipalOrgID 条件は Organizations 全体に制限するものです。Account A の別の Lambda や EC2 からも引き受けられてしまい精度が不十分で、Account B が別組織の場合は使用できません。 選択肢Cの aws:PrincipalArn 条件はプリンシパルが IAM ユーザー/ロールの場合に使用します。サービスプリンシパルが設定された信頼ポリシーでは aws:SourceArn が適切です。 選択肢Dの aws:CalledVia 条件は連鎖的なサービス呼び出しの中間サービスを検証する条件キーであり、混乱した代理人問題の防止には使用しません。