はじめに
- どうもkakeruです。今回はAWS Service Catalogの利用方法について記載していきたいと思います。
なぜAWS Service Catalogを利用するのか
- AWS Service Catalogを利用するメリットととして以下が挙げられます。
- Service Catalogを利用することで、子アカウントに必要以上の権限をつけることなく必要な設定を配布することができる。
- 親アカウントにて子アカウントに作成された製品の確認ができる。
- 制約にてStackSetを利用することができる。
- 指定のリージョン・アカウントで製品を配布できる。
- StackSetを利用する場合は、子アカウントに権限が必要。
事前準備
IAM Roleの作成-管理者側
- 制約にてStack Setを利用する場合、管理者側のアカウントに[AWSCloudFormationStackSetAdministrationRole]を作成する必要があります。
IAM Roleの作成-ユーザ側
- 制約にてStack Setを利用する場合、ユーザ側のアカウントに[AWSCloudFormationStackSetExecutionRole]を作成する必要があります。
- [AWSCloudFormationStackSetExecutionRole]に、スタック作成に必要なIAMポリシーをつけること
信頼関係の追加
- Service Catalogを利用するために[AWSCloudFormationStackSetExecutionRole]に親アカウントとの信頼関係を追加する必要がある。
- 以下に記載のJsonファイルを利用してRoleに管理者アカウントとの信頼関係を追加する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<管理者ユーザID>:root"
},
"Action": "sts:AssumeRole"
}
]
}
Service Catalogの利用方法
- 今回はService Catalogを利用して、CloudTrailの証跡を作成する設定を配布したいと思います。
- Service Catalogの制約にStackSetを利用します。
ポートフォリオの作成
- 製品を格納するポートフォリオを作成する。
- [ポートフォリオ]-[ポートフォリオを作成]の順にクリックする。
- ポートフォリオの作成画面にて下記情報を入力後、[作成]をクリックする。
- ポートフォリオ名
- 説明(オプション)
- 所有者名
- 所有者名を入力
留意事項
- ポートフォリオは1つにつき5ドル/月かかることに注意。
動作確認項目
- [ローカルのポートフォリオ]に作成したポートフォリオが表示されれば完了。
製品のアップロード
- 製品をService Catalogにアップロードする。
- [製品]-[新しい製品のアップロード]をクリックする。
- 製品の詳細にて下記情報を入力
- 製品名
- 説明 – オプション
- 所有者
- ディストリビューター – オプション
- バージョンの詳細、サポートの詳細にて下記情報を入力し、[確認]をクリック。
- バージョンの詳細
- テンプレートファイルの使用を選択
- テンプレートファイルのアップロード
- [ファイルの選択]をクリックしテンプレートファイルを指定する。
- バージョンのタイトル
- 説明 – オプション
- サポートの詳細
- 連絡先Eメール – オプション
- 製品に問題が発生した場合に報告するEメールアドレス
- サポートリンク – オプション
- ユーザがサポート情報を見つけることができるサイトのURL
- サポートの説明 – オプション
- 内容を確認して[製品の作成]をクリックする。
利用するテンプレート
AWSTemplateFormatVersion: 2010-09-09
Description: CloudTrail
Resources:
# CloudTrailログ格納用バケット
CloudTrailLogsBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: aws:kms
ObjectLockEnabled: true
ObjectLockConfiguration:
ObjectLockEnabled: Enabled
Rule:
DefaultRetention:
Days: 1
Mode: GOVERNANCE
# CloudTrailログ格納用バケットポリシー
CloudTrailLogsBucketPolicy:
Type: AWS::S3::BucketPolicy
DependsOn:
- CloudTrailLogsBucket
Properties:
Bucket: !Ref CloudTrailLogsBucket
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: CloudTrailAclCheck
Effect: Allow
Principal:
Service: cloudtrail.amazonaws.com
Action: s3:GetBucketAcl
Resource: !Sub arn:aws:s3:::${CloudTrailLogsBucket}
- Sid: CloudTrailWrite
Effect: Allow
Principal:
Service: cloudtrail.amazonaws.com
Action: s3:PutObject
Resource: !Sub arn:aws:s3:::${CloudTrailLogsBucket}/AWSLogs/${AWS::AccountId}/*
Condition:
StringEquals:
s3:x-amz-acl: bucket-owner-full-control
#CloudTrail
CloudTrail:
Type: AWS::CloudTrail::Trail
DependsOn:
- CloudTrailLogsBucket
- CloudTrailLogsBucketPolicy
Properties:
S3BucketName: !Ref CloudTrailLogsBucket
IncludeGlobalServiceEvents: true
IsLogging: true
IsMultiRegionTrail: true
EnableLogFileValidation: true
動作確認項目
製品をポートフォリオに追加
- 作成した製品をポートフォリオに追加する。
- ポートフォリオの画面にて、対象のポートフォリオにチェックを入れた後、[ポートフォリオへの製品の追加]をクリックする。
- アップロードした製品にチェックをいれ、[ポートフォリオへの製品の追加]をクリックする。
留意事項
動作確認項目
- ポートフォリオの詳細画面に追加した製品が表示されれば完了。
制約にてStack Setを利用する
- 製品に紐付けた制約を作成することによって製品の制御ができる。
- [制約]-[制約を作成]の順にクリックする。
- 制約を追加する製品名を選択し、[StackSet]にチェックを入れる。
- スタックセットの制約にて以下情報を指定し、[作成]をクリックする。
- アカウントの仕様
- メソッド
- [アカウントをCSVでアップロード]または[手動でアカウントを追加]にチェックを入れる。
- [アカウントをCSVでアップロード]を選択した場合は、CSVファイルを選択し、アップロードする。
- リージョンの仕様
- アクセス許可
- IAM管理者ロール
- 事前準備で作成した[AWSCloudFormationStackSetAdministrationRole]を指定する。
- IAM StackSet 実行ロール名
- 事前準備した[AWSCloudFormationStackSetExecutionRole]を入力する。
- スタックセットの制約の説明 – オプション
留意事項
動作確認項目
- ポートフォリオの詳細画面にて作成した制約が表示されれば完了。
ユーザにポートフォリオへのアクセス権限をつける
- ユーザにポートフォリオへのアクセス権限をつけることでユーザが製品を作成できるようになる。
- ポートフォリオの詳細画面にて、[グループ、ロール、およびユーザー]-[グループ、ロール、またはユーザーの追加]の順にクリックする。
- アクセス権を不要したいグループ、ロール、またはユーザーにチェックを入れ、[アクセス権の追加]をクリックする。
動作確認項目
- 追加したグループ、ロール、またはユーザーが表示されれば完了。
利用方法-ユーザ側
製品を作成する
- 前手順でアクセス権限を追加したユーザにてサインイン。
- Service Catalogにて[製品]をクリックする。
- 作成したい製品にチェックをいれ、[製品の起動]をクリックする。
- プロビジョニングされた製品の名前にて作成する製品の名前を入力する。
- 特にこだわりがなければ名前の生成にチェックを入れると自動で製品の名前を作成してくれる。
- [製品の起動]をクリックする。
動作確認項目
- [プロビジョニングされた製品の詳細]画面に遷移し、ステータスが[使用可能]となり、イベントのステータスが[SUCCEEDED]と表示されれば完了。
- CloudTrailのコンソールにて設定が反映されていることを確認すること。
終わりに
- 今回は、AWS Service Catalogの制約にてStackSetを利用しました。現在、複数リージョンの複数アカウントに製品を配布するには子アカウント側に権限が必要です。そこが解消されれば、さらに使いやすくなると感じました。