こんにちは!エンタープライズ部クラウドコンサルティング課の山永です。
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スナップショットのパブリック公開を制御 |
参考記事
宣言型ポリシーの詳細については公式ドキュメントや弊社ブログ記事でも紹介させていただいておりますので、こちらをご確認ください。
宣言型ポリシーの適用
まずは「AMIへのパブリックアクセスをブロック」を設定し、実際に制御を試しました。
以下の手順で進めます。
- AWS Organizationsで宣言型ポリシーを有効化
- ポリシーの作成とOUへのアタッチ
- ポリシー適用状況の確認
宣言型ポリシーの有効化
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パブリックアクセスブロック」設定が無効化されているアカウントに対してポリシーを適用し、挙動を確認しました。
- 管理アカウントでポリシーをデタッチ
- メンバーアカウントで「AMIパブリックアクセスブロック」を無効化
- 再度ポリシーを適用
宣言型ポリシーのデタッチ
まず管理アカウントにログインし、前の手順で設定した宣言型ポリシーをデタッチします。
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との組み合わせによるさらなる活用方法も模索していきたいです。