アプリケーションのアクセス制御を管理する
注釈:本資料はAI技術を用いて翻訳されています。
はじめに
AccelByte Gaming Services (AGS) は、保護されたプラットフォームリソースへのアクセスを要求するアプリケーション (ゲームサーバーやウェブサイトなど) を Identity and Access Management (IAM) クライアントとして定義します。IAM クライアントを使用すると、ユーザー単位ではなくアプリケーション単位でアクセスできるリソースを制御できます。
本記事では、以下の内容について説明します。
- IAM クライアントの仕組みと IAM クライアントの種類。
- AGS Admin Portal または AGS CLI で IAM クライアントとそのパーミッションを作成および設定する方法。
- AGS SDK または AGS CLI を使用してアプリケーションアクセストークンを取得する方法。
前提条件
-
AGS Admin Portal へのアクセス権限、および IAM クライアント管理のためのパーミッション。
- AGS Public Cloud
- AGS Private Cloud
AGS Public CloudAGS アカウントで Studio Admin または Game Admin ロールを持っていると、Admin Portal で IAM クライアントを直接管理できます。
用途 リソース アクション クライアントの作成 ADMIN:NAMESPACE:{namespace}:CLIENTCreate クライアントの取得 ADMIN:NAMESPACE:{namespace}:CLIENTRead クライアントの更新 ADMIN:NAMESPACE:{namespace}:CLIENTUpdate クライアントの削除 ADMIN:NAMESPACE:{namespace}:CLIENTDelete クライアントパーミッションの追加 ADMIN:NAMESPACE:{namespace}:CLIENTUpdate クライアントパーミッションの更新 ADMIN:NAMESPACE:{namespace}:CLIENTUpdate クライアントパーミッションの削除 ADMIN:NAMESPACE:{namespace}:CLIENTUpdate -
AGS CLI の手順に従う場合は、AGS CLI をインストールし、上記のパーミッションを持つアカウントでサインインしておく必要があります。インストールとサインインを参照してください。例では Bash シェルを使用しています。
IAM クライアントの仕組み
AGS の IAM クライアントは、OAuth 2.0 フレームワークを実装しています。 対象となるアプリケーションが特定のゲーム専用のものか、パブリッシャープラットフォームで使用されるものかに応じて、パブリッシャーまたはゲームの名前空間の下でこれを定義できます。
IAM クライアントの種類
OAuth 2.0 Client Type フレームワークに基づいて、2 つのクライアントタイプがあります。
- confidential クライアントは、バックエンドで認可を行うために Client ID と Client Secret の組み合わせを必要とします。AGS の admin エンドポイントに対してサーバー間 (S2S) 呼び出しを行う必要がある場合は、confidential クライアントを使用し、通常はクライアントに特定のアクセスパーミッションを定義します。confidential クライアントは、クライアントの ID とシークレットへのアクセス権を持つユーザーを管理できる場合にのみ使用し、権限のないユーザーがサービスにアクセスするのを防ぐようにしてください。
- public クライアントは、クライアントシークレットを指定しません。必要なのはクライアント ID のみです。public クライアントは、ユーザーが自分のユーザーアカウントでログインする必要があり、AGS の public エンドポイントへのクライアントからサーバーへの呼び出しのみを必要とするアプリケーションに最適です。この場合、アクセスパーミッションはロールを介してユーザーのアカウントから取得されます。
最もよく使用される IAM クライアント
以下は、最もよく使用される IAM クライアントのアーキタイプです。
- ゲームクライアント: ほとんどの場合、ゲームクライアント用の IAM クライアントは Public として設定します。
- 専用ゲームサーバー: 専用サーバー用の IAM クライアントは Public または Confidential として設定します。ただし、専用サーバーがユーザーとしてログインしない場合は、クライアントにパーミッションを割り当てる必要があります。これが最も一般的なケースです。
- 専用サーバーアップローダー: 専用サーバービルドをアップロードするための IAM クライアントです。アップローダーへのアクセスは通常厳しく管理されているため、これらのタイプのクライアントは Confidential として指定することを推奨します。
IAM クライアントを管理する
このセクションでは、IAM クライアントを作成および編集し、そのパーミッションを管理する方法について説明します。
IAM クライアントを作成する
- Admin Portal
- AGS CLI
-
AGS Admin Portal で、対象の名前空間に移動します。
-
サイドバーで、Foundations > Identity & Access > IAM Clients を選択します。
-
IAM Clients ページで、Create New をクリックします。What is this client for? ウィンドウが表示されます。

