SJ blog
architecture
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

AWS Resource Access Manager(RAM) — クロスアカウントリソース共有

AWS RAMを使ったVPCサブネット、Transit Gateway、Route53リゾルバールール、License Managerライセンスのクロスアカウント共有設定、Organizations統合、招待フローを解説。

一言結論

AWS RAMを使うとVPCサブネットやTransit GatewayをアカウントをまたいでコピーせずにOrganizations単位で共有できるため、マルチアカウント環境のネットワーク設計を一元管理しコストを削減できる。

AWS RAM の概要

Resource Access Manager(RAM)は、AWSリソースを別のAWSアカウントやOrganizationsのOUと共有するサービスだ。リソースをコピーせずに共有できるため、コスト効率が高い。

RAM が不要な方法(リソースのコピー):
  アカウントA: VPC作成
  アカウントB: 別VPCを作成 → VPCピアリング
  → 管理が分散し、コスト2倍

RAM を使った共有:
  アカウントA: 共有サブネットを所有・管理
  アカウントB, C: 共有サブネットでEC2を起動
  → リソース一元管理、コスト最適化

RAM で共有できるリソース

よく使われる共有リソース:
  VPC:
    → サブネット(プライベート/パブリック)
    → ※ VPC自体は共有不可、サブネット単位
  
  ネットワーク:
    → Transit Gateway
    → Route53 Resolver Rules
    → AWS Network Firewall Policy
  
  その他:
    → License Manager(ライセンス設定)
    → AWS Glue Data Catalog
    → Amazon Aurora DB Cluster(クローン)
    → Systems Manager Incident Manager

VPCサブネットの共有設定

# リソース共有の作成(アカウントAで実行)
aws ram create-resource-share \
  --name "shared-subnets" \
  --resource-arns \
    arn:aws:ec2:ap-northeast-1:123456789012:subnet/subnet-private-aaa \
    arn:aws:ec2:ap-northeast-1:123456789012:subnet/subnet-private-bbb \
  --principals \
    arn:aws:organizations::123456789012:ou/o-xxx/ou-yyy \
  --allow-external-principals false

# アカウントBでは共有サブネットを確認(所有者はアカウントAのまま)
aws ec2 describe-subnets \
  --filters Name=owner-id,Values=123456789012
共有サブネットの特徴:
  所有者(アカウントA):
    → サブネット自体の管理(ルートテーブル変更等)
    → ACLや他の設定の変更
  
  参加者(アカウントB):
    → 共有サブネットでEC2/ELB/RDS等を起動
    → 自分のリソースのみ管理(他アカウントのリソースは見えない)
    → サブネット自体の設定変更は不可

Organizationsとの統合

# Organizations全体への共有(OU対象)
aws ram create-resource-share \
  --name "org-wide-tgw-share" \
  --resource-arns arn:aws:ec2:ap-northeast-1:123456789012:transit-gateway/tgw-xxx \
  --principals arn:aws:organizations::123456789012:organization/o-xxx \
  --allow-external-principals false

# Organizations統合を有効化(マスターアカウントで実行)
aws ram enable-sharing-with-aws-organization
Organizations統合の利点:
  → 招待/承認フロー不要(Organizationsメンバーは自動承認)
  → OU単位での共有が可能
  → 一括管理

外部アカウントへの共有:
  → allow-external-principals: true に設定
  → 招待メールが送られ、受信側が承認する必要あり

Transit Gateway の共有

マルチアカウント環境でTGWを一元管理するパターン。

# ネットワークアカウントでTGWを作成
aws ec2 create-transit-gateway \
  --description "Shared TGW" \
  --options AutoAcceptSharedAttachments=enable

# RAMでTGWをOrganizations全体に共有
aws ram create-resource-share \
  --name "shared-tgw" \
  --resource-arns arn:aws:ec2:ap-northeast-1:123456789012:transit-gateway/tgw-xxx \
  --principals arn:aws:organizations::123456789012:organization/o-xxx

# 各アカウントでTGWアタッチメントを作成
aws ec2 create-transit-gateway-vpc-attachment \
  --transit-gateway-id tgw-xxx \
  --vpc-id vpc-yyy \
  --subnet-ids subnet-aaa subnet-bbb

共有の確認と管理

# 自分が共有しているリソースの確認
aws ram list-resources \
  --resource-owner SELF

# 自分に共有されているリソースの確認
aws ram list-resources \
  --resource-owner OTHER-ACCOUNTS

# 共有への招待を確認・承認(非Organizations環境)
aws ram get-resource-share-invitations
aws ram accept-resource-share-invitation \
  --resource-share-invitation-arn arn:...

試験頻出ポイント

シナリオ回答
複数アカウントで同じサブネットを共有RAM でサブネットを共有
Organizationsメンバーに自動承認で共有RAM + Organizations統合
全アカウントで共通TGWを使うRAM でTGWを共有
外部アカウントへの共有allow-external-principals: true + 招待承認
共有サブネットの所有者が管理する範囲サブネット設定(ルートテーブル等)

まとめ

RAMはリソースを複製せずにアカウント間で共有する仕組みだ。VPCサブネットの共有でマルチアカウントのネットワーク設計を一元化でき、TGWの共有でハブ型ネットワーク構成を実現できる。OrganizationsとRAMを組み合わせることで、大規模なマルチアカウント環境でも効率的なリソース管理が可能だ。