概要
AWS Service Catalog は、組織で承認された IT サービスのカタログを作成・管理し、エンドユーザーがセルフサービスでリソースをプロビジョニングできる仕組みを提供するサービスです。管理者が CloudFormation テンプレートを「製品」として登録し、ユーザーはカタログから必要な製品を選んで起動するだけで、承認済みの構成でリソースを作成できます。
組織が大きくなると、各チームが自由に AWS リソースを作成することでセキュリティやコンプライアンスの基準を満たさない構成が生まれるリスクがあります。Service Catalog を使うことで、管理者が事前に承認した構成のみをユーザーに提供し、ガバナンスを維持しながらリソースのプロビジョニングを効率化できます。
本記事では、Service Catalog でポートフォリオと製品を作成し、エンドユーザーが製品を起動する一連の流れを体験します。

この記事のメリット
- AWS Service Catalog の基本概念と、組織のガバナンスにおける役割を理解できる
- ポートフォリオと製品の関係性を把握できる
- CloudFormation テンプレートを製品として登録する手順を習得できる
- エンドユーザーとして製品を起動する体験ができる
- 制約機能を使ったガバナンスの強化方法を学べる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
AWS Service Catalog の主要概念



とひさん、AWS Service Catalog って名前だけ聞くとショッピングサイトみたいですけど、どういうサービスですか?
いい質問だね。Service Catalog は、組織で承認された AWS リソースの構成を「カタログ」として管理して、エンドユーザーがそこから選んで起動できる仕組みなんだ。いくつかの概念で構成されているから、まず全体像を見てみよう。


| 概念 | 説明 |
|---|---|
| ポートフォリオ | 製品のコレクション。アクセス権限やガバナンス設定の単位 |
| 製品 | CloudFormation テンプレートで定義された AWS リソースのセット |
| プロビジョニングアーティファクト | 製品のバージョン。テンプレートの各バージョンに対応 |
| プロビジョニング済み製品 | ユーザーが起動した製品のインスタンス(作成された CloudFormation スタック) |
| 制約 | 製品の起動条件やパラメータを制限するルール |



ポートフォリオが入れ物で、その中に製品が入っていて、ユーザーが製品を起動するとプロビジョニング済み製品になる…という流れですね。
そのとおり。プロビジョニングアーティファクトっていうのは製品のバージョン管理の仕組みで、テンプレートを更新したら新しいバージョンとして登録できるんだ。



「制約」っていうのは何ですか?
制約は製品の起動条件やパラメータを制限するルールだよ。これについては後で詳しく説明するね。
ポートフォリオ



ポートフォリオについてもう少し詳しく教えてください。ただの製品のグループなんですか?
製品のグループなんだけど、ポートフォリオ単位でいろいろ管理できるのがポイントなんだ。主に3つの機能があるよ。
- アクセス管理: IAM ユーザー、グループ、ロールに対してポートフォリオへのアクセスを付与
- 制約の設定: 製品の起動ロールやパラメータの制限を定義
- 共有: 他の AWS アカウントや Organizations と共有可能



なるほど、誰がどの製品を使えるかをポートフォリオ単位で制御するんですね。
そうだね。例えば「開発チーム用ポートフォリオ」と「データサイエンスチーム用ポートフォリオ」を分けて、それぞれに適切な製品とアクセス権限を設定する、といった使い方ができるよ。さらに他のアカウントや Organizations と共有もできるから、マルチアカウント環境でも使いやすいんだ。
製品



製品は CloudFormation テンプレートがベースになるんですよね?
そうだよ。製品は CloudFormation テンプレートをベースとした AWS リソースの定義なんだ。1つの製品に対して複数のバージョン、つまりプロビジョニングアーティファクトを持つことができるよ。



テンプレートを改良したら新しいバージョンとして追加すればいいんですね。
そのとおり。古いバージョンも残しておけるから、必要に応じて特定のバージョンを使い続けることもできるんだ。
制約



さっき出てきた「制約」について詳しく教えてもらえますか?
制約はポートフォリオ内の製品に対して設定するルールだよ。いくつかのタイプがあるんだ。
| 制約タイプ | 説明 |
|---|---|
| 起動制約 | 製品起動時に使用する IAM ロールを指定。ユーザーに直接リソース作成権限がなくても製品を起動可能にする |
| テンプレート制約 | CloudFormation パラメータの値を制限する(例: インスタンスタイプを t3.micro のみに制限) |
| 通知制約 | 製品のイベントを SNS トピックに通知する |
| タグ更新制約 | プロビジョニング済み製品のタグ更新を許可または禁止する |



テンプレート制約を使えば、ユーザーが高額なインスタンスタイプを選べないようにする、みたいなことができるんですね。
そうそう。コスト管理やセキュリティポリシーの観点で、パラメータの選択肢を絞りたいときに便利だよ。通知制約を使えばイベントを SNS に飛ばして監視もできるしね。
起動制約の重要性



制約の中でも「起動制約」が特に重要だと聞いたんですが、なぜですか?
これはガバナンスの要だよ。起動制約を設定しない場合、エンドユーザーは製品内の AWS リソースを作成するための IAM 権限を直接持っている必要があるんだ。



それだと、ユーザーに強い権限を渡さないといけなくなりますね…。
そうなんだ。でも起動制約を設定すれば、製品起動時に指定した IAM ロールが使われるから、エンドユーザー自身の権限は最小限でOKなんだよ。ユーザーには Service Catalog を操作する権限だけ渡しておいて、実際のリソース作成は起動制約で指定したロールが行う、という仕組みだね。



