他アカウントの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からの利用を想定したパターン)。