AWS Service Catalog を基礎から学ぶ

記事タイトルとURLをコピーする

3月よりIE課(インターナルエデュケーション課) に異動しました山﨑です。

今回はITガバナンスを強化するための1つの手段である、AWS Service Catalog について整理していきます。

AWS Service Catalog について

AWS Service Catalog とは

AWS Service Catalog とはAWS上で承認されたITサービス(AWSサービス)のカタログを作成、管理することができるサービスです。

世の中には私たちが「選択疲れ」を引き起こしてしまうほどに様々な製品が存在しています。これらの製品の中から私たちが購入する商品を選択しやすいように整理(パッケージング)しているものがカタログと呼ばれるものです。

AWSでも200を超える多くのサービスが提供されているため、ユーザーが全てのAWSサービスを理解して利用することは困難です。そこでユーザーが利用するAWSサービスを選択しやすいように整理(パッケージング)しているものがAWS Service Catalogだと考えてみると理解しやすいかと思います。

AWS Service Catalog のイメージ

AWS Service Catalog の構成要素

AWS Service Catalogで頻出する構成要素について簡単に整理しておきます。

AWS Service Catalog の構成要素

構成要素 説明
ポートフォリオ 製品の集合体を示します。ポートフォリオをエンドユーザーに配布(アクセスを許可)することで、エンドユーザーは必要な製品を選択することができるようになります。
製品 AWS上でデプロイできるようにしたいAWSサービスであり、CloudFormationテンプレートまたはTerraformで管理されています。
「入門ライブラリ」と呼ばれるWell-Architected な製品テンプレートが300以上用意されているため、こちらを活用することも可能です。
GitHub - aws-samples/aws-service-catalog-reference-architectures: Sample CloudFormation templates and architecture for AWS Service Catalog
アクセス ポートフォリオへのアクセス権をユーザーに付与します。IAMユーザー/IAMグループ/IAMロールいずれかのIAMエンティティに対してアクセス権を付与します。
制約 製品を用いてAWSサービスをデプロイする際の方法を制御します。起動制約/テンプレート制約/通知制約 などから選択して必要な制御を行います。
タグ ポートフォリオに付与するタグを指定することができます。
TagOptions デプロイするAWSサービスに付与するタグのテンプレート群であり、ポートフォリオに関連付けることでタグの付与を強制することができます。TagOptions を利用するためには予め「TagOptions ライブラリ」にタグのテンプレートを登録しておく必要があります。
共有 ポートフォリオを別のAWSアカウントに共有することができます

AWS Service Catalog の利用シーン

実際にどのようなシーンで AWS Service Catalog の利用を検討するのか、簡単に整理しておきます。

統一された環境の提供

AWS Service Catalogを使用すると、事前に定義された製品(テンプレート)を使用して一貫した環境を簡単にデプロイすることができます。これにより、AWSの利用に不慣れな方でも簡単にAWS環境を用意することができます。

AWSリソース構築の自動化

AWS Service Catalog はCloudFormationテンプレートを基に製品を作成するため、テンプレート内に定義されたリソースの作成を自動化することができます。これにより手作業による人為的なミスを削減したり、不要なリソースの作成を防止したり、効率的なリソースの管理が可能になります。

ガバナンスの強化

AWS Service Catalog でカタログを作成することができるのは必要な権限を持つ管理者のみです。管理者が会社組織で定められたセキュリティポリシーや利用ルールに従ってカタログを作成することによりガバナンスの強化を実現することができます。

AWS Service Catalog を使ってみる

AWS Service Catalog ではカタログを作成する「管理者」と実際にカタログを利用する「エンドユーザー」の2人の登場人物が出てくるので、それぞれの役割ごとに整理しながらハンズオンをしていきたいと思います。

事前準備

  • 管理者が利用するIAMユーザーおよびIAMグループの作成
    • 今回はAdministratorAccess権限を付与
  • エンドユーザーが利用するIAMユーザーおよびIAMグループの作成
    • AWSServiceCatalogEndUserFullAccess権限を付与
  • CloudFormation テンプレートの作成

AWS Service Catalog 利用における大まかな作業

管理者

項番 作業内容 備考
1 ポートフォリオの作成 必須
2 製品の作成とポートフォリオへの関連付け 必須
3 ポートフォリオの設定(アクセス) 必須
4 ポートフォリオの設定(制約) 任意
5 ポートフォリオの設定(タグ) 任意
6 ポートフォリオの設定(TagOptions) 任意
7 ポートフォリオの設定(共有) 任意

