【AWS_40】AWS ServiceCatalog を試してみる

CloudFormationを検証した流れでServiceCatalogも検証してみます。
AWS Service Catalog とはAWS上で承認されたITサービス(AWSサービス)のカタログを作成、管理することができるサービスのようです。
やはり机上の勉強だけでは??となります。あれもこれも検証していたら勉強が進まないのですが、何かの記事でインプット(机上の勉強)も大事だがアウトプット(説明、記事、復習)することは重要とありましたのでここはしっかり検証して理解を深めたいと思います。
以下サイトを参考に最低限必要な必須項目のみ検証させていただきました。ありがとうございました。
AWS Service Catalog を基礎から学ぶ
https://blog.serverworks.co.jp/service-catalog/foundation
検証したうえで気付いたことです。
管理者ユーザーと一般ユーザーが登場し、管理者ユーザーが作成、設定した内容を一般ユーザーが起動(実行)してAWSリソースを作成すると認識しました。
管理者ユーザーと一般ユーザーの作業は以下のとおりです。管理者ユーザーがすべて段取りして、一般ユーザーは起動(実行)するだけというイメージです。
(認識違っていたらすいません・・・)
■管理者ユーザー
・CloudFomationテンプレートファイルを準備する
・IAMロールを準備する(ServiceCatalogのポートフォリオの制約で割り当てる)
・ポートフォリオの作成
・製品の作成とポートフォリオの割り当て
・ポートフォリオのアクセス設定
・ポートフォリオの制約設定
■一般ユーザー
・製品の起動(実行)
目次
事前準備
参考サイトと同じようにIAMユーザーにポリシーを適用
・管理者ユーザー
ユーザー名:admin
適用ポリシー:AdministratorAccess権限
・一般ユーザー
ユーザー名:user03
適用ポリシー:AWSServiceCatalogEndUserFullAccess権限
※管理者ユーザーと同じリージョンを設定
CloudFomationテンプレートファイルをデスクトップに作成
VPCを作成するテンプレートファイル「01_vpc.yaml」を準備しました。
・01_vpc.yaml
AWSTemplateFormatVersion: ‘2010-09-09’
Resources:
TestVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
– Key: Name
Value: Test-VPC
IAMロールを作成
参考サイトに詳しい説明がなかったので合っているかわかりませんが必要そうだったので作成しています。「ポートフォリオの制約設定(管理者ユーザー)」で利用します。
信頼されたエンティティは、以下の内容を選択、入力し、次へをクリックします。
信頼されたエンティティタイプ:AWSのサービス
ユースケース:ServiceCatalog

「許可ポリシー 」は何も設定せずに次へをクリックします。
「名前、確認、および作成」画面でロール名を入力します。「CreateVPCRoleForServiceCatalog」としました。

その他はデフォルトのままで「ロールを作成」をクリックします。
作成したロールをクリック、「許可」タブを選択し、「許可を追加」を展開して「インラインポリシーを作成」をクリックします。

「JSON」タブを選択し、ポリシーエディタへ以下のコードを上書きで貼り付けて「次へ」をクリックします。

■コード
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:DeleteStack",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeStacks",
"cloudformation:GetTemplateSummary",
"cloudformation:SetStackPolicy",
"cloudformation:ValidateTemplate",
"cloudformation:UpdateStack",
"ec2:*",
"s3:GetObject",
"servicecatalog:*",
"sns:*"
],
"Resource": "*"
}
]
}
「ポリシーの詳細」でポリシー名を入力して「ポリシーの作成」をクリックします。
ポリシー名は、「CreateVPCRoleForServiceCatalogPolicy」としました。

「許可」タブへ作成したIAMポリシーが設定されました。
おそらくですがこのポリシー設定によりServiceCatalogがCloudFomationやS3などのAWSリソースへアクセスできるようになったと認識しています。(たぶん・・・)

ポートフォリオの作成(管理者ユーザー)
AWSマネジメントコンソールで「ServiceCatalog」を検索します。
左ペインのポートフォリオをクリックし、画面右上の「ポートフォリオの作成」をクリックします。

任意の名前でポートフォリオを作成します。
ポートフォリオの説明、所有者も任意の内容を入力して「作成」をクリックします。

ポートフォリオが作成されました。

製品の作成とポートフォリオへの関連付け(管理者ユーザー)
次に任意の名前で製品を作成します。
製品とは、AWS上でデプロイできるようにしたいAWSサービスであり、CloudFormationテンプレートまたはTerraformで管理されています。
AWSマネジメントコンソールで「ServiceCatalog」を検索します。
左ペインの製品リストをクリックし、画面右上の「製品を作成」を展開、「製品を作成」をクリックします。

製品の詳細は、以下の内容を選択、入力します。
製品タイプ:CloudFormation
製品名:任意の名前
製品の説明:製品の説明
所有者:製品の所有者
ディストリビューター:オプションですが、エンドユーザーが後に製品リストを検索する際に検索性が向上するので可能であれば記載しておきます。

