他アカウントのVPCE利用AWSリソースにアクセス

ハマったこと

  • あるAWSアカウントではセキュリティの観点で、Kinesis やDynamoDB のリソースをVPC Endpointを利用してプライベートネットワークによるアクセスを行っています。
    • VPCにVPC Endpointを作成することで、PrivateLink を使用するAWS サービスにVPCをプライベートに接続できます(インターネットゲートウェイ、NATゲートウェイ等は必要としません)。VPC Endpointを利用することで、AWSのネットワーク(プライベートネットワーク)の外部にはトラフィックは流れません。
  • 以下の図を参照ください。アカウント1では、VPC Endpointを利用しているため、KinesisやDynamoDBはVPCにクローズされており、アカウント2からアクセスする際にプライベートアクセスが必要と錯覚しましたー!(ある時は分かっていたつもりでも…)
 

結論

  • 実際は、KinesisやDynamoDB をVPCに閉じ込めることはできません。
  • VPC Endpointは仮想なデバイスであり、プライベート IP アドレスを持つENI(Elastic Network Interface)を使い、VPC 内のインスタンスとAWSサービスの間で通信を可能にします。KinesisやDynamoDB をVPC内に移動させるわけではないのです。
  • つまり、アカウント1 でVPC Endpoint利用しているKinesis やDynamoDB のリソースをアカウント2からプライベートアクセスすることはできません(外部システムのため)。アカウント2からアカウント2のKinesis やDynamoDB のリソースにアクセスする際は、パブリックなアクセス(インターネット経由)となります。
  • VPC Endpointの利用有無に関わらず、他アカウントのAWSリソースにアクセスするには、Assume Roleを活用しましょう。Assume Roleは、下記記事を参照ください(但し、EC2からの利用を想定したパターン)。