Amazon Web Services ブログ

AWS Config 適合パックを使用したAWS Control Tower発見的ガードレールの実装

多くのお客様から、AWS Control Towerによるガバナンスを実現する前に、Control Towerの発見的ガードレールだけを既存のAWSアカウントに適用したいという要望をいただいています。この度、既存のAWS OrganizationでAWS Control Towerを起動できるようになりました。これにより、お客様は既存のアカウントにてAWS Control Towerの発見的ガードレールのコンプライアンスを適用できるようになりました。加えて、我々はControl Towerの配下にアカウントを登録する機能も発表しました。Control Towerガバナンスをアカウントに拡張する前に、Control Towerのガードレールがアカウントにどのように影響するかを確認することをお勧めします。

このブログでは、AWS Config適合パックを使用してControl Towerガードレールを既存のアカウントに適用する方法を示します。AWS Control Towerに登録する前に、そのアカウントのリソースのコンプライアンスを評価できます。また、適合パックを変更し、管理されていないアカウントに発見的ガードレールのサブセットを適用する方法を示します。最後に、適合パックを使用して、AWS Control Towerがデプロイされていないリージョンに存在するアカウントのリソースを管理する方法を示します。

背景

既存のAWS OrganizationでAWS Control Towerを有効にすると、Control Towerによって作成された新しい組織単位(OU)は、すべての必須ガードレールが自動的に適用されます。ただし、Control Towerの管理下にないOUに作られたアカウントは、Control Towerでは管理されません。

AWS Control Towerをデプロイする前に作成したアカウントは、AWS Control Towerのガバナンスの範囲外のままです。これらのアカウントは、AWS Control Towerに明示的に登録する必要があります。方法については、こちらのブログをご覧ください。

アカウントをAWS Control Towerに登録すると、ベースラインと追加のガードレールが適用され、既存のAWSアカウントの継続的なガバナンスが可能になります。ただし、アカウントに登録する前に、適切なデューデリジェンス(事前評価)を実行する必要があります。詳しくは以下の「考慮すべき事柄」のセクションを参照してください。

この投稿で使用されているいくつかの用語について簡単に説明します。

  • AWS Config適合パックは、アカウント、リージョン、またはAWS Organizationsの組織全体にわたる単一のエンティティとして、簡単にデプロイできるAWS Configルールと修復アクションのコレクションです。
  • 未登録OUは、AWS Organizationsで直接作成された組織単位あり、AWS Control Towerが管理していないOUです。
  • 未登録アカウントは、AWS Control Towerをデプロイする前に作成された既存のAWSアカウントです。
  • 登録済みOUは、Control Towerサービスから作成された組織単位です。
  • AWS Account Factoryアカウントは、AWS Control Towerのアカウントファクトリーを使用してプロビジョニングされたAWSアカウントです。

 考慮すべき事柄

既存のAWSアカウントをAWS Control Towerに登録するには、未登録OU、またはOrganizationのルートから、登録済みOUにアカウントを移動する必要があります。 AWS Control Towerの配下にアカウントを登録する前に、アカウントで実行されているリソースを理解することが重要です。ここで 適合パックを使うことで、アカウントのリソースにAWS Control Towerガードレールを適用した場合の影響を評価できます。

前提

こちらのブログ投稿に従って、アカウントリソースの多くを配置しているリージョンでAWS Configを有効にします。 「Deploying your first conformance pack」のステップに達したら、以下のステップに進みます。