-
クライアントの目的に合ったテンプレートを選択し、Continue をクリックします。テンプレートによって、クライアントタイプ、デフォルトのクライアント名、Redirect URI が設定されます。一部のテンプレートでは、クライアントに必要なパーミッションも事前に選択されます。

Template Client type 用途 事前選択されるパーミッション Player Sign-in Public プレイヤーが自分のアカウントでサインインするゲーム、ランチャー、または Web アプリ。 なし Dedicated Server Confidential AGS API を直接呼び出すサーバー間のゲームプレイサービス。 Matchmaking のバックフィルと Session のゲームセッション Build and Deploy Tool Confidential ビルドを公開したりデプロイタスクを実行したりする CI/CD またはアップロードツール。 AMS 専用サーバー、専用サーバーツールキット、ウォッチドッグ Trusted Backend Tool Confidential confidential な AGS アクセスを必要とする信頼済みバックエンドまたは内部ツール。 なし Custom 任意 自分で設定したいクライアント。 なし 注記Dedicated Server および Build and Deploy Tool テンプレートは、名前空間に Multiplayer パッケージがある場合にのみ表示されます。
New IAM Client ページが表示されます。
-
Custom を選択した場合は、Client Type として Public または Confidential を選択します。詳細については、IAM クライアントの種類を参照してください。その他のテンプレートを選択した場合は、テンプレートによってクライアントタイプが設定されます。

-
Basic Info セクションで、以下の情報を入力します。
- Client Name: クライアントの名前を入力します。AGS は、ユーザー向けのフォームやドキュメントでこの名前を使用して IAM クライアントを識別します。
- Secret (confidential クライアントのみ): これはクライアントのパスワードとして機能します。推奨形式に従って独自のシークレットを入力するか、Generate をクリックして AGS に生成させます。
- Description (オプション): IAM クライアントの機能を説明します。

-
Client Settings セクションで、以下の情報を入力します。
-
Redirect URI: ユーザーの認可後に AGS がユーザーをリダイレクトする URI です。以下のいずれかを選択します。
- Localhost: Web ベースでないクライアント (ゲームサーバー、ゲームクライアント、サーバーアップローダーなど) の場合。URI が
http://127.0.0.1に設定されます。アプリがポートで待ち受ける場合にのみ、ポートを入力します。 - Custom URL: Web ベースのクライアント (ウェブサイトやランチャーなど) の場合。
http://またはhttps://を含む完全な URL を入力します。
ヒントAdd More をクリックすると、複数の URI を追加できます。
- Localhost: Web ベースでないクライアント (ゲームサーバー、ゲームクライアント、サーバーアップローダーなど) の場合。URI が
-
Platform (public クライアントのみ、オプション): SDK クライアントが実行されるサードパーティプラットフォームを選択します。クライアントをサードパーティプラットフォームにバインドしない場合は、空白のままにしてください。
注記AGS は、このプラットフォーム情報をクロスプラットフォーム機能 (クロスプラットフォームの仮想通貨やウォレットなど) に使用します。