バージョンの詳細は、以下の内容を選択、入力します。
バージョンソース:テンプレートファイルの使用
Cloudformation テンプレートファイルをアップロードする:準備したテンプレートファイルを選択します
※この時S3バケットにアップロードされるため、S3バケットが新規作成されます
バージョン名:任意のバージョン名

サポートの詳細は、デフォルトのまま何も入力せず、右下の「製品を作成」をクリックします。

製品が作成されました。

最後に作成した製品をポートフォリオに追加します。
作成した製品にチェックを入れて、アクション > ポートフォリオに製品を追加をクリックします。

製品を追加したいポートフォリオにチェックを入れて「ポートフォリオに製品を追加」をクリックします。

製品が指定したポートフォリオに追加されました。

ポートフォリオのアクセス設定(管理者ユーザー)
ポートフォリオへのアクセス権をユーザーに付与します。今回は「user03」というIAMユーザーに対してアクセスを許可します。
AWSマネジメントコンソールで「ServiceCatalog」を検索します。
左ペインのポートフォリオをクリック、作成したポートフォリオ名をクリックし、アクセスタブを選択します。
「アクセス権の付与」をクリックします。

「IAM Principal」を選択、ユーザータブを選択後、アクセス権を付与するユーザーを選択し、「アクセス権を付与」をクリックします。

ポートフォリオにアクセス権が付与されました。

ポートフォリオの制約設定(管理者ユーザー)
私の認識違いかもしれませんがこの設定がないと一般ユーザーでServiceCatalogの製品は見えるようになりましたが製品を起動するとエラーが表示されました。
おそらくなんですがS3バケット上にCloudFomationテンプレートファイルがあり、ServiceCatalogがS3バケットへアクセスするための権限がないと怒られているのかなと思います。
その流れでいくとVPCを作成するための権限なども必要なのかなと感じました。

参考サイトで指定されているポリシーを適用していきたいと思います。事前準備でIAMロールを作成しておく必要があります。
AWSマネジメントコンソールで「ServiceCatalog」を検索します。
左ペインのポートフォリオをクリック、作成したポートフォリオ名をクリックし、制約タブを選択します。
「制約の作成」をクリックします。

以下の内容を選択、入力します。
製品:作成した製品名
制約タイプ:起動

以下の内容を選択、入力し、「作成」をクリックします。
メソッド:IAMロールを選択
IAMロール:事前準備で作成したIAMロールを選択

制約が作成されました。

製品を起動する(エンドユーザー)
今回使用するエンドユーザー(IAMユーザー)でAWSコンソールにログインし、AWS Service Catalogのコンソール画面を開きます。
製品一覧から起動したい製品を選択して「製品を起動」をクリックします。
このIAMユーザーにはAWS Service Catalogのエンドユーザーに必要な最低限の権限のみが付与された「AWSServiceCatalogEndUserFullAccess」がアタッチされています。そのため、管理者とは異なりAWS Service Catalogの左メニューにはポートフォリオの項目がありません。

以下の内容を選択、入力し、「製品を起動」をクリックします。
プロビジョニングされた製品の名前:任意の名前
製品バージョン:設定したバージョン名

「起動しています」となり、しばらく待ち待す。

「成功」となれば起動処理は完了です。

リソースタブやイベントタブのステータスが「CREATE_COMPLETE」や「成功しました」という表示も確認することができます。
■リソースタブ

■イベントタブ

作成後の確認(管理者ユーザー)
私の場合、一般ユーザー「user03」はVPCの状況を見る権限がないので管理者ユーザーでログインしなおしてVPCを確認しました。
CloudFomationテンプレートファイルのとおりVPCが作成されました。

CloudFomationのスタックを確認するとこの起動(実行)処理によりスタックが作成されていることがわかります。

今回のように別のIAMユーザーでログインしなおしてAWSリソース(VPC)が作成されたことを確認するのが面倒な場合、CloudFormationテンプレートの「Outputs」で作成完了が確認できるように必要なリソースの情報を出力しておけるそうです。
そうするとAWS Service Catalogの「出力」から情報を確認できるようですがちょっとそこまで理解が追い付かないのでまたの機会にしたいと思います。
リソースの削除(管理者ユーザー)
検証で作成されたリソースを削除しておきます。
リソースを作成した管理者ユーザーでサインインします。
・Service Catalog
製品リスト > 製品の削除
ポートフォリオ > ポートフォリオ名クリック > アクセスタブ > ユーザーを選択し、アクセス権を削除
ポートフォリオ > 削除
・S3バケット
ファイルの削除
S3バケットの削除
・IAMロール
作成したIAMロール「CreateVPCRoleForServiceCatalog」を削除
・CloudFomation
スタックの削除
・VPC
VPCの削除(CloudFomationのスタックを削除すると自動で削除されます)
まとめ
AWS ServiceCatalog を検証してみました。
思っていたより事前に準備することが多かったですが、その分勉強になりました。
やはり手を動かすことは大事であるとあらためて感じました。
以下、他の記事をまとめた一覧です。AWSもまとめています。