CloudTrail で sourceIPAddress が AWS Internal と表示される ChangePassword は aws:ViaAWSService で許可できるのか検証してみた

CloudTrail で sourceIPAddress が AWS Internal と表示される ChangePassword は aws:ViaAWSService で許可できるのか検証してみた

2026.02.24

はじめに

やかめです。

IP アドレス制限の Deny ポリシーが設定された環境で、コンソール初回ログイン時に要求されるパスワード変更ができないというケースを拝見しました。

CloudTrail を確認したところ、ChangePassword イベントの sourceIPAddress は AWS Internal と記録されている一方、ConsoleLogin イベントの sourceIPAddress は許可されていない IP アドレスが記録されている状況でした。

この際、対処方法として以下の 2 つを考えました。

  • aws:ViaAWSService 条件を利用する
  • アクセス元の IP アドレスを許可リストに追加する

「AWS Internal と表示されているなら aws:ViaAWSService で許可できそう」と思いましたが、実際はどうなのかを検証しました。

結論

結論としては、アクセス元の IP アドレスを許可リストに追加する方法でパスワード変更が可能となりました。
aws:ViaAWSService を使っても回避はできませんでした。

AWS Internal とは

CloudTrail の sourceIPAddress フィールドに AWS Internal と記録されることがあります。これは、リクエストが AWS の内部ネットワークから実行されたことを示します。
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html

aws:ViaAWSService とは

aws:ViaAWSService は、AWS サービスが IAM プリンシパルの資格情報を使用して別の AWS サービスを呼び出したかどうか判定するグローバル条件キーです。いわゆる サービス間連携 の場合に true になります。

  • 例:Lambda → S3
  • 例:S3 → KMS
  • 例:Step Functions → DynamoDB

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice

IP 制限との組み合わせ
IP 制限ポリシーで NotIpAddress を使用している場合、サービス間連携によるアクセスもブロックされることがあります。そのため、aws:ViaAWSService を組み合わせることで、

  • 通常のユーザーアクセスは IP 制限を適用
  • サービス間連携の場合は Deny を回避

といった制御が可能になります。

https://dev.classmethod.jp/articles/tsnote-iam-allow-aws-service/

なぜ aws:ViaAWSService では解決できないのか

下記の記事のように、sourceIPAddressAWS Internal となっているケースでも、ポリシーに aws:ViaAWSService を追加することで解決できる場合があります。
https://medium.com/@nfake6128/context-and-purpose-67a14c72a336

この記事のケースでは、

  • ユーザーが S3 に対して PutObject
  • S3 が内部的に KMS の GenerateDataKey を呼び出す
  • KMS 側の CloudTrail では sourceIPAddress = AWS Internal
  • 実態は S3 → KMS のサービス間連携

という構造になっています。この場合は、aws:ViaAWSService が true になるため、この条件キーで回避できました。

一方、ChangePassword の場合、IAM ユーザーが IAM に対して直接 API リクエストを送信している構造であると考えられます。

これは、「AWS サービスが IAM プリンシパルの資格情報を使用して別の AWS サービスを呼び出す」という aws:ViaAWSService の定義に該当するサービス間連携の構造とは異なります。
そのため、sourceIPAddressAWS Internal と表示されていたとしても、aws:ViaAWSService は true にならず、IP 制限の Deny 条件を回避できなかったものと推測されます。

また、コンソールログイン自体は IAM ポリシーの評価対象外であるため、IP 制限の Deny ポリシーが設定されていてもログインは成功します。
しかし、ログイン後に実行される ChangePassword API コールは IAM ポリシーの評価対象となるため、ここで IP 制限に引っかかりパスワード変更が失敗します。
結果として、ログインはできるがパスワード変更ができないという状態になります。

補足

CloudTrail では、ConsoleLogin と ChangePassword は記録されるリージョンが異なる場合があります。

  • ConsoleLogin はサインインエンドポイントのリージョンに記録される
  • ChangePassword は IAM の API 操作のため、us-east-1 に記録される

トラブルシュートの際は、確認するリージョンに注意してください。

まとめ

  • IP 制限環境でパスワード変更を許可するには、実際のアクセス元 IP を許可する必要がある
  • sourceIPAddressAWS Internal と表示されていても、aws:ViaAWSService = true を意味するわけではない
  • ChangePassword はサービス間連携ではないため、aws:ViaAWSService では IP 制限を回避できない可能性が高い

参考になれば幸いです。

参考情報

ChangePassword - AWS Identity and Access Management
IAM の仕組み - AWS Identity and Access Management

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。

運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。

当社は様々な職種でメンバーを募集しています。

「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

FacebookHatena blogX

関連記事