-
-
(オプション) Advanced Configurations セクションで Show configurations をクリックし、IAM クライアントのデフォルトの動作を上書きします。
-
Scope: OAuth 2.0 のメカニズムで、IAM クライアントがアクセスできるリソースを制限します。詳細については、OAuth 2.0 のドキュメントを参照してください。以下のいずれかを選択します。
-
Default: アカウント、ソーシャル、コマース、アナリティクスへのアクセスのための AGS スコープ。
-
OpenID: サインインおよびユーザー ID クレームのための OpenID Connect スコープ。
-
Customize scopes: スコープの組み合わせを自分で選択します。以下の表は、各 AGS スコープが対象とするサービスを示しています。
Scopes Service commerce Platform
Season Passaccount Basic
GDPR
IAM
Legalsocial Achievement
Chat
Cloudsave
Group
Leaderboard
Lobby
Matchmaking
Session
Session Browser
Statisticsanalytics Telemetry
-
-
Target Audience (オプション): このクライアントのトークンを、特定のバックエンドサービスでのみ使用できるように制限します。ドロップダウンの各エントリは、Base URI によって対象サービスを表します。
注記これは、クライアントまたはユーザーのパーミッションを確認する前に、バックエンドサービスが接続の試行を素早く拒否できるようにする許可リストとして機能します。IAM クライアントがサービスエンドポイントへのアクセスを試みると、サービスはまずクライアントの Target Audience リストを確認します。サービスの URI が Target Audience フィールド内のいずれかのクライアントの Base URI と一致しない場合、システムは接続の試行を拒否します。クライアントが Target Audience チェックに合格した場合、またはクライアントの Target Audience フィールドが空の場合、サービスはパーミッションやスコープの確認など、次の認証ステップに進みます。
-
Base URI (オプション。Target Audience と併用): このクライアントを使用するアプリケーションのベース URI です。これにより、トークンが正しいアプリ向けであることを確実にできます。
-
Override Expiration Time: このトグルをオンにすると、デフォルトの Access Token と Refresh Token の有効期限を上書きし、独自の値を設定できます。アクセストークンは 1 秒から 24 時間、リフレッシュトークンは 1 分から 30 日の範囲で設定する必要があります。

-
-
(confidential クライアントのみ) Permissions セクションで、クライアントに追加したいパーミッションを見つけます。各パーミッションについて、そのパーミッションに持たせたいアクション (Create、Read、Update、Delete) のチェックボックスをオンにします。グループ内のすべてのパーミッションを一度に選択するには、グループ名の横にあるチェックボックスをオンにします。パーミッションをすばやく見つけるには、検索フィールドを使用するか、Show selected only を選択します。ここでカスタムパーミッションを追加することもできます。IAM クライアントのパーミッションを追加・編集するを参照してください。

この手順をスキップして、後でパーミッションを追加することもできます。
-
クライアントを作成します。
-
public クライアントの場合は、Create をクリックします。
-
confidential クライアントの場合は、Continue をクリックします。Save your client secret ウィンドウが表示されます。Copy secret をクリックし、シークレットを安全な場所に保管します。次に、I have copied and stored this client secret securely のチェックボックスをオンにして、Create をクリックします。
警告クライアントの作成後は、クライアントシークレットを表示したり取得したりすることはできません。

