AWS Organizationsの宣言型ポリシー(Declarative Policies)の管理を他のアカウントに委任してみた

AWS Organizationsの宣言型ポリシー(Declarative Policies)の管理を他のアカウントに委任してみた

AWS Organizationsの宣言型ポリシー(Declarative Policies)の管理を他のアカウントに委任してみた
Clock Icon2025.03.28

お疲れさまです。とーちです。

今回は、AWS Organizationsの宣言型ポリシー(Declarative Policies)の管理を他のアカウントに委任する方法について解説したいと思います。

宣言型ポリシーとは

2024年のre:Invent前後のアップデートにより、AWS Organizations環境で宣言型ポリシー(Declarative Policies)というものが新たに使えるようになりました。この機能を使うと、例えば許可されたAmazon Machine Image (AMI)のみを使用するようOrganizations配下のアカウントに強制することができるなど、なかなか便利な機能です。

詳しくは以下の記事をご参照ください。

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

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

さて、この宣言型ポリシーの作成や更新を管理アカウント以外に委任できるのかな?というのが気になったので、実際に試してみました。結果として、委任することが可能だったので本記事ではその方法を紹介しようと思います。

ポリシーの委任について

調べるまで知らなかったのですが、SCP等のポリシーの有効化やポリシー自体の作成・修正等のアクションは他のアカウントに委任することが可能になっています。

これは管理アカウントにて、委任ポリシーというものを作成することで可能となっています。委任ポリシーにはどのアカウントに対して、どのアクションを委任するかをIAMポリシーと同様の形式で記載する形になります。

なお、委任できるアクションの一覧は以下に記載されています。

https://docs.aws.amazon.com/organizations/latest/userguide/orgs-policy-delegate.html

委任できるアクションの中に、"organizations:CreatePolicy""organizations:DescribePolicy""organizations:UpdatePolicy"などのポリシー関連のアクションがあるので、これを委任ポリシーとして記載すれば、他アカウントに委任できるというわけです。

また、ポリシーの中でも、宣言型ポリシーだけを委任したいというケースにも対応できます。

委任ポリシーにはどのアクションを委任するかを書くのですが、このアクションにはIAMポリシーと同様にConditionを指定することで特定の条件でのみ許可をするといったことができます。

このConditionとしてOrganizationsのポリシー関連のAPI操作をするときに特定のポリシータイプのみとするという条件があるので、こちらを使用すれば、宣言型ポリシーだけを委任するといったことも可能です。

Conditionとして指定できるポリシーは公式ドキュメントに記載があります。

また、ポリシーの書き方の例は以下公式ドキュメントにも記載があるのでこちらも参考にして頂ければと思います。

https://docs.aws.amazon.com/organizations/latest/userguide/security_iam_resource-based-policy-examples.html

実際に委任設定をしてみる

というわけで、宣言型ポリシーの作成・更新・削除・OU等へのアタッチを他のアカウントに委任してみます。

管理アカウントでの作業

まずAWS Organizationsの設定を開きます。

AWS Organizationsの設定画面

続いてAWS Organizationsのインストールされた管理者という項目にある委任ボタンを押します。

委任ボタンの場所

委任ポリシー入力画面が出るので以下のポリシーを記載します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DelegatingNecessaryDescribeListActions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::委任アカウントID:root"
      },
      "Action": [
        "organizations:DescribeOrganization",
        "organizations:DescribeOrganizationalUnit",
        "organizations:DescribeAccount",
        "organizations:ListRoots",
        "organizations:ListOrganizationalUnitsForParent",
        "organizations:ListParents",
        "organizations:ListChildren",
        "organizations:ListAccounts",
        "organizations:ListAccountsForParent",
        "organizations:ListTagsForResource"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ReadAndUpdatePolicy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::委任アカウントID:root"
      },
      "Action": [
        "organizations:DescribeEffectivePolicy",
        "organizations:DescribePolicy",
        "organizations:ListPolicies",
        "organizations:ListPoliciesForTarget",
        "organizations:ListTargetsForPolicy",
        "organizations:CreatePolicy",
        "organizations:UpdatePolicy",
        "organizations:DeletePolicy",
        "organizations:AttachPolicy"
      ],
      "Resource": "*",
      "Condition": {
        "StringLikeIfExists": {
          "organizations:PolicyType": "DECLARATIVE_POLICY_EC2"
        }
      }
    }
  ]
}

このポリシーでは、委任アカウントIDの部分に実際に委任したいアカウントのIDを入れてください。

このポリシーは大きく2つのStatementから構成されています:

  1. 最初のStatementでは、Organizations内の構造(OU、アカウント等)を参照するための読み取り権限を付与しています。
  2. 2つ目のStatementでは、ポリシーの作成・更新・削除・アタッチなどの操作権限を付与していますが、ConditionDECLARATIVE_POLICY_EC2タイプのポリシーのみに制限しています。

これだけで設定としてはOKです。あとは宣言型ポリシーが有効化されていれば、委任先アカウントで宣言型ポリシーの作成とアタッチができるはずなのでやってみます。

委任アカウントでの作業

それでは委任先アカウントで宣言型ポリシーの作成とアタッチをやってみます。

Organizationsの画面からポリシーを選び、EC2の宣言型ポリシーを選択します。

EC2の宣言型ポリシー選択画面

ポリシーを作成を押します。

ポリシー作成ボタンの画面

適当なポリシー名をつけたあと、画面下にいき、サービス属性から許可されている画像設定を選択します。

サービス属性選択画面

画像設定のモードは今回は監査モードにしておきます。実際に行う場合もまず監査モードで許可されないAMIを確認してからのほうが良いと思います。また許可されるAMIの基準としてAmazonが提供するもののみを今回は許可します。

画像設定モード選択画面

この状態でポリシーを作成するとちゃんと委任アカウントでもポリシーを作成することができました。

ポリシー作成完了画面

続いて、このポリシーを組織全体にアタッチします。

ポリシーアタッチ選択画面

ルート選択画面

アタッチも問題なくできましたね。

アタッチ完了画面

まとめ

今回は、AWS Organizationsの宣言型ポリシーの管理を他のアカウントに委任する方法を紹介しました。

管理アカウントはSCPが効かないなど、Organizations全体の中でも特殊なアカウントになるので、このアカウントでの作業は極力減らすのがベストプラクティスです。委任ポリシーなども活用して、あまり管理アカウントに触らない状況を作りたいですね。

この記事が参考になれば幸いです。

以上、とーちでした。

参考にさせて頂いた記事

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.