[アップデート] AWS Global Accelerator でエンドポイントのクロスアカウントアタッチメントができるようになりました

エンドポイントをクロスアカウントにアクセラレーターに対してアタッチできるようになりました
2023.11.03

こんにちは、AWS事業本部の平木です!

AWS Global Accelerator で単一のアクセラレーターを使用して複数のアカウントのエンドポイントにアクセスできるようになったためご紹介します。

用語の確認

AWS Global Accelerator に関するざっくりとした用語解説は以下となります。

  • エンドポイント・・・ALBや、NLB、EC2、EIP のコンポーネントのこと
  • エンドポイントグループ・・・リージョンに関連付けられる複数または単一のエンドポイントのグループ
  • アクセラレーター・・・AWS Global Accelerator のメインコンポーネントで ELB のロードバランサーに当たるコンポーネント

分かりやすい解説は以下のブログを参照ください。

クロスアカウントアタッチメント

今回のアップデートにより、アクセラレーターに指定できるエンドポイントとして別のアカウントのリソースをアタッチできるようになりました。

アクセラレーターが作成されていない AWS アカウントで 「クロスアカウント添付ファイル」というものを作成することでアクセラレーター側でエンドポイントの追加の許可をできるようになります。

イメージとしては下記のような図です。

やってみた

実際に上記構成図のような形でクロスアカウントアタッチメントの構成を作成してみました。

マネジメントコンソールの場合と、AWS CLI の場合とでご紹介します。

クロスアカウント添付ファイルの作成

マネジメントコンソールの場合

構成図中の Member アカウントに当たる AWS アカウントにログインします。

AWS Global Accelerator のコンソール画面を確認すると「Cross-account attachments」という項目があるため選択すると下記のような画面になります。

「アタッチメントの作成」を押下し、作成に進みます。

設定画面が出るため次のように設定し、「アタッチメントの作成」を押下します。

  • 名前: クロスアカウント添付ファイルの名前を入力します
  • プリンシパルを追加する
    • プリンシパル: エンドポイントとして追加を許可したい「アクセラレーターのある AWS アカウント ID」 または 「アクセラレーターARN」 を入力します
    • (必要に応じて、追加も可能です)
  • リソースを追加する
    • リージョン: エンドポイントとして追加を許可したいリソースのあるリージョンを選択します
    • Resource Type: エンドポイントとして追加を許可したいリソースの種類を選択します
    • Resource: エンドポイントとして追加を許可したいリソースを選択します

AWS CLI の場合

AWS CLI の場合のコマンドは下記となります。
注意点として、オレゴンリージョンの指定は必須となりますので必ず記載ください。

name={クロスアカウント添付ファイルの名前}
principals={追加を許可したいAWSアカウントID または アクセラレーターARN}
endpointid={追加を許可したいAWSリソースARN}
region={追加を許可したいAWSリソースのあるリージョン名} 
aws globalaccelerator create-cross-account-attachment \
 --name $name \
 --principals $principals \
 --resources EndpointId=$endpointid,Region=$region \
 --region us-west-2

下記はコマンドの例と実行結果の例となります。

[cloudshell-user@ip-10-2-89-36 ~]$ name=aws-cli-create
[cloudshell-user@ip-10-2-89-36 ~]$ principals=123456789012
[cloudshell-user@ip-10-2-89-36 ~]$ endpointid=arn:aws:elasticloadbalancing:ap-northeast-1:111122223333:loadbalancer/app/owner-alb/xxxxxxxxxxxxxxxx
[cloudshell-user@ip-10-2-89-36 ~]$ region=ap-northeast-1
[cloudshell-user@ip-10-2-89-36 ~]$ aws globalaccelerator create-cross-account-attachment \
>  --name $name \
>  --principals $principals \
>  --resources EndpointId=$endpointid,Region=$region \
>  --region us-west-2
{
    "CrossAccountAttachment": {
        "AttachmentArn": "arn:aws:globalaccelerator::111122223333:attachment/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "Name": "aws-cli-create",
        "Principals": [
            "123456789012"
        ],
        "Resources": [
            {
                "EndpointId": "arn:aws:elasticloadbalancing:ap-northeast-1:111122223333:loadbalancer/app/owner-alb/xxxxxxxxxxxxxxxx"
            }
        ],
        "LastModifiedTime": 1699008583.0,
        "CreatedTime": 1699008583.0
    }
}
[cloudshell-user@ip-10-2-89-36 ~]$

エンドポイントの追加

マネジメントコンソールの場合

続いてアクセラレーターを作成する構成図中の Owner アカウントにログインします。

ELB に紐づくアクセラレーターを作成する場合は、ELB の画面から新規作成すると便利なため、アクセラレーターの作成手順は下記ブログを参照ください。

作成が完了しましたら、
アクセラレーター > 作成したアクセラレーター名 > リスナー名 > エンドポイントグループ名 の順にたどると下記ページとなりますので、
「エンドポイントを追加」を押下します。

続いて下記のように設定し、「保存」を押下してエンドポイントを追加します。

  • クロスアカウントアタッチメントで指定されたリソースを追加する: チェックを入れる
  • クロスアカウント添付ファイル所有者のアカウント ID: 追加したいリソースのある AWS アカウントを選択する(今回の場合は、Member アカウントのID)
  • エンドポイントのタイプ: 追加したいエンドポイントのタイプを選択
  • エンドポイント: 追加したいエンドポイントを選択(今回の場合は、Member アカウントの ALB の ARN となっていることを確認する)