新しい IAM クライアントが、システムが生成したクライアント ID (編集不可) とともに作成されます。
-
-
テンプレートを選択します。Admin Portal の各テンプレートには、以下のテンプレート ID が対応しています。
Admin Portal のテンプレート テンプレート ID Player Sign-in game_clientDedicated Server dedicated_serverBuild and Deploy Tool dedicated_server_toolsTrusted Backend Tool custom_backend_tooling各テンプレートの設定を確認するには、次のコマンドを実行します。
ags iam client-config list-templates --format json出力には、テンプレートの
idごとに、クライアントタイプ (type)、デフォルトのクライアント名と Redirect URI (defaultValues)、事前選択されるパーミッション (basicRequiredPermissions) が表示されます。注記dedicated_serverおよびdedicated_server_toolsテンプレートは、名前空間に Multiplayer パッケージがある場合にのみ表示されます。Admin Portal の Custom オプションにはテンプレートがありません。クライアントを自分で設定する場合は、この手順をスキップしてください。
-
テンプレートの値または独自の値を使用して、クライアントの設定を記述した JSON ファイルを作成します。ファイル名は任意です。この例では
client.jsonを使用します。{
"clientId": "<NewClientId>",
"clientName": "<ClientName>",
"namespace": "<YourNamespace>",
"oauthClientType": "Confidential",
"secret": "<YourClientSecret>",
"redirectUri": "http://127.0.0.1",
"modulePermissions": []
}clientId: クライアントの新しい ID です。Admin Portal では自動的に生成されます。AGS CLI では、uuidgen | tr -d '-' | tr '[:upper:]' '[:lower:]'を実行するか、その他のバージョン 4 UUID 生成ツールを使用して作成します。ハイフンを含まない、小文字のバージョン 4 UUID である必要があります。namespace: 手順 3 で--namespaceに指定する名前空間と同じ値を指定します。両者が異なる場合、AGS CLI はファイル内の値を使用します。oauthClientType:ConfidentialまたはPublicです。public クライアントの場合は、secretの行を削除します。secret: 8 文字から 32 文字で、大文字、小文字、数字、記号のうち少なくとも 3 種類の文字を含む必要があります。同じ文字を 3 回以上連続して使用することはできません。modulePermissions: テンプレートのbasicRequiredPermissionsを指定します。パーミッションを付与しない場合は[]を指定します。
その他のフィールドを設定する場合は、ファイルに追加します。すべてのフィールドを確認するには、
ags iam clients create --skeletonを実行します。以下のフィールドは Admin Portal の設定に対応しています。Admin Portal の設定 リクエストボディのフィールド Description descriptionPlatform clientPlatform:Playstation、Xbox、Steam、Epic、IOS、GooglePlay、Nintendo、またはOculusScope scopesTarget Audience audiencesBase URI baseUriOverride Expiration Time oauthAccessTokenExpirationとoauthRefreshTokenExpiration、およびoauthAccessTokenExpirationTimeUnitとoauthRefreshTokenExpirationTimeUnitPermissions 事前定義された AGS パーミッションには modulePermissions、カスタムパーミッションにはclientPermissions。IAM クライアントのパーミッションを追加・編集するを参照してください。 -
クライアントを作成します。
@の後に、JSON ファイルへのパスを指定します。ags iam clients create --namespace <YourNamespace> --json @client.jsonコマンドを実行すると、作成されたクライアントが出力されます。
警告クライアントの作成後は、クライアントシークレットを表示したり取得したりすることはできません。安全な場所に保管してください。
IAM クライアントを編集する
- Admin Portal
- AGS CLI
- Admin Portal のサイドバーで、Foundations > Identity & Access > IAM Clients に移動します。IAM Clients ページが表示されます。
- リストから、編集したい IAM クライアントの名前をクリックします。IAM クライアントの詳細ページが表示されます。
- Edit をクリックします。Edit Client ページが表示されます。
- 必要に応じて情報を編集します。クライアントを作成した後は、クライアントタイプやクライアントシークレットを変更できません。
- Save をクリックして変更を保存します。
-
編集したいクライアントの ID を確認します。
ags iam clients list --namespace <YourNamespace> -
クライアントの現在の設定を確認します。
ags iam clients get --namespace <YourNamespace> --client-id <ClientId> -
変更したいフィールドのみを送信します。省略したフィールドは現在の値のまま維持されます。クライアントタイプは変更できません。
ags iam clients update --namespace <YourNamespace> --client-id <ClientId> \
--json '{"clientName": "<NewClientName>", "description": "<NewDescription>"}'警告ただし、
clientPlatformは例外で、更新のたびに上書きされます。クライアントにプラットフォームが設定されている場合は、リクエストボディにclientPlatformを含めてください。含めない場合、更新によってプラットフォームがクリアされます。
IAM クライアントのパーミッションを追加・編集する
既存の confidential な IAM クライアントのパーミッションを追加・編集できます。
- Admin Portal
- AGS CLI
AGS Admin Portal で IAM クライアントのパーミッションを追加・編集するには、次の手順に従います。
-
AGS Admin Portal で、対象の名前空間に移動します。
-
サイドバーで、Foundations > Identity & Access > IAM Clients を選択します。IAM Clients ページが表示されます。
-
リストから、パーミッションを更新したい IAM クライアントの名前をクリックします。IAM クライアントの詳細ページが表示されます。
-
Edit をクリックします。Edit Client ページが表示されます。
-
下にスクロールして Permissions セクションに移動し、パーミッションを管理します。
- Manage predefined AGS permissions
- Manage custom permissions
-
追加または編集したいパーミッションを見つけます。そのパーミッションに追加または削除したいアクション (Create、Read、Update、Delete) のチェックボックスをオンまたはオフにします。グループ内のすべてのパーミッションを一度に選択するには、グループ名の横にあるチェックボックスをオンにします。パーミッションをすばやく見つけるには、検索フィールドを使用するか、Show selected only を選択します。

