📝

AWS Service Catalogを試してみた

2021/05/05に公開

先日、
AWS Service Catalogってなんだろ?
という記事を書いたので、今回は
ご利用開始にあたって - AWS Service Catalog
のチュートリアルを試してみました。

AWS Service Catalog のセットアップ - AWS Service Catalog

新たにユーザーを作るのが面倒だったので、以下のようにしました。

  • 管理者
    • 既存IAMユーザーを使用
    • AdministratorAccess権限を持つ
  • エンドユーザー
    • スイッチロールを使用
    • AWSServiceCatalogEndUserFullAccess権限のみ付与

AWS CloudFormation テンプレートのダウンロード

https://awsdocs.s3.amazonaws.com/servicecatalog/development-environment.template
からサンプルテンプレートをダウンロードします。
Linuxインスタンスを構築するテンプレートです。詳細はドキュメントをご覧下さい。

キーペアを作成する

今回は作成済みのキーペアを使用します。
新規に作成する場合はEC2コンソールで簡単にできます。こちらもドキュメントの手順をご覧下さい。

ポートフォリオを作成する

Service Catalogコンソールでポートフォリオを作成します。

製品を作成する

Linux デスクトップという製品を作成します。

テンプレート制約を追加する

テンプレート制約でインスタンスサイズを制限します。
ドキュメントにある以下の制約をコピペします。

{
  "Rules": {
    "Rule1": {
      "Assertions": [
        {
          "Assert" : {"Fn::Contains": [["t2.micro", "t2.small"], {"Ref": "InstanceType"}]},
          "AssertDescription": "Instance type should be t2.micro or t2.small"
        }
      ]
    }
  }
}

起動制約を追加する

起動制約でエンドユーザーが製品を起動するときにIAMが引き受けるAWS Service Catalog ロールを指定します。

linuxDesktopPolicyというポリシーを作成します。
ドキュメントでは以下のポリシーを指定しています。

   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetObject"
         ],
         "Resource":"*",
         "Condition":{
            "StringEquals":{
               "s3:ExistingObjectTag/servicecatalog:provisioning":"true"
            }
         }
      }
   ]
}

しかし、これだけでは起動時にエラーが発生しました。
エラー内容は

  • CloudFormationのテンプレートの読み取り、実行権限がない
  • テンプレート内のリソースを作成するEC2などの権限がない
    というメッセージでした。
    細かく指定するのが面倒だったので、今回は作成したlinuxDesktopLaunchRoleAdministratorAccessを付与し、このロールを起動制約で指定しました。

ポートフォリオへのアクセス権限のエンドユーザーへの付与

AWSServiceCatalogEndUserFullAccess権限のみを付与したtestというスイッチロール用のIAMロールを指定しました。

エンドユーザーで製品を起動

testにスイッチロールして製品を起動します。

コンソールに表示されたパブリックIPにSSHでログインできることも確認できたので、CloudFormationによるEC2構築はうまくいったようです。

まとめ

AWS Service Catalogの公式チュートリアルを試してみました。
ドキュメントの翻訳が一部うまくいっていないようで、Service Catalogで指定するロールの権限に少しハマりました。
Service Catalogはリソース構築をCloudFormationで行いますが、CloudFormationでも対象のユーザーやロールに権限がないとエラーになるので、同じ考え方だと思います。

参考になれば幸いです。

Discussion