VPCエンドポイントポリシーを設計する際に、ゲートウェイ型のエンドポイントポリシーのPrincipalを定義したが、意図した動作にならないことに気づきました。
ゲートウェイエンドポイントでプリンシパルに定義する際にはaws:PrincipalArnを利用する必要があります。
AWS公式ドキュメントには
ゲートウェイエンドポイントでは、aws:PrincipalArn 条件キーを使用してプリンシパルへのアクセスを許可する必要があります。次のいずれかの形式でプリンシパルを指定すると、アカウントのすべてのユーザーとロールではなく、AWS アカウントのルートユーザーのみにアクセスが許可されます。
"AWS": "account_id""AWS": "arn:aws:iam::account_id:root"
インターフェイスエンドポイントの"AWS": "arn:aws:iam::account_id:root"プリンシパルの意味
インターフェイスエンドポイントでの意味はアカウントのすべてのユーザーとロールという意味になります。
Version: '2012-10-17'
Statement:
  - Effect: Allow
    Principal: 'AWS: "arn:aws:iam::account_id:root'
    Action: '*'
    Resource: '*'
ゲートウェイエンドポイントの"AWS": "arn:aws:iam::account_id:root"プリンシパルの意味
ゲートウェイエンドポイントの意味はAWS アカウントのルートユーザーという意味になります。
Version: '2012-10-17'
Statement:
  - Effect: Allow
    Principal: 'AWS: "arn:aws:iam::account_id:root'
    Action: '*'
    Resource: '*'
対応方法: ゲートウェイエンドポイントでの aws:PrincipalArn 条件キーの使用
ゲートウェイエンドポイントでは、aws:PrincipalArn 条件キーを使用してプリンシパルへのアクセスを許可する必要があります。これにより、特定のプリンシパルに対してアクセスを制限できます。
例: 特定のプリンシパルに対するアクセス制限
以下は、特定の IAM ユーザー(ユーザーA)にのみアクセスを許可し、他のプリンシパルにはアクセスを拒否する VPC エンドポイントポリシーの例です。
Version: '2012-10-17'
Statement:
  - Effect: Allow
    Principal: '*'
    Action: '*'
    Resource: '*'
    Condition:
      StringEquals:
        aws:PrincipalArn: arn:aws:iam::account_id:user/ユーザーA
このポリシーでは、ユーザーA に対してすべてのアクションとリソースへのアクセスを許可しています。同時に、aws:PrincipalArn 条件キーを使用して、ユーザーA 以外のプリンシパルに対するアクセスを制限しています。
この方法により、ゲートウェイエンドポイントを通じて特定のプリンシパルに対するアクセスを制限することができます。

