0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

目的

Cloudflare Access ポリシーが再利用可能になったので、既存の LEGACY ポリシーを再利用可能なポリシーに移行します。

アクセスポリシーを独自のオブジェクトにすることで、複数のアプリケーションで再利用できるようになりました。これらのアップデートは、Access Dashboardのエクスペリエンス全体の大幅なアップデートを伴うものでした。

アクセス・ポリシーが再利用可能に

以前は、アクセス・ポリシーは常に特定のアプリケーションにスコープされていました。このため、アプリケーションごとに個別のポリシーを定義する必要がありました。

再利用可能なAccessポリシーへの移行の一環として、既存のすべてのAccessポリシーは、アプリケーションにスコープされたままの「レガシー」ポリシーとして残ります。「レガシー」は、新しいポリシータブで読み取り専用として表示されます。

APIでは、レガシーポリシーを再利用可能なポリシーに変換するための追加オプションを1つ使用できます。

次のエンドポイントをPUTで使用してください: https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps/{appID}/policies/{legacy_policy_id}/make_reusable

リクエストボディは空でなければなりません。

これはレガシーポリシーを再利用可能なポリシーに変換し、複数のアプリケーションに割り当てることができます。一度変換されたポリシーは、再利用可能なポリシーのエンドポイントを通してのみ編集できます (つまり、PUT /apps/id/policies/id を通してポリシーを編集することはできなくなります)。

再利用可能なポリシー

LEGACY ポリシーは、1つの Access Application のみに紐付けて利用する形でした。

そのため、同じポリシー内容であっても、複数回定義しなければならない手間がありました。

このポリシーはアプリケーションの一部として作成されました。再利用はできません。このポリシーを編集するには、対応するアプリケーションに移動します。これらのルールを複数のアプリケーションで使用するには、再利用可能な新しいポリシーを作成することをお勧めします。

image.png

一方、再利用可能なポリシーは、複数の Access Application で何度も再利用が可能で、使い回しがききます。

image.png

レガシーポリシーからの移行

既存の LEGACY ポリシーを再利用可能にするには、移行の作業が必要となります。

1つずつ移行

Application IDPolicy ID を指定して、以下のエンドポイントに対して PUT コールをします。

export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'
export LEGACY_APP_ID='YOUR_LEGACY_APP_ID'
export POLICY_ID='YOUR_POLICY_ID'

curl -X PUT "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps/$LEGACY_APP_ID/policies/$POLICY_ID/make_reusable" \
     -H "X-Auth-Email: $EMAIL" \
     -H "X-Auth-Key: $APIKEY" \
     -H "Content-Type: application/json"

"reusable": true, となったレスポンスが得られ、ポリシーが再利用可能になったことが確認できます。

result.json
{
  "result": {
    "created_at": "2024-04-12T07:06:22Z",
    "decision": "allow",
    "exclude": [],
    "id": "d7eff9fc-e44f-44f8-b305-39150ae5f708",
    "include": [
      {
        "login_method": {
          "id": "d973f7d7-40d0-4c55-86cd-f79b08ce8f7c"
        }
      }
    ],
    "name": "Cognito group Allow",
    "require": [
      {
        "oidc": {
          "identity_provider_id": "d973f7d7-40d0-4c55-86cd-f79b08ce8f7c",
          "claim_name": "cognito:groups",
          "claim_value": "Dodgers"
        }
      }
    ],
    "uid": "d7eff9fc-e44f-44f8-b305-39150ae5f708",
    "updated_at": "2024-04-12T07:07:35Z",
    "reusable": true,
    "app_count": 1
  },
  "success": true,
  "errors": [],
  "messages": []
}

一括で移行

以下のスクリプトによって、アカウント内のすべての LEGACY ポリシーを再利用可能にします。

export EMAIL='YOUR_EMAIL'
export APIKEY='YOUR_APIKEY'
export ACCOUNT_ID='YOUR_ACCOUNT_ID'

curl -sX GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps/" \
     -H "X-Auth-Email: $EMAIL" \
     -H "X-Auth-Key: $APIKEY" \
     -H "Content-Type: application/json" | jq -c '.result[] | select(.type != "bookmark" and .type != "private_ip")' |
while read -r application; do
  APP_ID=$(echo "${application}" | tr -d '[:cntrl:]' | jq -r '.id')
  echo "${application}" | tr -d '[:cntrl:]' | jq -c '.policies[] | select(.reusable == false)' |
  while read -r policy; do
  POLICY_ID=$(echo "${policy}" | jq -r '.id')
  REUSABLE=$(echo "${policy}" | jq -r '.reusable')
  echo APP_ID = ${APP_ID},  POLICY_ID = ${POLICY_ID} , REUSABLE = ${REUSABLE} です
  curl -sX PUT "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps/$APP_ID/policies/$POLICY_ID/make_reusable" \
     -H "X-Auth-Email: $EMAIL" \
     -H "X-Auth-Key: $APIKEY" \
     -H "Content-Type: application/json" | jq -c '.result | {"id","name","reusable"}'
  done
done
result.txt
APP_ID = fdb959cf-e4a7-41c5-b0f1-f1746b9d6659, POLICY_ID = 7f0333d9-8ffb-4522-a09d-d641baf18733 , REUSABLE = false です
{"id":"7f0333d9-8ffb-4522-a09d-d641baf18733","name":"sso allow","reusable":true}
APP_ID = a722c7ea-6a9e-4520-a621-cfa9bff16ed6, POLICY_ID = bfba49dd-40ee-4c13-a399-8e3ab56bfc8a , REUSABLE = false です
{"id":"bfba49dd-40ee-4c13-a399-8e3ab56bfc8a","name":"service token","reusable":true}
APP_ID = a722c7ea-6a9e-4520-a621-cfa9bff16ed6, POLICY_ID = 81283344-3f7b-45e6-9ad1-12ccb642c3af , REUSABLE = false です
{"id":"81283344-3f7b-45e6-9ad1-12ccb642c3af","name":"ext","reusable":true}
APP_ID = a722c7ea-6a9e-4520-a621-cfa9bff16ed6, POLICY_ID = 089b406e-a927-4024-8809-3c60d4d84667 , REUSABLE = false です
{"id":"089b406e-a927-4024-8809-3c60d4d84667","name":"idp-mtls","reusable":true}
...

まとめ

新規で作成するポリシーはデフォルトで再利用可能ですが、既存の LEGACY ポリシーは UI で再作成するか、API で移行する作業が必要です。

今回の作業で Cloudflare Access の、既存の LEGACY ポリシーを再利用可能なポリシーに移行できました。

これで、新しいポリシー管理の方法で、柔軟に構成する準備を整えることができましt。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?