-
ゲームサーバーやカスタムバックエンドにカスタムパーミッションを付与し、Extend アプリによって公開されるカスタム API を呼び出せるようにすることができます。
-
AGS Public Cloud のカスタムパーミッションは事前定義された形式に従う必要があります。詳細については、Public Cloud でのカスタムパーミッションを参照してください。AGS Private Cloud では、カスタムパーミッションに
CUSTOM:プレフィックスは不要です。付与済みパーミッションの構文に従う任意のパーミッションリソースを使用できます。注記制限 (AGS Public Cloud): 1 つの IAM クライアントに追加できるカスタムパーミッションは最大 10 個 です。この上限は、スパムや不正利用を防ぐために設けられています。それ以上必要な場合は、AccelByte サポートにお問い合わせください。
-
カスタムパーミッションを追加するには、Custom permissions グループの Add more をクリックします。Add custom permission ウィンドウが表示されます。
-
パーミッションリソースを入力します。
-
AGS Public Cloud: Permission type を選択します。カスタムパーミッション形式に従い、Public を選択すると
CUSTOM:NAMESPACE:{namespace}:プレフィックスが、Admin を選択するとCUSTOM:ADMIN:NAMESPACE:{namespace}:プレフィックスが追加されます。Resource フィールドに、リソース名の残りの部分を入力します。Final permission フィールドに完全なリソースが表示されます。例:CUSTOM:NAMESPACE:{namespace}:PROGRESSION
-
AGS Private Cloud: Resource フィールドに、完全なパーミッションリソースを入力します。例:
NAMESPACE:{namespace}:PROGRESSION
-
-
このパーミッションで有効にしたい Actions (Create、Read、Update、Delete) を選択し、Add をクリックします。
-
-
既存のカスタムパーミッションを編集または削除するには、Custom permissions グループでそのパーミッションの編集アイコンまたは削除アイコンをクリックします。AGS Public Cloud では、このグループに残りの追加可能なカスタムパーミッション数も表示されます。