保存が完了すると、複数アカウントのエンドポイントが登録できていることが確認できました。

AWS CLI の場合

AWS CLI の場合のコマンドは下記となります。
注意点として、こちらもオレゴンリージョンの指定は必須となりますので必ず記載ください。

endpointid={AWSリソースARN}
weight={エンドポイントの重み}
clientippreservationenabled={クライアント IP アドレスを保持をするかどうか}
attachmentarn={クロスアカウント添付ファイルのARN}
grouparn={エンドポイントグループARN}
aws globalaccelerator add-endpoints \
 --endpoint-configurations EndpointId=$endpointid,Weight=$weight,ClientIPPreservationEnabled=$clientippreservationenabled,AttachmentArn=$attachmentarn \
 --endpoint-group-arn $grouparn \
 --region us-west-2

下記はコマンドの例と実行結果の例となります。

[cloudshell-user@ip-10-2-89-36 ~]$ endpointid=arn:aws:elasticloadbalancing:ap-northeast-1:111122223333:loadbalancer/app/member-alb/xxxxxxxxxxxxxxxx
[cloudshell-user@ip-10-2-89-36 ~]$ weight=128
[cloudshell-user@ip-10-2-89-36 ~]$ clientippreservationenabled=true
[cloudshell-user@ip-10-2-89-36 ~]$ attachmentarn=arn:aws:globalaccelerator::111122223333:attachment/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
[cloudshell-user@ip-10-2-89-36 ~]$ grouparn=arn:aws:globalaccelerator::123456789012:accelerator/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/listener/xxxxxxxx/endpoint-group/xxxxxxxxxxxx
[cloudshell-user@ip-10-2-89-36 ~]$ aws globalaccelerator add-endpoints \
>  --endpoint-configurations EndpointId=$endpointid,Weight=$weight,ClientIPPreservationEnabled=$clientippreservationenabled,AttachmentArn=$attachmentarn \
>  --endpoint-group-arn $grouparn \
>  --region us-west-2
{
    "EndpointDescriptions": [
        {
            "EndpointId": "arn:aws:elasticloadbalancing:ap-northeast-1:111122223333:loadbalancer/app/member-alb/c4d73e8ce4bfd674",
            "Weight": 128,
            "ClientIPPreservationEnabled": true
        }
    ],
    "EndpointGroupArn": "arn:aws:globalaccelerator::123456789012:accelerator/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/listener/xxxxxxxx/endpoint-group/xxxxxxxxxxxx"
}
[cloudshell-user@ip-10-2-89-36 ~]$

接続してみる

AWS Global Accelerator の DNS 名 例)test.awsglobalaccelerator.com にローカルの Windows PC からリクエストを送ってみたところ、両系にリクエストが送れていることが分かりました。

※それぞれの系の EC2 サーバーに Apache をインストールし、/var/www/html/index.html に、
Ownerアカウント側では、Hello World
Memberアカウント側では、Hello World Member
表示されるよう事前に設定しています。

C:\Users\xxx>curl test.awsglobalaccelerator.com && echo %date% %time%
Hello World Member
2023/11/03 19:16:10.73

C:\Users\xxx>curl test.awsglobalaccelerator.com && echo %date% %time%
Hello World
2023/11/03 19:16:12.37

C:\Users\xxx>curl test.awsglobalaccelerator.com && echo %date% %time%
Hello World Member
2023/11/03 19:16:13.68

C:\Users\xxx>curl test.awsglobalaccelerator.com && echo %date% %time%
Hello World Member
2023/11/03 19:16:20.12

C:\Users\xxx>curl test.awsglobalaccelerator.com && echo %date% %time%
Hello World
2023/11/03 19:16:20.92

コスト

クロスアカウントアタッチメントを利用することによる追加コストは発生しません。
Global Accelerator のアクセラレータの所有者には、アクセラレータに関連するコストが請求されます。

クォータ

上限値に関する情報は以下です。

項目 上限緩和可否
クロスアカウントアタッチメント毎のプリンシパル 50
クロスアカウントアタッチメント毎のリソース 500

参考

おわりに

今回は、 AWS Global Accelerator でエンドポイントのクロスアカウントアタッチメントができるようになったアップデートのご紹介でした。

クロスアカウントでのアタッチができることによって、インターネットアクセスのあるアプリケーションがある場合に、制御部分についてを1つのアカウントに集約し、アプリケーションについてはアカウント単位で分離させることでセキュリティ観点で権限分界しやすいといったメリットがあります。

AWS 公式の AWS CLI リファレンスはまだ提供されていない(2023年11月3日現在)ようですが、
最新バージョンの AWS CLI 上の help を確認すると参照できますので CLI で使用したい方はぜひご確認いただければと思います。

追加された API は以下です。

  • CreateCrossAccountAttachment
  • DeleteCrossAccountAttachment
  • DescribeCrossAccountAttachment
  • ListCrossAccountAttachments
  • ListCrossAccountResourceAccounts
  • ListCrossAccountResources
  • UpdateCrossAccountAttachment

この記事がどなたかの役に立てば嬉しいです。