なるほど、最小権限の原則を守りながらセルフサービスを実現できるわけですね。
実践
前提条件
- リージョン:
ap-northeast-1(東京) - 以下の IAM ロールが作成済みであること
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| IAM ロール | SCLaunchRole | 製品起動時に Service Catalog が引き受けるロール。信頼されたエンティティは servicecatalog.amazonaws.com、AmazonS3FullAccess と AWSCloudFormationFullAccess をアタッチ |
手順内で作成するリソースは以下のとおりです。
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| ポートフォリオ | Engineering-Portfolio | 製品を管理するポートフォリオ |
| 製品 | S3-Bucket | S3 バケットを作成する製品 |
| プロビジョニング済み製品 | my-s3-bucket | エンドユーザーとして起動した製品 |
CloudFormation テンプレートを準備する
製品として登録するための CloudFormation テンプレートを用意します。以下の内容を sc-s3-bucket.yaml としてローカルに保存します。パラメータの説明(Description)に日本語を使うと、製品起動画面で文字化けして表示されることがあるため、英語で記述しています。
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Service Catalog - S3 Bucket'
Parameters:
BucketName:
Type: String
Description: 'S3 bucket name (prefix)'
Environment:
Type: String
Default: 'dev'
AllowedValues:
- dev
- stg
- prod
Description: 'Environment name'
Resources:
S3Bucket:
Type: 'AWS::S3::Bucket'
Properties:
BucketName: !Sub '${BucketName}-${Environment}'
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
Outputs:
BucketArn:
Value: !GetAtt S3Bucket.Arn
Description: 'ARN of the created S3 bucket'
ポートフォリオを作成する
- AWSマネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
Service Catalogと入力し、表示された「Service Catalog」を選択します - 左側ナビゲーションの「管理者」→「ポートフォリオ」を選択し、「ポートフォリオの作成」をクリックします
- 以下の項目を入力します
- ポートフォリオ名:
Engineering-Portfolio - ポートフォリオの説明:
エンジニアリングチーム向けの承認済みリソースカタログ - 所有者:
Engineering-Team(チーム名や担当者名) - 「作成」をクリックします


- ポートフォリオの一覧に戻り、「ポートフォリオが正常に作成されました」と表示され、
Engineering-Portfolioが一覧に追加されます


製品を作成してポートフォリオに追加する
- 一覧の
Engineering-Portfolioをクリックして詳細画面を開き、「製品」タブで「製品を作成」をクリックします - 「製品の詳細」で以下の項目を入力します
- 製品タイプ:
CloudFormation(デフォルト) - 製品名:
S3-Bucket - 製品の説明:
暗号化とパブリックアクセスブロックが設定された S3 バケットを作成します - 所有者:
Engineering-Team - 「バージョンの詳細」で以下を設定します
- バージョンソース: 「テンプレートファイルの使用」を選択
- 「ファイルの選択」から準備した
sc-s3-bucket.yamlをアップロードします - バージョン名:
v1.0 - その他の項目はデフォルトのままにし、「製品を作成」をクリックします


- ポートフォリオの詳細画面に戻り、「製品」タブに
S3-Bucketが追加されます(表示されない場合はページを再読み込みします)


ポートフォリオにアクセスを付与する
- ポートフォリオ詳細画面の「アクセス」タブを選択し、「アクセス権の付与」をクリックします
- アクセスタイプは「IAM Principal」(デフォルト)のままにします
- 「グループ」「ロール」「ユーザー」のタブから、アクセスを付与する IAM エンティティを選択します。ここでは「ユーザー」タブで、いま操作している IAM ユーザーにチェックを入れます(後の手順でこのユーザーが製品を起動します)
- 「アクセス権を付与」をクリックします


起動制約を追加する
- ポートフォリオ詳細画面の「制約」タブを選択し、「制約を作成」をクリックします
- 以下の項目を設定します
- 製品:
S3-Bucketを選択 - 制約タイプ:
起動を選択 - 「起動の制約」セクションで以下を設定します
- メソッド: 「IAM ロールを選択」(デフォルト)
- IAM ロール:
SCLaunchRoleを選択 - 「作成」をクリックします


エンドユーザーとして製品を起動する
- 左側ナビゲーションの「プロビジョニング」→「製品」を選択します
- エンドユーザー向けの製品リストに
S3-Bucketが表示されます S3-Bucketをクリックし、「製品を起動」をクリックします- 以下の項目を入力します
- プロビジョニングされた製品の名前:
my-s3-bucket - 製品バージョン:
v1.0(1 つしかないため選択済み) - パラメータ BucketName: 一意になるバケット名のプレフィックス(例:
csl-service-catalog-demo-2026) - パラメータ Environment:
dev(デフォルト) - 「製品を起動」をクリックします


プロビジョニング結果を確認する
- プロビジョニングされた製品
my-s3-bucketの詳細画面に遷移します。「ステータス」は最初「変更中」で、1〜2 分ほどで「使用可能」になります - 「出力」タブで、作成された S3 バケットの ARN(
BucketArn)を確認できます。バケット名は<BucketName>-devのようにパラメータから組み立てられています - 「リソース」タブでは、裏側で作成された CloudFormation スタックのリソース(
S3Bucket)を確認できます


まとめ
- AWS Service Catalog は承認済みの IT サービスをカタログとして提供するサービス
- ポートフォリオで製品をグループ化し、アクセス管理と制約を設定できる
- 製品は CloudFormation テンプレートで定義し、バージョン管理が可能
- 起動制約により、エンドユーザーに最小権限を付与しながらリソース作成を許可できる
- テンプレート制約でパラメータの値を制限し、ガバナンスを強化できる
- エンドユーザーはカタログから製品を選ぶだけで、承認済みの構成でリソースをプロビジョニングできる













