【AWS re:Invent 2024】宣言型ポリシー(Declarative Policies)の適用方法とSCPとの違いについて

記事タイトルとURLをコピーする

こんにちは!エンタープライズ部クラウドコンサルティング課の山永です。

AWS re:Invent 2024において、AWS Organizationsで利用できる新しい管理ポリシー「宣言型ポリシー(Declarative Policies)」が発表されました。

本記事では実際に宣言型ポリシーを試してみて、その適用方法とSCPとの違いについて解説いたします。

宣言型ポリシーとは

宣言型ポリシー(Declarative Policies)とは、AWS Organizationsで利用可能な新しい管理ポリシーです。SCP(Service Control Policies)と同様に、組織内で非準拠なアクションの実行を防止します。

宣言型ポリシーで制御可能な項目

2024年12月31日時点で、宣言型ポリシーにより以下の制御が可能です。

AWSサービス 制御項目 説明
Amazon VPC VPCブロックパブリックアクセス VPCのパブリックアクセスを制御
Amazon EC2 シリアルコンソールアクセス EC2シリアルコンソールの利用を制御
Amazon EC2 イメージブロックパブリックアクセス AMIのパブリック公開を制御
Amazon EC2 許可されたイメージの設定 使用可能なAMIを制限(例: Amazon検証済みAMIのみ)
Amazon EC2 インスタンスメタデータのデフォルト設定 新規EC2インスタンスのIMDSデフォルト設定を制御
Amazon EBS スナップショットブロックパブリックアクセス Amazon EBSスナップショットのパブリック公開を制御

参考記事

宣言型ポリシーの詳細については公式ドキュメントや弊社ブログ記事でも紹介させていただいておりますので、こちらをご確認ください。

aws.amazon.com

docs.aws.amazon.com

blog.serverworks.co.jp

宣言型ポリシーの適用

まずは「AMIへのパブリックアクセスをブロック」を設定し、実際に制御を試しました。

以下の手順で進めます。

  1. AWS Organizationsで宣言型ポリシーを有効化
  2. ポリシーの作成とOUへのアタッチ
  3. ポリシー適用状況の確認

宣言型ポリシーの有効化

AWS Organizationsサービスページの左側のメニューから、「ポリシー」>「EC2の宣言型ポリシー」を選択し、ポリシーを有効化します。

ポリシーの作成とOUへのアタッチ

ビジュアルエディタでのポリシー作成

ポリシー名を入力し、具体的なポリシー内容についてはビジュアルエディタでの作成が可能です。

カスタムエラーメッセージの設定

オプションでカスタムエラーメッセージの表示も可能です。

生成されたポリシー

{
  "ec2_attributes": {
    "exception_message": {
      "@@assign": "Hello. This action is denied by company policy."
    },
    "image_block_public_access": {
      "state": {
        "@@assign": "block_new_sharing"
      }
    }
  }
}

OUへのアタッチ

作成したポリシーにチェックをつけて「アクション」>「ポリシーのアタッチ」のように選択して、対象とするOUにポリシーをアタッチします。

今回はInfrastructureというOUにポリシーをアタッチしました。

本設定によりInfrastructure OU配下のアカウントに対して宣言型ポリシーが適用されるようになります。

ポリシー適用状況の確認

宣言型ポリシーが適用されているメンバーアカウントにログインして適用状況の確認を行いました。

AWSマネージメントコンソール

EC2の設定ページを確認すると確かに「AMIへのパブリックアクセスをブロック」設定が有効化されていました。

さらに設定変更をしようとしても「管理」ボタンにマウスオーバーすると宣言型ポリシーにより管理されている旨の文言が表示されます。

AWS CLI

コンソールからは上記のような文言しか確認できなかったため、今度はCloudShellを用いて以下のコマンドを実行し、「AMIパブリックアクセスブロック」の無効化を試してみました。

aws ec2 disable-image-block-public-access

実行すると以下のようなエラーが発生し、カスタムメッセージ設定したコメントも表示されることが確認できました。

既存設定に対する挙動確認

既存の「AMIパブリックアクセスブロック」設定が無効化されているアカウントに対してポリシーを適用し、挙動を確認しました。

  1. 管理アカウントでポリシーをデタッチ
  2. メンバーアカウントで「AMIパブリックアクセスブロック」を無効化
  3. 再度ポリシーを適用

宣言型ポリシーのデタッチ

まず管理アカウントにログインし、前の手順で設定した宣言型ポリシーをデタッチします。

AMIへのパブリックアクセスをブロックを無効化

メンバーアカウントにログインし、「AMIパブリックアクセスブロック」設定を無効化します。

宣言型ポリシーの再適用後の挙動確認

宣言型ポリシーを再適用し、メンバーアカウントの設定状況を確認すると宣言型ポリシーにより設定が上書きされ、再度「AMI パブリックアクセスブロック」が有効化されていることが確認できました。

SCPとの比較

通常、SCPを使用して「AMIパブリックアクセスブロック」に関する制御を行う場合は、以下のようなポリシーを作成し、ec2:DisableImageBlockPublicAccessアクションを制限します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyDisableImageBlockPublicAccess",
      "Effect": "Deny",
      "Action": [
        "ec2:DisableImageBlockPublicAccess"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

しかし、SCPには既存の設定を変更する機能がないため、メンバーアカウント内の設定を手動で準拠させる必要があります。

一方で、宣言型ポリシーは適用時に既存設定も自動的に準拠させるため、特に多数のメンバーアカウントを管理する大規模なマルチアカウント環境で有効です。

既存の設定を含めた一貫した統制が可能となり、運用負荷を大幅に軽減できるでしょう。

まとめと感想

宣言型ポリシー(Declarative Policies)は、SCPと比較して以下のような利点があることが分かりました。

既存設定の変更機能:ポリシー適用時に既存設定を自動で準拠させるため、手動での修正作業が不要 柔軟な制御:ビジュアルエディタを使用して簡単にポリシーを作成できるだけでなく、カスタムエラーメッセージの設定も可能 運用効率の向上:大規模なマルチアカウント環境でも一貫した統制を迅速に実現可能

今回は「AMIへのパブリックアクセスをブロック」を例に取り上げましたが、他の制御項目についても今後試していきたいと考えています。

現時点で設定できる項目が少ないので、これからのアップデートに注目しつつ、SCPとの組み合わせによるさらなる活用方法も模索していきたいです。

山永 功二(執筆記事の一覧)

エンタープライズクラウド部クラウドコンサルティング課

マルチアカウント環境の運用支援に取り組んでいます