AWS Control Tower ガードレール適合パックのデプロイ

  • AWS Control Tower ガードレール適合パックをローカルマシンにダウンロードします。
  •  AWSマネジメントコンソールにサインインし、AWS Configコンソールを開きます。https://console.aws.amazon.com/config/
  •  [適合パック]ページに移動し、[適合パックをデプロイする]を選択します。
  •  [テンプレートを指定]ページで、サンプルテンプレートを使用するか、既存のテンプレートを使用します。
    •  [テンプレートの準備ができました]を選択し、テンプレートソースとして[テンプレートファイルをアップロード]を指定します。テンプレートが50 KBを超える場合は、テンプレートをS3バケットにアップロードし、そのS3バケットの場所を選択します。例) s3://bucketname/prefix
    • [次へ]をクリックします。
  • [適合パックの詳細を指定]ページで、適合パックの名前を入力します。適合パックの名前は、最大256文字の英数字からなる固有の名前でなければなりません。名前にはハイフンを含めることができますが、スペースを含めることはできません。
  • [S3バケットを作成]を選択し、名前がawsconfigconformsで始まることを確認します。アカウント番号を含めて、バケット名が一意であることを確認します。(例:awsconfigconforms-012345678901)
  • [次へ]をクリックします。
  • [適合パックの確認とデプロイ]ページで、すべての情報を確認します。 [編集]を選択して、テンプレートの詳細と規格適合パックの詳細を編集できます。
  • [適合パックをデプロイ]をクリックします。 [適合パック]ページにて適合パックのステータスが表示されます。適合パックのデプロイメントが失敗した場合は、パーミッションを確認し、前提条件のステップを実行したことを確認して、再試行してください。または、AWSサポートにお問い合わせいただくこともできます。

AWS Config Dashboardでアカウントのリソースのステータスを確認します。

  • AWSマネジメントコンソールにサインインし、AWS Configコンソールを開きます。https://console.aws.amazon.com/config/
  • AWSマネジメントコンソールメニューで、リージョンがAWS Configルールをサポートするリージョンに設定されていることを確認します。サポートされているリージョンのリストについては、AWS全般のリファレンスの「AWS Config および AWS Config ルール エンドポイントとクォータ」を参照してください。
  • ナビゲーションペインで、[ルール]を選択します。 [ルール]ページには、ルールとそれぞれのコンプライアンスステータスが表示されます。
  • リストからルールを選択します。
  • ナビゲーションペインで、[リソース]を選択します。 [リソース]ページには、リソースとそれぞれのコンプライアンスステータスが表示されます。

AWS Control Towerの各ガードレール(ルール)に対してリソースのステータスを確認できます。既存の各アカウントの各リージョンにある非準拠リソースの数を確認することができます。次に、非準拠リソースをどのように対処するかを決定する必要があります。ここで思い出してください。既存のアカウントをControlTowerに登録すると、そのアカウントの非準拠リソースがAWS Control Towerダッシュボードにも表示されます。準拠していないすべてのリソースを修正後に登録することもできます。または、AWS Control Towerダッシュボードに非準拠のリソースが表示されることを理解した上でアカウントを登録することを選択できます。

 独自のガードレール適合パックの作成

AWS Control Towerの発見的ガードレール適合パックには、AWS Control TowerのAWS Configルールベースのガードレールがすべて含まれています。 AWS Control Towerの管理対象OUに適用する予定のガードレールのみについて、アカウント内のリソースを調査することもできます。その場合には、ニーズに合わせてガードレール適合パックを変更します。以下のテンプレートスニペットに示すように、適合パックはconfigルールが定義されたCloudFormationテンプレートのリソースブロックにすぎません。すべてのガードレールがAWS Configマネージドルールであることに注意してください。したがって、使用するルールを選択するには、不要な各ルールに関して#Resourceのようにリソースブロックをコメントすることで削除できます。

Resources:
  CheckForEbsOptimizedInstance:
    Type: AWS::Config::ConfigRule
    Properties:
      ConfigRuleName: CheckForEbsOptimizedInstance
      Description: Disallow launch of EC2 instance types that are not EBS-optimized - Checks whether EBS optimization is enabled for your EC2 instances that can be EBS-optimized
      Source:
        Owner: AWS
        SourceIdentifier: EBS_OPTIMIZED_INSTANCE
      Scope:
        ComplianceResourceTypes:
          - AWS::EC2::Instance
  CheckForEc2VolumesInUse:
    Type: AWS::Config::ConfigRule
    Properties:
      ConfigRuleName: CheckForEc2VolumesInUs
      Description: eDisallow EBS volumes that are unattached to an EC2 instance - Checks whether EBS volumes are attached to EC2 instances
      InputParameters:
        deleteOnTermination: None
      Source:
        Owner: AWS
        SourceIdentifier: EC2_VOLUME_INUSE_CHECK
      Scope:
        ComplianceResourceTypes:
          - AWS::EC2::Volume

