Declarative policies for EC2 (EC2 の宣言型ポリシー) において OU にアタッチしているポリシーとは異なるポリシーをアカウントにアタッチして例外設定にしてみた #AWSreInvent

Declarative policies for EC2 (EC2 の宣言型ポリシー) において OU にアタッチしているポリシーとは異なるポリシーをアカウントにアタッチして例外設定にしてみた #AWSreInvent

Clock Icon2024.12.02

AWS Organizations の Declarative policies (EC2 の宣言型ポリシー) がリリースされました。
早速、ブログが 2 つも投稿されるほどの注目の機能です。

https://dev.classmethod.jp/articles/aws-organizations-declarative-policies-available/

https://dev.classmethod.jp/articles/declarative-policies/

Declarative policies は AWS Organizations の他のポリシー同様に組織全体や OU、単一アカウントにアタッチできます。組織全体で統一した内容でポリシーを適用できるのがよいと思いますが、場合によっては例外的に異なる設定にしたいアカウントが存在する場合もあると思い、その方法を確認しました。アカウント単体にポリシーをアタッチして上位の OU のポリシーとは異なる設定を適用します。

制限されている場合の利用者からの見え方

まずは、Declarative policies の対象となる設定がアカウントの利用者からどのように見えるか確認してみみます。
例として、「スナップショットブロックパブリックアクセス」において「新規パブリック共有をブロック」する設定を反映するポリシーである下記ポリシー例で確認してみます。

{
	"ec2_attributes": {
		"snapshot_block_public_access": {
			"state": {
				"@@assign": "block_new_sharing"
			}
		},
		"exception_message": {
			"@@assign": "This action has been restricted by your system administrator."
		}
	}
}

上記ポリシーが適用されているアカウントにおいて、 EC2 の「ダッシュボード」→「データ保護とセキュリティ」メニューを確認したところ、「EBS スナップショットブロックパブリックアクセスをブロック」の設定は変更できないように「管理」が非活性になっています。

declarative-policies-exception-1

次に、AWS CLI で変更するアクションを試した見たところ、エラーとなりました。ポリシーでは、エラーメッセージも指定できるため、独自の内容で出力してみました。最後の This action has been restricted by your system administrator. 部分が独自です。

$ aws ec2 disable-snapshot-block-public-access

An error occurred (DeclarativePolicyViolation) when calling the DisableSnapshotBlockPublicAccess operation: This functionality has been disabled by a Declarative Policy. Custom Message: This action has been restricted by your system administrator.

エラーメッセージをカスタマイズできるため、「もしこのせっていを変更したい場合は管理者に問い合わせてください」という内容のエラーメッセージを表示する案も運用できそうです。なお、執筆時点ではエラーメッセージに日本語は設定できませんでした。

制限されている内容の例外を許可したい場合

基本的には Root OU やアカウントが格納される最上位の OU にポリシーをアタッチしたいところですが、場合によっては例外を認める場合ももあると思います。次の 2 つの方法があります。

  • ポリシー適用 OU と未適用 OU に分ける方法
    • 基本的に適用 OU で運用しつつ、例外としたいアカウントは未適用 OU に移動
  • ポリシーを組織全体(または OU) に適用して、例外設定を個別にアカウントにアタッチする方法
    • 個別のアカウントだけ設定を上書き

今回は後者の方法について実際に試してみました。

全体にアタッチされているポリシーの例外設定を試してみる

アカウントが格納されている最上位 OU にスナップショットのパブリック共有を制限するポリシーをアタッチした上で、例外とするアカウントにパブリック共有を許可するポリシーをアタッチする設定を試してみました。下図のイメージです。

declarative-policies-exception-4

まず、アカウントが格納されている最上位 OU に適用するポリシーは冒頭で紹介した「スナップショットブロックパブリックアクセス」と同様のポリシーとしました。

{
	"ec2_attributes": {
		"snapshot_block_public_access": {
			"state": {
				"@@assign": "block_new_sharing"
			}
		},
		"exception_message": {
			"@@assign": "This action has been restricted by your system administrator."
		}
	}
}

その上で、例外的にスナップショットのパブリック共有を許容したいアカウントがあると仮定して、そのアカウント単体に対して次のポリシーをアタッチします。

{
  "ec2_attributes": {
    "snapshot_block_public_access": {
      "state": {
        "@@assign": "unblocked"
      }
    },
    "exception_message": {
      "@@assign": "This action has been restricted by your system administrator."
    }
  }
}

アカウントに Declarative policies をアタッチした後のポリシー確認画面です。test-exception-policy がアカウント単体にアタッチしているポリシーです。

declarative-policies-exception-2

Declarative policies をアタッチしたアカウントにおいて、改めて EC2 の「データ保護とセキュリティ」設定を確認してみたところ、パブリック公開ができるように設定が変更されていました。ただし、設定の管理(変更)ができるわけではない点には注意が必要です。

declarative-policies-exception-3

一方で、上述したイメージ図における Sandbox01 アカウントではスナップショットのパブリック共有はブロックされたままです。上位の OU にアタッチしたポリシーが反映されています。

declarative-policies-exception-5

以上で、OU にポリシーをアタッチした上で、その OU に所属する単一のアカウントに対して別のポリシーを設定した場合の動作確認は終わりです。

さいごに

AWS Organizations の Declarative policies (EC2 の宣言型ポリシー) がリリースされ、ふと気になった例外を作る方法を試してみました。例外を認めず、組織内のポリシーを共通化できることが望ましいと思いますが、もし対応する必要ある場合の参考になりました。

このブログがどなたかの誤差項になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.