はじめに
ソリューションアーキテクトプロフェッショナルの勉強をしていて、たびたび出てくるService Catalogが気になったので、公式のチュートリアルをなぞってみました。
参考
仕組み
- ポートフォリオ
- 製品集
- 利用の権限を、ユーザに付与する
- 製品
- 作成するリソース
- CloudFormationなどで設定する
料金
以前はポートフォリオに固定料金がかかっていたようですが、現在はコール数だけでの料金になったようです。
やってみた
以下の公式をなぞっていきます。
ステップ 1: AWS CloudFormation テンプレートのダウンロード
多分しなくてよいです。後ほど、S3バケットのURLを直接指定しています。
ステップ 2: キーペアを作成する
今回はEC2を作る製品になりますので、キーペアを作成します。EC2のコンソールからつくりました。
.pemで作りました。
ダウンロードされるので、覚えておきましょう。
ステップ 3: Service Catalog ポートフォリオを作成する
コンソールから作成します。
公式のステップの通りに入力して作成しました。
ステップ 4: Service Catalog 製品の作成
公式の説明の通りの文字列を入力します。
ここでCloudFormationのファイルをURLから指定します。そのため、最初のダウンロードは不要でした。
サポートも入れておきましたけれども、オプションだから不要だったかもしれません。
最後に 製品を作成、をクリックします。
ステップ 5: テンプレート制約を追加してインスタンスサイズを制限する
「指定できるインスタンスタイプを"t2.micro", "t2.small"にする」という制約を追加します。
公式の通りにすれば問題ありません。
制約にはいろいろな種類がありますが、今回はテンプレートの指定になります。
制約の定義も、公式の操作をなぞります。
説明も張り付けて、作成をクリックします。制約のタブに追加されました。
ステップ 6: IAM ロールを割り当てる起動制約を追加する & ユーザも作成
ここで以下を作成します。
- IAMロール
- Service Catalogが、製品を起動するときに使う
付与するポリシーは公式のを使っています。
- Service Catalogが、製品を起動するときに使う
また同じCloudFormation内で以下も作成しています。
- IAMユーザ
- この製品を使うためのユーザ
- Service Catalogのコンソールを使うため、
AWSServiceCatalogEndUserFullAccess
を付与 - 製品に使うCFnテンプレートをS3から落とすため、S3へのGetObjectを付与
- 上記のロールは紐づけていない
AWSTemplateFormatVersion: 2010-09-09
Parameters:
MyPassword:
Type: String
NoEcho: true
Resources:
AWSRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- "servicecatalog.amazonaws.com"
Action:
- sts:AssumeRole
Policies:
- PolicyName: toExecutionProduct
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- access-analyzer:ValidatePolicy
- cloudformation:CreateStack
- cloudformation:DeleteStack
- cloudformation:DescribeStackEvents
- cloudformation:DescribeStacks
- cloudformation:GetTemplateSummary
- cloudformation:SetStackPolicy
- cloudformation:ValidateTemplate
- cloudformation:UpdateStack
- ec2:*
- iam:CreatePolicy
- iam:attachRolePolicy
- s3:GetObject
- servicecatalog:*
- sns:*
Resource: '*'
AWSUser:
Type: AWS::IAM::User
Properties:
LoginProfile:
Password: !Ref MyPassword
PasswordResetRequired: false
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AWSServiceCatalogEndUserFullAccess
Policies:
- PolicyName: getS3
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- s3:GetObject
Resource: '*'
作成できたら、二つ目の制約を作成します。
今度は起動を選択します。
CFnで作成したIAMロールを指定して、作成をクリック。
先ほど作成したテンプレートの制約と合わせて、二つできました。
ステップ 7: ポートフォリオへのアクセス権限のエンドユーザーへの付与
公式とはちょっと説明が異なります。対象のタブを選んで「アクセス権の付与」をクリックします。
今回追加するのはユーザーなので、ユーザータブから指定します。
タブを更新して、追加されたことを確認します。
ステップ 8: エンドユーザーのエクスペリエンスをテストする
製品の起動
作成したユーザーでサインインすると、コンソールから以下のように見れました。
製品を起動、をクリックします。
公式通りに名前を入力します。
パラメータは、先ほど作ったキーを指定して、IPは自分のもの(0.0.0.0/0)でもOK
起動を開始しました。
うまく起動できました。
ユーザにEC2の起動権限を付与していませんが、起動制約に指定したIAMロールが起動してくれたようです。
製品で作られたEC2につなぐ
WindowsのPowerShellから、繋いでみます。コマンドはssh -i "[作成したキーファイル].pem" ec2-user@[インスタンスのPublicDNSName]
になります。
EC2のコンソールから見れるのであれば、対象のインスタンスの接続の情報から見れます。
今回はWindowsからSSHでつなぎます。最初のほうで作成したキーファイルの権限を制限する必要があります。
Windowsの場合はキーファイルの権限を変更するより、ユーザフォルダで動かした方が楽ですので、以下を参考に、そこにファイルを移動して、そこから起動します。
製品の終了(削除)
起動したユーザで、製品を終了させます。
プロビジョニングされた製品、の一覧に、作成したものが出てきます。
”終了”といれて、プロビジョニングされた製品を終了させます。
片付け
-
先に製品から削除します。
-
次にポートフォリオを削除します。
-
CFnで作成したユーザーとロールは、対象のスタックを削除します。
おわりに
今回はService Catalogを触ってみました。
色々な立場の人がAWSを使う場合、それぞれの方にさせたいことをポートフォリオを使って指定する、などに使う機能と感じました。
この記事がどなたかのお役に立てれば幸いです。