フォーム読み込み中
こんにちは、蒋です。
この記事は、ソフトバンク Advent Calendar2022の10日目の記事になります。
Alibaba Cloud Container Registry(以下、ACR)は Alibaba Cloud 社が提供するコンテナイメージのレジストリサービスとなります。製品ラインナップとしてパーソナルエディションとエンタープライズエディションに分けられています。パーソナルエディションは無料で利用可能ですが、SLA がなく個人利用またはテスト検証に向いています。それに対して、エンタープライズエディションは SLA を提供する上、パーソナルエディションにない独占機能も多数提供しています。両者の比較は下記ドキュメントにまとめられていますので、ご参考ください。
https://www.alibabacloud.com/help/en/container-registry/latest/what-is-container-registry
ACR に保存されているイメージにアクセスする際に、ACR のエンドポイントにログインする必要があります。両エディションとも「Internet エンドポイント」と「VPC エンドポイント」を提供していますが、各エンドポイントの仕様が異なっていますので、早速各エディションのエンドポイントの利用範囲を検証してみました。また、パブリックネットワークを介せず、レジストリを別アカウントに共有したいという要望もよく聞きます。今回はこちらのソリューションも紹介していきたいと思います。
ACR のエンドポイントへの疎通を確認するために、2つのアカウント(A・B)を利用しました。アカウントA には ACR インスタンスを作成し、さらにエンドポイントへの疎通確認をするための ECS を作成します。アカウントB には ACR は作成せず、疎通確認用の ECS のみ作成します。アカウントA では内部・同一リージョンからのアクセス、アカウントB では外部・別リージョンからのアクセスを想定し検証するため、このような準備を行います。
1-1. 下記の構成でアカウントA/B それぞれセットアップします。以下の一覧では割愛していますが、ECS にはパブリック IP もバインドします。
アカウントA | アカウントB | |
---|---|---|
リージョン | 東京 | シンガポール |
ACR 作成する | Yes | No |
VPC CIDR | VPC-A(192.168.0.0/16) | VPC-B(10.0.0.0/8) |
Vswitch CIDR | Vswitch-A(192.168.0.0/24) | Vswitch-B(10.0.0.0/24) |
ECS IP 情報 | ECS-A(192.168.0.1) | ECS-B(10.0.0.1) |
1-2. ACR にアクセスするための ECS-A と ECS-B に docker を下記コマンドでインストールし、起動します。
# yum install -y docker
# systemctl start docker
ACR パーソナルエディションを作成し、Internet エンドポイントと VPC エンドポイントの公開範囲を検証します。
2-1. ACR のコンソールを開き、東京リージョンを選択後「Instance of Personal Edition」側の「+」をクリックします。
2-2. 「Create ACR Personal Edition」をクリックします。
2-3. 「Reset Docker Login Password」をクリックし、エンドポイントログイン用パスワードを設定します。
2-4. パスワードを 2 回入力し、「Confirm」をクリックします。
2-5. 左メニューの「Overview」をクリックし、パーソナルエディションの Internet エンドポイントと VPC エンドポイントが表示されます。
2-6. ECS-A 、ECS-B から、アカウントA にデプロイしたパーソナルエディションの「Internet エンドポイント」、「VPC エンドポイント」にログイン検証を行います。
2-7. パーソナルエディションの検証結果
それぞれの疎通結果は以下の通りでした。
テスト機 | Internet エンドポイント | VPC エンドポイント |
---|---|---|
ECS-A(東京) | 〇 | 〇 |
ECS-B(シンガポール) | 〇 | × |
・Internet エンドポイントの公開範囲:インターネット全員
・VPC エンドポイントの公開範囲:クラウド内同一リージョンの VPC 全員
Internet エンドポイントはアカウント・リージョンに依存せずアクセスすることができました。なお、今回は検証していませんが、パーソナルエディションの場合、同一リージョンの VPC であれば、アカウントに依存せず、どの VPC でも ACR の VPC エンドポイントにアクセスすることが可能です。
一方、VPC エンドポイントはアカウントA の東京リージョンに存在するため、同一アカウント・同一リージョンの ECS-A からアクセスすることは出来ましたが、異なるアカウント・リージョンにある ECS-B からはアクセスできませんでした。
ACR エンタープライズエディションを作成し、Internet エンドポイントと VPC エンドポイントの公開範囲を検証します。
3-1. ACR のコンソールを開き、「Enterprise Edition」側の「+」をクリックします。
3-2. ACR の購入情報を設定し、「Buy Now」をクリックします。
Region:Tokyo
Instance Type:Basic Edition
Instance Name:任意入力
Instance Storage:Default
3-3. 左メニューから「Repository ー Access Credential ー Set Password」を順にクリックし、エンドポイントログイン用パスワードを設定します。
3-4. 下記メニューを順にクリックし、エンタープライズエディションの Internet エンドポイントと VPC エンドポイントが表示されます。
・Inernet エンドポイント:「Instance ー Access Control ー Internet」
・VPC エンドポイント:「Instance ー Access Control ー VPC」
3-5. エンタープライズエディションの Internet エンドポイントには次のアクセス制御機能が実装されています。
・Internet エンドポイントの無効化
・利用対象 IP アドレスの制御
3-6. エンタープライズエディションの VPC エンドポイントを利用するためには、アクセスを許可する VPC を追加する必要があります。また、その ACR を作成したアカウントとリージョンが一致している VPC のみ追加することができます。
3-7. ECS-A 、ECS-B からエンタープライズエディションの「Internet エンドポイント」、「VPC エンドポイント」にログイン検証を行います。
3-8. エンタープライズエディションの検証結果
それぞれの疎通結果は以下の通りでした。
Inernet エンドポイント | ||||
テスト機 |
無効化
| 全IP許可 | ECS-A の IP のみ許可 | ECS-B の IP のみ許可 |
---|---|---|---|---|
ECS-A(東京) | × | 〇 | 〇 | × |
ECS-B(シンガポール) | × | 〇 | × | 〇 |
VPC エンドポイント | ||
テスト機 | バインド VPC なし | VPC-A バインド |
---|---|---|
ECS-A(東京) | × | 〇 |
ECS-B(シンガポール) | × ※バインド不可 | × ※バインド不可 |
※別アカウントのため
・Internet エンドポイントの公開範囲:インターネット全員(無効化可、IP制限可)
・VPC エンドポイントの公開範囲:バインドした VPC 全員(同アカウント同一リージョン VPC のみバインド可)
Internet エンドポイントはパーソナルエディションと同様、アカウント・リージョンに依存せずアクセスすることができました。パーソナルエディションと異なるのは、アクセス制御機能が高度化しているので、セキュリティ要件に応じた設定をすることができます。
一方、VPC エンドポイントはパーソナルエディションとは結果が大きく異なります。アクセスするVPC をバインドする必要がありますし、同一リージョンであっても異なる VPC からアクセスすることは出来ません。このため、VPC エンドポイントもよりセキュリティ性が高くなっています。
エンタープライズエディション ACR の VPC エンドポイントはバインドしたVPCのみ利用可能でセキュリティは高いですが、同アカウント同リージョンのVPCのみ追加可能のデメリットがありますので、別アカウントのVPCからも利用できるようにするソリューションを紹介します。
4-1. 構成図
CEN で VPC-A と VPC-B を結び、「VPC-B → CEN → VPC-A → (ACR エンタープライズエディション)VPC エンドポイント」という経路を構築します。
4-2. VPC-A を ACR にバインドします。「Instance ー Access Control ー VPC ー Add VPC」をクリックし、「VPC-A」と「Vsiwtch-A」を選択して「Confirm」をクリックします。
4-3. VPC エンドポイントの DNS 解析は AlibabaCloud PrivateZone 製品で実現されています。バインドした VPC-A に PrivateZone が自動的に作成され、下記 A レコードが含まれます。
Hostname:エンタープライズエディションの VPC エンドポイント
Record Value:アサインされた VPC-A 内のプライベート IP
4-4. VPC-A から VPC エンドポイントにログインできることを確認します。
4-5. 下記ドキュメントを参照し、CEN を利用して VPC-A と VPC-B をクロスリージョン&クロスアカウントで接続します。
https://www.alibabacloud.com/help/en/cloud-enterprise-network/latest/use-enterprise-edition-transit-routers-to-connect-vpcs-across-regions-and-accounts
4-6. ACR にバインドした VPC-A に、自動的に PrivateZone が作成されますが、VPC-B にないので、4-3 の VPC-A の PrivateZone 設定内容を参照し、VPC-B に同じ PrivateZone を作成します。
Hostname:手順 4-3 の値参照
Record Value:手順 4-3 の値参照
4-7. ECS-B からも「VPC エンドポイント」を利用してレジストリにログインできることを確認します。
今回は、ACR のレジストリ公開範囲を検証してみました。無料のパーソナルエディションに、エンタープライズエディションに搭載していない同一リージョンなら利用可能な VPC エンドポイントが提供されている点は面白いです。なお、Inernetエンドポイント無効化や特定 VPC 以外の全てのアクセスを遮断できるエンタープライズエディションの方がセキュリティ的に優れています。
最後に、レジストリを別アカウントのVPCに共有したい場合、CEN を利用したソリューションで実現可能であることを確認しました。もし ACR の公開範囲を限定したいニーズがありましたら、本記事を参考にしてみてください。
条件に該当するページがございません