はじめに
VMware Cloud on AWS (VMC) の Software Defined Data Center (SDDC) を作成する際に AWS アカウントとリンクするステップがあります。以前の記事で Elastic Network Interface (ENI) 経由での接続の詳細について記載しましたが、今回はその前段階の AWS アカウントとリンクする際に実際に何が行われているかを、実際の環境を見ながら確認していきたいと思います。
目次
- VMware Cloud on AWS のアカウント構造
- 顧客所有の AWS アカウントとのリンク
- CloudFormation の実行
- CloudFormation の実行で何が作成されるのか?
- まとめ
- 参考文献
- 関連記事
VMware Cloud on AWSのアカウント構造
VMC では大きく分けて 2つの AWS アカウントが利用されます。まず 1つ目は VMC の SDDC が稼働する為の AWS アカウントです。VMC は AWS 上でデプロイされますので、もちろんそのリソース(例えば EC2 ベアメタルインスタンス)用の AWS アカウントが存在しますが、これは VMware が所有し、運用を行います。VMware が管理を行う為、VMC を利用するユーザーは、この AWS アカウントのマネジメントコンソールへはアクセスできません。
2つ目のアカウントは、顧客(ユーザー)が所有する AWS アカウントです。ユーザーが所有、運用を行い、もしそのアカウント内でAWSサービスを利用した場合の費用の支払いを行います。このアカウントは通常 AWS を利用する場合も全く同じものになります。
2つのアカウントをまとめると以下の表、図のようになります!
VMware Cloud on AWS SDDC アカウント | 顧客所有の AWS アカウント |
---|---|
SDDC リソースを実行するための専用の AWS アカウント VMware による所有、運用、支払い |
AWS のサービスへのアクセス 顧客による所有、運用、支払い |
1つ目の SDDC アカウントについては、ユーザーがアクセスする事はないので、VMC を利用するにあたって特に意識をする必要はありません。必要な操作は VMC コンソールを通じて行います。
顧客所有のAWSアカウントとのリンク
SDDC を作成する際に以下のように AWS アカウントとリンクをさせるステップがあります。
初めて使用する Org の場合、Org に紐づけられた AWS アカウントがまだない為、「AWS アカウントの選択」が新しい AWS アカウントに接続という表示になっており、CLOUDFORMATION テンプレートを使用して、AWS コンソールを開くボタンが表示されます。
アカウントのリンクの為にこのボタンをクリックして次のステップに進みます。
CloudFormationの実行
先ほどのCLOUDFORMATION テンプレートを使用して、AWS コンソールを開くボタンをクリックすると AWS のマネジメントコンソールへのサインイン画面が表示されますので、リンクさせたい AWS アカウントにてサインインを行います。
サインインをすると CloudFormation の作成の画面が表示されます。
IAM ロールの作成の承認のチェックボックスにチェックを入れ、それ以外は変更せずにスタックの作成ボタンをクリックします。
CloudFormation の展開先としてオレゴンリージョンが選択されています。特に要件がない場合、オレゴンリージョンのままにしておきましょう。SDDC を作成するリージョンに関係なく、オレゴンリージョンで実行して問題ありません。
VMware Cloud on AWS CloudFormation テンプレート (CFT) は、AWS US West(オレゴン)リージョンで実行されます。必要な権限はすべてのリージョンで有効であるため、生成された SDDC の作成場所は影響を受けませんが、CFT を実行する AWS アカウントからオレゴン リージョンへのアクセスが AWS サービス コントロール ポリシー (SCP) によって制限されないようにする必要があります。CFT がロードされたら、必要に応じて編集し、リージョンを変更することができます。CFT は任意のリージョンで実行できますが、実行された場所を記録した内部ドキュメントを保持する必要があります。オレゴン リージョンにアクセスできるメンバーが組織にいない場合は、[CloudFormation テンプレートを使用して、AWS コンソールを開く] をクリックしたときに指定したリンクから CFT をダウンロードすることができます。また、VMC 組織への AWS アカウントのリンクは 1 回のみ行われるため、実行する AWS 管理者にこのリンクを送信することもできます。
From VMware Cloud on AWS ドキュメント
CloudFormation の実行が完了し、VMC コンソールに戻ると「接続が正常に確立されました。」と表示され、次のステップに進む事ができます。
そして AWS アカウントとの接続が確立されると、その AWS アカウントの VPC、サブネット情報が取得できるようになるので、以下のように VPC、サブネットの指定をドロップダウンからできるようになります。
CloudFormationの実行で何が作成されるのか?
実行された CloudFormation のスタックのリソースを見ると 4つの Identity and Access Management (IAM) ロールと 1つの Lambda 関数が作成されている事が確認できます。
IAMロール
以下 4つの IAM ロールが作成されます。
- RemoteRole
- RemoteRolePlayer
- RemoteRoleService
- BasicLambdaRole
3つのRemoteRole〜 のIAM ロールは AmazonVPCCrossAccountNetworkInterfaceOperations という AWS 管理のポリシーがアタッチされています。
ポリシーの詳細は以下の通りとなっています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeRouteTables",
"ec2:CreateRoute",
"ec2:DeleteRoute",
"ec2:ReplaceRoute"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeNetworkInterfaces",
"ec2:CreateNetworkInterface",
"ec2:DeleteNetworkInterface",
"ec2:CreateNetworkInterfacePermission",
"ec2:DeleteNetworkInterfacePermission",
"ec2:DescribeNetworkInterfacePermissions",
"ec2:ModifyNetworkInterfaceAttribute",
"ec2:DescribeNetworkInterfaceAttribute",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeRegions",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:AssignPrivateIpAddresses",
"ec2:UnassignPrivateIpAddresses"
],
"Resource": [
"*"
]
}
]
}
3つのロールはそれぞれ別の AWS アカウントが信頼されたエンティティとして指定されています。このロールが作成されている為、SDDC 作成時に AWS アカウントをリンク後、そのアカウントが持っている VPC やサブネットの情報が見れるようになるんですね。
4つ目の BasicLambdaRole ロールは Lambda の実行ロールです。
2つのインラインポリシーが付与されていました。CloudWatch Logs への書き込みや、VPC の情報の取得の許可が含まれています。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:*"
],
"Resource": "arn:aws:logs:*:*:*",
"Effect": "Allow"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*",
"Effect": "Allow"
},
{
"Action": [
"ec2:DescribeVpcs",
"ec2:DescribeRouteTables",
"ec2:DescribeSubnets"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Lambda
CloudFormation スタックにて作成された Lambda 関数はインベント通知用として利用されます。
この Lambda 関数に先ほどの BasicLambdaRole ロールがアタッチされています。
まとめ
今回は SDDC を作成する際の AWS アカウントとリンクする際に実際に何が行われているかを、実際の環境を見ながら解説をしてみました。普段は CloudFormation のスタックをただ実行するだけで裏でどういった処理がされているか意識する事なく利用できる為、あまり気にしない部分かもしれませんが、詳細を知ることで、どう VMC と AWS サービスが連携されるかより詳細を理解できるようになるかと思います!
SDDC 作成の次のステップとして、指定したVPC・サブネット・ルートテーブルに何が追加されるのかは別記事でまとめておりますので、そちらも是非参照下さい。
参考文献
関連記事