> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API アクセス ポリシー

> PlayFab で API アクセス ポリシーを使用する方法について説明します。

API アクセス ポリシーは、API リソースへのアクセスを制御します。タイトルによっては、不正防止やその他のセキュリティ上の目的で、特定の API をゲーム クライアントから許可または拒否する必要が生じることがあります。ポリシー ステートメントを使用して、特定の状況で適用される一連のアクセス ルールを指定することで、アクセスを制御できます。

このトピックでは、適切なルールを作成するための API アクセス許可ポリシーの使用について説明します。

タイトルの API アクセス ポリシーは Game Manager から直接管理することもできます。詳細については、[Game Manager の API アクセス ポリシー](/services/playfab/live-service-management/gamemanager/api-access-page-doc)を参照してください。

<Info>
  このガイドでは高度なテクニックについて説明します。誤って適用した場合、この機能によってタイトルへのクライアント アクセスを完全に無効にしてしまう可能性があります。
</Info>

## ポリシーの制御と構造

タイトルは PlayFab Admin API 呼び出しを使用して、アクセス ポリシーの取得と更新を行います。API アクセス ポリシーを設定するために使用する特定の 2 つの呼び出しは、[GetPolicy](xref:titleid.playfabapi.com.admin.authentication.getpolicy) と [UpdatePolicy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy) です。Admin API 呼び出しの詳細については、[PlayFab API リファレンス](https://learn.microsoft.com/en-us/rest/api/services/services/playfab/admin/)を参照してください。

Admin API を使用するには、タイトルに関連付けられた開発者シークレット キーを提供する必要があります。開発者キーは、タイトルが Admin API 呼び出しを行うことを承認するために使用されます。シークレット キーの取得方法については、[シークレット キーの管理](/services/playfab/live-service-management/gamemanager/secret-key-management)を参照してください。

各ポリシーには、1 つ以上の PlayFab リソースに対するルールとして機能するステートメントの一覧が含まれています。PlayFab は、すべてのポリシーを許可する既定のポリシー ステートメント セットを定義します。この一連のポリシー ステートメントを置き換えずに削除すると、タイトルは Client API を呼び出せなくなります。

既定の PlayFab ポリシー ステートメント:

```json theme={null}
    "Statements": [
        {
            "Resource": "pfrn:api--*",
            "Action": "*",
            "Effect": "Allow",
            "Principal": "*",
            "Comment": "The default allow all policy"
        }
    ]
```

各アクセス許可ステートメント セットは、[Authentication - Update Policy](xref:titleid.playfabapi.com.admin.authentication.updatepolicy#permissionstatement) で定義されている次の項目で構成されます:

* Resource - 1 つ以上の PlayFab リソースを一意に識別する文字列。API リソースを記述するには、以下に示す規則を使用します。`pfrn:api--/API-GROUP/API-CALL` `API-GROUP` として Client API を指定します: `Client`、`Server`、`Admin`。`API-CALL` を `ConfirmPurchase`、`LoginWithTwitch`、`ReportPlayer` などの API 名に置き換えます。リソース文字列はワイルドカードをサポートします。次のリソース文字列は任意のリソースに一致します。`pfrn:api--*`
* Action - リソースに対して実行する操作を表す文字列。任意の操作に一致させるには `*` を使用します。
* Effect - ルールの定義を指定する文字列。リソースに対する操作を許可または拒否するには、それぞれ `Allow` または `Deny` を使用します。
* Principal - ユーザーのクラスを一意に識別する文字列。任意のユーザーに一致させるには `*` を使用します。
* Comment - ポリシー ステートメントに関する追加情報を提供するユーザー定義の文字列。
* ApiConditions - 高度なルール条件 (暗号化や署名付きヘッダーなど) を定義する *省略可能なオブジェクト* 。

アプリケーションで使用する API のみアクセスを許可する、より詳細なアクセス許可ステートメントを使用するようにポリシーを変更することで、アプリケーションに強力なセキュリティ ルールを設定できます。

次の例は、`DeleteCharacterFromUser` の呼び出しを制限する方法を示しています:

```json theme={null}
    {
        "Resource": "pfrn:api--/Server/DeleteCharacterFromUser",
        "Action": "",
        "Effect": "Deny",
        "Principal": "",
        "Comment": "Disable server character delete"
    }
```

## API アクセス ポリシーの例

以下のコード サンプルは、ポリシーに対する基本的な操作を示します。このコードは次の処理を実行します:

* 既存の **Policy** を取得してログに記録します。
* ポリシーを更新します。
* 既存の **Policy** を再度取得してログに記録します。

```csharp theme={null}
public void Start() {
    PlayFabSettings.staticSettings.DeveloperSecretKey = "<insert key here>";
    PlayFabSettings.TitleId = "< insert title id here >";
    FetchApiPolicy(UpdateApiPolicy);
}

private void FetchApiPolicy(Action nextAction = null) {
    PlayFabAdminAPI.GetPolicy(new GetPolicyRequest() {
        PolicyName = "ApiPolicy"
    }, result => {
        Debug.Log(result.PolicyName);
        foreach (var statement in result.Statements)
        {
            Debug.Log("Action: "+ statement.Action);
            Debug.Log("Comment: "+ statement.Comment);
            if(statement.ApiConditions != null)
                Debug.Log("ApiCondition.HashSignatureOrEncryption: "+ statement.ApiConditions.HasSignatureOrEncryption);
            Debug.Log("Effect: "+ statement.Effect);
            Debug.Log("Principal: "+statement.Principal);
            Debug.Log("Resource: "+ statement.Resource);
        }

        if (nextAction != null) nextAction();

    },error=>Debug.LogError(error.GenerateErrorReport()));
}

private void UpdateApiPolicy() {
    PlayFabAdminAPI.UpdatePolicy(new UpdatePolicyRequest() {
        PolicyName = "ApiPolicy",
        OverwritePolicy = false, // Append to existing policy. Set to True, to overwrite.
        Statements = new List<PermissionStatement>() {
            new PermissionStatement() {
                Action = "*", // Statement effects Execute action
                ApiConditions = new ApiCondition() {
                    HasSignatureOrEncryption = Conditionals.False // Require no RSA encrypted payload or signed headers
                },
                Comment = "Do not allow clients to confirm purchase",
                Resource = "pfrn:api--/Client/ConfirmPurchase", // Resource name
                Effect = EffectType.Deny, // Do not allow,
                Principal = "*"
            }
        }
    }, result => {
        FetchApiPolicy();
    }, error => Debug.LogError(error.GenerateErrorReport()));
}
```

以下の画像は、コードを初めて実行した後の出力例を示しています。表示されているように、ポリシーは複数の [アクセス許可ステートメント](xref:titleid.playfabapi.com.admin.authentication.updatepolicy#permissionstatement)で構成されます。

<img src="https://mintcdn.com/microsoft-4404708b/5IpvKlT-jmAaVkeY/images/playfab/api-references/images/game-manager-admin-api-get-update-policy-csharp-output.png?fit=max&auto=format&n=5IpvKlT-jmAaVkeY&q=85&s=2cfa94f6daa0d6e7cda3041bbb8d04a4" alt="Game Manager - Admin API - Get-Update Policy - C# 出力" width="656" height="535" data-path="images/playfab/api-references/images/game-manager-admin-api-get-update-policy-csharp-output.png" />


## Related topics

- [Game Manager の API アクセス ポリシー](/ja-jp/services/playfab/live-service-management/gamemanager/api-access-page-doc.md)
- [PlayFab API 用の Microsoft Entra ID 認証](/ja-jp/services/playfab/identity/dev-identity/authentication/entra-id-api-authentication.md)
- [PlayFab の基礎](/ja-jp/services/playfab/get-started/index.md)
- [アクセス ポリシー](/ja-jp/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/index.md)
- [アクセス ポリシーの概要](/ja-jp/services/xbox-services/fundamentals/s2s-auth-calls/custom-service-config/access-policies/live-access-policies-overview.md)
