【Organizations新機能】宣言型ポリシーを使ってみる

# はじめに

今回は AWS re:Invent 2024 期間中に発表された AWS Organizations の新機能「宣言型ポリシー（Declarative Policies）」に着目していきます！

普段の業務では IAM や AWS Organizations を利用しており、アクセス管理やポリシーの最適化に日々頭を悩ませております。
re:Invent でこの新機能の発表を受けて、是非試してみたいと思いました。本記事では宣言型ポリシーについて解説し、実際に触ってみた感想を共有します。

　
なお、本記事は AWS Jr.Champions Adventcalendar 2024 の 19 日目の記事です！
Jr.Champions の執筆記事は[こちら](https://qiita.com/organizations/aws-jr-champions)からチェックすることができます。Jr.Champions の皆さんのご活躍を是非ご覧下さい！


# 宣言型ポリシーとは

宣言型ポリシー（Declarative Policies）は、AWS Organizations のポリシー管理をさらに強化するための新しいアプローチです。ざっくり説明すると、予防的ガードレールの 1 つで、SCP / RCP と同様に「組織内で定める非準拠アクション」の実行を防止することができます。

　
宣言型ポリシーの特徴や、 SCP / RCP との違いは下記です。

### 宣言型ポリシーの主な特徴

- **サービスコントロールプレーンで適用される**:　API レベルではなく、サービスレベルで直接適用されるため、サービスに新しい機能や API が導入された場合でも設定変更が不要
- **エラーメッセージをカスタマイズ可能**: エンドユーザーのアクション失敗時、理由の詳細を表示できるため、ガバナンスの運用上の複雑さが大幅に軽減される

:::note info
SCP における非準拠アクションの定義では、新しい API や機能が追加されると定義も更新しなければならない場合があります
:::

つまり、防止したいアクションを宣言するのみで、複雑なポリシー設定や宣言後の更新は無しで目的が達成できます。


## SCP や RCP との違い

SCP や RCP と宣言型ポリシーの違いを整理すると、次のようになります。

|              | **SCP**                       | **RCP**                      | **宣言型ポリシー**                |
|----------------------|-------------------------------|------------------------------|-----------------------------------|
| **目的**        | IAM ユーザーやロールのアクセス制御 | リソースへのアクセス制御  | AWS サービスのベースライン設定            |
| **制御**          | API レベル                       | API レベル                        | API アクションを使用せずに、AWS サービスの必要な構成を適用                       |
| **フィードバックメカニズム**    | カスタマイズ不可のエラーメッセージ                   | カスタマイズ不可のエラーメッセージ                       | カスタマイズ**可能**なエラーメッセージ     |



## 宣言型ポリシーでサポートされている属性
2024/12 時点、宣言型ポリシーとして設定可能な項目は下記です。

| サービス | 項目                               | 説明                                      |
|----------|------------------------------------|-------------------------------------------|
| **VPC**  | VPC のブロックパブリックアクセス  | VPC レベルでパブリックアクセスを制御 |
| **EC2**  | シリアルコンソールアクセス         | EC2 シリアルコンソールへのアクセスを制御 |
|     **EC2**     | Image のブロックパブリックアクセス  | AMI がパブリックに共有されることを制限 |
|     **EC2**     | 許可された AMI の利用             | 利用可能な AMI を指定して制限              |
|     **EC2**     | インスタンスメタデータのデフォルト  | 新しい EC2 インスタンスメタデータサービス (IMDS) のデフォルトを制御 |
| **EBS**  | スナップショットブロックパブリックアクセス | EBS スナップショットがパブリックに共有されることを制限 |


# 実践

今回はサービス属性「VPC のブロックパブリックアクセス」を選択して実際に制御をかけてみます。おおまかな作業の流れは下記です。

 　
・Organizations で宣言型ポリシーを有効化
・宣言型ポリシーを定義し、OU（アカウント）へアタッチ
・動作確認


　
まずは Organizations において宣言型ポリシーを有効化します。

## 1. Organizations で宣言型ポリシーを有効化 
　
管理アカウントの AWS Organizations ＞ [ポリシー] を開くと [EC2 の宣言型ポリシー] という項目がありますのでこれを有効化します。

:::note info
2024/12 時点、EC2 関連のポリシーが多いためこのような名前になっているようです
:::

   
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/705fca1f-260c-55a1-01df-a9a9d7452890.png)



## 2.  宣言型ポリシーの定義  
　
早速ポリシーを作成していきます。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/d3de8f51-3067-fd32-6e9b-1f2b81cb525a.png)

　
ビジュアルエディタで作成可能なため数クリックで作成することができます。
今回は [VPC ブロックパブリックアクセス] サービス属性を定義します。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/bc26c0ec-8333-cb01-1cdd-4d0bbcaac28b.png)

　
宣言型ポリシー作成後、今回テスト用に作った OU「OU_TEST」 にアタッチします。
（もちろん検証用メンバーアカウントも「OU_TEST」に配置しておきます）
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/bedcfc88-cad4-ed8d-543e-0633a1264dc9.png)


## 3. 動作確認
　
検証用メンバーアカウントで「VPC ブロックパブリックアクセス」が正しく適用されていることを確認します。
　
下記がテストアカウントの「VPC パブリックアクセス」コンソール画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/808d78ed-0de7-1307-26c4-5bb5d83fc642.png)

　
[ステータス] = "オン"
まずは東京リージョンでしっかり適用されていることが確認できました。
また **「Managed by Declarative Policy」が明記されている**ことによって、宣言型ポリシーで管理されていることがエンドユーザ―側でもわかるようになっていました。

さらに [パブリックアクセス設定を編集] の部分については**グレーアウトで押下できない**仕様になっていました。API レベルではなくサービスレベルで適用されていることがわかります。

　
次にバージニア北部リージョンも見てみましたが、こちらもしっかり適用されていました。当然ですがアカウント単位でしっかり制御されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/7347dec6-8bd2-bda6-91de-70ee2f60db28.png)

　
最後にカスタマイズ可能なエラーメッセージについて、こちらもサービス属性同様にビジュアルエディタで簡単に設定できます。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822977/048f3842-5f7e-e6ed-6234-bd8faffb654a.png)

　
この設定したメッセージは、宣言型ポリシーが原因で API 操作に失敗した際に表示されるとのことです。社内 Wiki や失敗を説明するメッセージへのリンクなどのカスタム URL を表示することも可能です。

## 所感

宣言型ポリシーを試してみて、ポリシーの適用スピードも非常に速く、UI を通じた操作性も良好でした。複雑なポリシー管理がシンプルになり、運用負荷の軽減を実感しました。

また、ガバナンス強化だけでなく、柔軟性を維持しながら管理コストを削減できる点も魅力的です。まだまだ設定できる項目が少ないので、これからのアップデートに注目していきたいと思います。

## 参考情報

https://aws.amazon.com/jp/blogs/news/simplify-governance-with-declarative-policies/

https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html#orgs_manage_policies_declarative-custom-message