エンドユーザー

項番 作業内容 備考
1 製品の起動 必須

実作業(管理者)

ポートフォリオの作成

ポートフォリオのコンソール画面

任意の名前でポートフォリオを作成します。「所有者」にはこのカタログを管理している部署または管理者を記載しておくことで、問い合わせ先が明確になります。

ポートフォリオの作成画面

製品の作成とポートフォリオへの関連付け

製品リストのコンソール画面

任意の名前で製品を作成します。「所有者」にはこの製品を公開する個人または組織を記載しておくことで、問い合わせ先が明確になります。「ディストリビューター」はオプションですが、エンドユーザーが後に製品リストを検索する際に検索性が向上するので可能であれば記載しておきます。

商品の詳細

ここでCloudFormationテンプレートをアップロードします。製品ではバーション管理が可能なため、バーション名も記載しておきしょう。ちなみに今回は以下のテンプレートを利用してみます。

AWSTemplateFormatVersion: "2010-09-09"
Description: service catalog sample template
Parameters:
  VpcCidr:
    Description: 'CIDR block for the VPC'
    Type: String
    AllowedValues:
      - 10.1.0.0/24
      - 10.2.0.0/24
      - 10.3.0.0/24
      - 10.4.0.0/24
      - 10.5.0.0/24
  VpcName:
    Description: 'Give a Name Tag to VPC'
    Type: String

Resources:
  MyVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: !Ref VpcCidr
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: !Ref VpcName
Outputs:
  CidrBlock:
    Value: !GetAtt MyVPC.CidrBlock

バーションの詳細

「サポートの詳細」ではエンドユーザーがカタログについて問い合わせをしたい場合の連絡先、必要に応じてサポートページのリンクを記載します。

サポートの詳細

最後に先程作成したポートフォリオに製品を追加します。

管理者-製品リスト
ポートフォリオへの追加

ポートフォリオの設定(アクセス)

ポートフォリオへのアクセス権をユーザーに付与します。今回は「Endusers」というIAMグループに対してアクセスを許可します。

ポートフォリオのアクセスタブ
Enduserにアクセス権を付与

ポートフォリオの設定(制約)

今回はポートフォリオに対して「起動制約」を設けます。「起動制約」では指定したIAMロールに割り当てられた権限の範囲内で製品を起動させることができます。これにより、カタログを利用するエンドユーザー(IAMユーザー/IAMグループ/IAMロール)には最小限の権限のみを許可するだけで済みます。

ポートフォリオの制約
制約の詳細

今回指定するIAMロールは「CreateVPCRoleForServiceCatalog」と命名しており、以下のIAMポリシーと信頼関係を設定しています。

IAMポリシー
{
    "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": "*"
        }
    ]
}
信頼関係
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

起動の制約

実作業(エンドユーザー)

製品を起動する

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

製品の起動

必要に応じて値を設定し、起動します

製品の起動画面

「プロビジョニングされた製品」の一覧画面でステータスが「使用可能」になっていることを確認します。実際にVPCのコンソール画面を確認するとVPCが作成されていることが確認できます。「AWSServiceCatalogEndUserFullAccess」のみがアタッチされたIAMユーザーではVPCのコンソール画面の閲覧権限がないため、今回の動作確認ではAdministratorAccess権限を付与した別のIAMユーザーで再度AWSアカウントにログインし、VPCが作成されたことを確認しています。

ステータスを確認
VPCのコンソール画面

わざわざ別のIAMユーザーでログインしてAWSリソースが作成されたことを確認するのは面倒なので、CloudFormationテンプレートの「Outputs」で作成が完了したことが確認できるように必要なリソースの情報を出力しておくと、AWS Service Catalogの「出力」から情報を確認できるので、IAMユーザー切替の手間が省けます

プロビジョニングされた製品の出力

まとめ

今回は以前から気になっていたAWS Service Catalog について基礎的な内容を整理してみました。他にも色々試してみて、有効活用する方法を模索していきたいと思います。

山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ

2019/12〜2023/2までクラウドインテグレーション部でお客様のAWS導入支援を行っていました。現在はIE(インターナルエデュケーション)課にて採用周りのお手伝いや新卒/中途オンボーディングの業務をしています。2023 Japan AWS Top Engineers/2023 Japan AWS Ambassadors