最初のルール「CheckForEbsOptimizedInstance」を削除するだけの場合、スニペットは次のようになります。

Resources:

  CheckForEc2VolumesInUse:
    Type: AWS::Config::ConfigRule
    Properties:
      ConfigRuleName: CheckForEc2VolumesInUs
      Description: eDisallow EBS volumes that are unattached to an EC2 instance - Checks whether EBS volumes are attached to EC2 instances
      InputParameters:
        deleteOnTermination: None
      Source:
        Owner: AWS
        SourceIdentifier: EC2_VOLUME_INUSE_CHECK
      Scope:
        ComplianceResourceTypes:
          - AWS::EC2::Volume

この新しいテンプレートを別のファイル名で保存し、元のデプロイに使用したのと同じ手順を使用して、このカスタム適合パックをデプロイします。

独自のガードレール適合パックによる、AWS Control Towerがデプロイされていないリージョンのリソース管理

ここまでで独自の適合パックを作成しました。ここからはControl Towerが現在サポートしていないAWSリージョンのリソースを管理する方法を紹介します。アカウントはAWS Control Towerが管理するOUにありますが、ワークロードは、現在AWS Control TowerがサポートしていないAWSリージョン内で実行されているとします。 AWS Control Towerは、アカウントがAWS Configレコーダーを変更または作成できないよう、Service Control Policy(SCP)ベースのガードレールを実装しています。アカウントを含むOUから一時的にSCPをデタッチし、AWS Configに必要な変更を加え、適合パックをデプロイしてから、SCPを再度アタッチします。

詳細な手順は次のとおりです。

  • OrganizationsのマスターアカウントのAWSマネジメントコンソールにサインインし、AWS Organizationsコンソールを開きます。https://console.aws.amazon.com/organizations/
  • [ポリシー]タブを選択します。
  • [aws-guardrails-XXXXX]のような名前のポリシーを選択し、ページの右側で、ポリシーがアタッチされているOUを確認します。[デタッチ]をクリックします。
  • 適合パックを適用するアカウントのAWSマネジメントコンソールにサインインし、AWS Configコンソールを開きます。https://console.aws.amazon.com/config/
  • AWS Control Tower 発見的ガードレール適合パックをダウンロードし、「AWS Control Tower ガードレール適合パックのデプロイ」セクションの手順に従います。
  • 適合パックの最初の起動時に作成したS3バケットを使用して、適合パックをデプロイするリージョンごとに手順を繰り返します。
  • すべてのリージョンでデプロイされたら、Organizations マスターアカウントのAWSマネジメントコンソールにサインインし、AWS Organizations コンソールを開きます。https://console.aws.amazon.com/organizations/
  •  [アカウントの整理]を選択します。使用したアカウントをホストするOUを選択します。 [サービスコントロールポリシー]にて、前のステップでデタッチしたポリシーを選択します。右側でOUを選択し、[アタッチ]をクリックします。

AWS Control Towerがそのリージョンで使用可能になったときには、デプロイした適合パックを削除し、追加されたリージョンを使用するように新しいAWS Control Towerの設定を更新します。

クリーンアップ手順

AWS Config適合パックのクリーンアップは、AWS Configコンソールを使用して適合パックを選択し、[アクション]ボタンから[削除]を選択するだけで、簡単に実施できます。

まとめ

この投稿では、AWS Control Towerに登録する前に、AWS Control Towerの発見的ガードレールを既存の未登録アカウントにデプロイする方法を示しました。また、アカウント管理に使用したいガードレールのみを反映できるよう、適合パックを変更する方法を示しました。最後に、適合パックを使用して、現在AWS Control Towerがサポートしていないリージョンのリソースを管理する方法を示しました。

著者について

Bryan Millerは、AWS Control TowerおよびAWS Service Catalogのシニアスペシャリストです。Bryanは、お客様のクラウドジャーニーを加速すべく、自動化ソリューションの構築を支援しています。

 

 

原文はこちら。翻訳はSA石橋が担当しました。