🐥

AWS Organizations で SCP を設定して利用を制限する

2023/11/19に公開

AWS Organizations 配下の AWS アカウントまたは Organization unit に対して、SCP (Service Control Policy) を設定して利用できるサービス等を制限することができます。

https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_policies_scps.html

設定方法

Organization の管理アカウントで、以下の手順で SCP を設定します。

  1. 管理コンソール > AWS Organizations
  2. 制限をおこなう AWS アカウントまたは Organization unit をクリック
  3. 「Policies」タブ
  4. 「アタッチ」
  5. 「ポリシーを作成」
  6. 以下を入力して「ポリシーを作成」
    • ポリシー名: (任意)
    • ポリシーを入力 (後述)
  7. 作成したポリシーをチェックして「ポリシーのアタッチ」

サービスを制限する

AWS アカウントまたは Organization unit に対して、利用できるサービス (API) を制限します。

以下のように利用できないようにする API を指定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "snowball:*"
      ],
      "Resource": "*"
    }
  ]
}

リージョンを制限する

AWS アカウントまたは Organization unit に対して、利用できるリージョンを制限します。IAM や Amazon CloudFront などのグローバルサービスを使用するには、us-east-1 リージョンは必須となります。

例: us-east-1 リージョンのみ利用可能とする

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": [
            "us-east-1"
          ]
        }
      }
    }
  ]
}

例: us-east-1, ap-northeast-1 リージョンと AWS Chatbot を利用可能とする

AWS Chatbot を使用するには us-east-2 リージョンが必要なようです。us-east-1, ap-northeast-1 での全サービスと、us-east-2 の AWS Chatbot だけ利用できるようにしたいとします。

ポリシーの記述には優先順を指定することができず Deny が最優先となる(Allow で一部を除外することはできない)ため、Deny ルールを組み合わせて指定する必要があります。例えば以下のようにします。

us-east-1, ap-northeast-1 リージョンと AWS Chatbot を利用可能とする

  1. ap-northeast-1, us-east-1 以外のリージョンかつ AWS Chatbot 以外のサービスを拒否
  2. ap-northeast-1, us-east-1, us-east-2 以外のリージョンにおける全サービスを拒否
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "NotAction": "chatbot:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": [
            "us-east-1",
            "ap-northeast-1"
          ]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": [
            "us-east-1",
            "us-east-2",
            "ap-northeast-1"
          ]
        }
      }
    }
  ]
}

Discussion