IaaS

AWS Service Catalogの利用方法

はじめに

  • どうもkakeruです。今回はAWS Service Catalogの利用方法について記載していきたいと思います。

なぜAWS Service Catalogを利用するのか

  • AWS Service Catalogを利用するメリットととして以下が挙げられます。
    • Service Catalogを利用することで、子アカウントに必要以上の権限をつけることなく必要な設定を配布することができる。
    • 親アカウントにて子アカウントに作成された製品の確認ができる。
    • 制約にてStackSetを利用することができる。
      • 指定のリージョン・アカウントで製品を配布できる。
      • StackSetを利用する場合は、子アカウントに権限が必要。

事前準備

IAM Roleの作成-管理者側

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]を入力する。
    • スタックセットの制約の説明 – オプション

留意事項

  • 事前準備で作成したRole名を指定すること

動作確認項目

  • ポートフォリオの詳細画面にて作成した制約が表示されれば完了。

ユーザにポートフォリオへのアクセス権限をつける

  • ユーザにポートフォリオへのアクセス権限をつけることでユーザが製品を作成できるようになる。
  • ポートフォリオの詳細画面にて、[グループ、ロール、およびユーザー]-[グループ、ロール、またはユーザーの追加]の順にクリックする。
  • アクセス権を不要したいグループ、ロール、またはユーザーにチェックを入れ、[アクセス権の追加]をクリックする。

動作確認項目

  • 追加したグループ、ロール、またはユーザーが表示されれば完了。

利用方法-ユーザ側

製品を作成する

  • 前手順でアクセス権限を追加したユーザにてサインイン。
  • Service Catalogにて[製品]をクリックする。
  • 作成したい製品にチェックをいれ、[製品の起動]をクリックする。
  • プロビジョニングされた製品の名前にて作成する製品の名前を入力する。
    • 特にこだわりがなければ名前の生成にチェックを入れると自動で製品の名前を作成してくれる。
  • [製品の起動]をクリックする。

動作確認項目

  • [プロビジョニングされた製品の詳細]画面に遷移し、ステータスが[使用可能]となり、イベントのステータスが[SUCCEEDED]と表示されれば完了。
  • CloudTrailのコンソールにて設定が反映されていることを確認すること。

終わりに

  • 今回は、AWS Service Catalogの制約にてStackSetを利用しました。現在、複数リージョンの複数アカウントに製品を配布するには子アカウント側に権限が必要です。そこが解消されれば、さらに使いやすくなると感じました。

kakeru

こんにちは、セキュリティチーム所属の新米エンジニアkakeruです。業務で少しでも役に立つ情報をブログに書いていきますので、よろしくお願いします。