-
Save をクリックして変更を保存します。
注記パーミッションの変更は、次回のトークンリフレッシュ時に自動的に反映されます。すぐに適用するには、接続しているサービスを再起動してください。
事前定義された AGS パーミッションは、チェックボックスで選択できる Admin Portal タブの手順で管理してください。新しいクライアントにテンプレートの事前定義されたパーミッションを付与するには、IAM クライアントを作成するを参照してください。AGS CLI では、次のようにカスタムパーミッションを管理できます。
-
カスタムパーミッションは、Admin Portal と同じルールに従います。AGS Public Cloud では、リソースは public パーミッションの場合は
CUSTOM:NAMESPACE:{namespace}:、admin パーミッションの場合はCUSTOM:ADMIN:NAMESPACE:{namespace}:で始まる必要があり、1 つの IAM クライアントに追加できるカスタムパーミッションは最大 10 個です。Public Cloud でのカスタムパーミッションを参照してください。AGS Private Cloud では、付与済みパーミッションの構文に従う任意のリソースを使用できます。 -
これらのコマンドの
actionには、付与したいアクションの値の合計を指定します。各アクションの値は1(Create)、2(Read)、4(Update)、8(Delete) です。たとえば、3は Create と Read、15は 4 つすべてを表します。 -
カスタムパーミッションを追加するには、次のコマンドを実行します。クライアントがすでにそのパーミッションを持っている場合は、新しいアクションが既存のアクションに追加されます。
ags iam clients add-permissions --namespace <YourNamespace> --client-id <ClientId> \
--json '{"permissions": [{"resource": "CUSTOM:NAMESPACE:{namespace}:PROGRESSION", "action": 2}]}' -
カスタムパーミッションからアクションを削除するには、次のコマンドを実行します。すべてのアクションを削除すると、パーミッション自体が削除されます。
ags iam clients delete-permission --namespace <YourNamespace> --client-id <ClientId> \
--resource 'CUSTOM:NAMESPACE:{namespace}:PROGRESSION' --action 2
パーミッションの変更は、次回のトークンリフレッシュ時に自動的に反映されます。すぐに適用するには、接続しているサービスを再起動してください。
アプリケーションアクセストークンを取得する
AGS SDK を使用してアプリケーションアクセストークンを取得する
Credential クライアントは、AGS へのサービス間 (S2S) 呼び出しに有効なアクセストークンを必要とします。
以下のコードは、Credential クライアント用に AGS SDK を使用して有効なアクセストークンを生成します。
- Unreal
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
bool bServerLoggedIn = false;
bool bServerLoginComplete = false;
auto ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
ServerApiClient->ServerOauth2.LoginWithClientCredentials(FVoidHandler::CreateLambda([&bServerLoggedIn, &bServerLoginComplete]()
{
UE_LOG(LogAccelByteEcommerceTest, Log, TEXT("Server Login Success"));
bServerLoginComplete = bServerLoggedIn = true;
}), FErrorHandler::CreateLambda([&bServerLoggedIn, &bServerLoginComplete](int32 ErrCode, FString const& ErrMsg)
{
UE_LOG(LogAccelByteEcommerceTest, Error, TEXT("Server Login Success"));
bServerLoginComplete = true;
}));
WaitUntil(bServerLoginComplete, "Waiting for server logged in...");
DedicatedServer server = AccelByteSDK.GetServerRegistry().GetApi().GetDedicatedServer();
Result loginServerResult = null;
server.LoginWithClientCredentials(result => loginServerResult = result);
yield return TestHelper.WaitForValue(() => loginServerResult);
string accessToken = String.Empty;
bool isSuccess = sdk.LoginClient((tokenResp) =>
{
accessToken = tokenResp.AccessToken!;
});
if (isSuccess)
{
//do something with `accessToken`.
}
err := oauth.LoginClient(&clientId, &clientSecret)
DefaultConfigRepository configRepo = new DefaultConfigRepository();
final AccelByteSDK sdk1 =
new AccelByteSDK(
new AccelByteConfig(new OkhttpClient(), new DefaultTokenRepository(), configRepo));
boolean loggedIn = sdk1.loginClient();
assertTrue(loggedIn);
final String token = sdk1.getSdkConfiguration().getTokenRepository().getToken();
final AccessTokenPayload payload = sdk1.parseAccessToken(token, false);
assertNotNull(payload);
import accelbyte_py_sdk.services.auth as auth_service
from accelbyte_py_sdk.core import AccelByteSDK
from accelbyte_py_sdk.core import MyConfigRepository
sdk = AccelByteSDK()
sdk.initialize(
options={
"config": MyConfigRepository(
base_url="https://****.accelbyte.io",
client_id="********************************",
client_secret="********************************",
namespace="********",
)
}
)
result, error = auth_service.login_client(sdk=sdk)
if error:
exit(error)
AGS CLI を使用してアプリケーションアクセストークンを取得する
confidential クライアントのアクセストークンを取得するには、クライアントクレデンシャルグラントを使用して AGS CLI にサインインし、トークンを出力します。
ags auth login --grant client-credentials
ags auth token
AGS_BASE_URL、AGS_CLIENT_ID、AGS_CLIENT_SECRET 環境変数で設定されていない値がある場合は、ログインコマンドの実行時に入力を求められます。詳細については、インストールとサインインを参照してください。
手動 API 呼び出しでアプリケーションアクセストークンを取得する
Confidential Client を使用して単に API テストを行いたい場合は、OpenAPI で認可を取得するのガイドに従って、アプリケーションアクセストークンを手動で作成できます。