Documentation index for AI agents

접근 제어

GS2의 API에 대한 접근 제어

GS2의 각 서비스에 접근하기 위한 크리덴셜(인증 정보)이나 접근 권한을 관리하는 구조가 GS2-Identifier입니다.

각 서비스에 접근이 가능한지에 대한 권한 관리는 GS2-Identifier 사용자(이하 사용자) 단위로 이루어집니다.

사용자에게는 GS2의 어떤 서비스를 이용할 수 있는지에 대한 정의(보안 정책)를 할당합니다.

GS2는 크리덴셜을 사용하여 접근한 사용자를 인증하고, 프로젝트 토큰을 반환합니다. 게임 앱/관리 도구는 이 프로젝트 토큰을 사용하여 각 서비스에 접근합니다.

권한에 대한 상세한 설정은 보안 정책에서 정의되며, 이를 사용자마다 할당합니다.

사용자

사용자가 갖는 데이터 구조의 개요는 다음과 같습니다.

class User {
  +userId
  +name
  :
}

class Identifier {
  +clientId
  +clientSecret
  :
}

class Password {
  +hashedPassword
  :
}

class AttachedSecurityPolicy {
  +securityPolicyId
  :
}

class SecurityPolicy {
  +policyDocument
  :
}

User "1" *-- "many" Identifier
User "1" --- "1" Password
User "1" *-- "<=10" AttachedSecurityPolicy
AttachedSecurityPolicy "1" -- "1" SecurityPolicy

note "인증 정보(크리덴셜)\n각 서비스의 API에 접근하기 위해 필요한 정보" as IdentifierNote
Identifier .. IdentifierNote

note "비밀번호\n관리 콘솔에 서브 계정으로 로그인하기 위한 정보" as PasswordNote
Password .. PasswordNote

note "사용자의 접근 권한" as AttachedSecurityPolicyNote
AttachedSecurityPolicy .. AttachedSecurityPolicyNote

note "권한 설정" as SecurityPolicyNote
SecurityPolicy .. SecurityPolicyNote

보안 정책

보안 정책에는 미리 다음과 같은 정책이 정의되어 있습니다.

보안 정책 이름설명
AdministratorAccess모든 API를 이용할 수 있는 권한
ApplicationAccess치트 행위로 이어지지 않는 API만 호출할 수 있는 권한
DeliveryAccessGS2-Distributor가 리소스 오버플로우 처리를 실행하기 위해 필요한 권한
UnauthenticatedAccess버전 체크(GS2-Version) 실행에 필요한 처리(로그인 처리 포함)만 수행할 수 있는 권한

AdministratorAccess 정책은 GS2의 모든 서비스에 접근 가능한 권한입니다.

게임 앱 내에 내장하여 사용하는 것을 전제로 한 ApplicationAccess 정책은, 치트 행위로 이어질 수 있는 서버 조작이 가능한 API 호출을 할 수 없도록 설정되어 있습니다.

보안 정책의 형식

보안 정책은 JSON 형식으로 작성합니다.

Statements 안에 Effect, Actions, Resources 각 요소를 포함시킵니다. *(애스터리스크)는 와일드카드를 나타냅니다.

가장 단순한 보안 정책은 다음 예시와 같습니다. 이 보안 정책은 모든 서비스, 모든 API에 대해 모든 조작을 허용하는 것입니다.

{
  "Version": "2016-04-01",
  "Statements": [
    {
      "Effect": "Allow",
      "Actions": [
        "*"
      ],
      "Resources": [
        "*"
      ]
    }
  ]
}

Actions

예시로 든 보안 정책은 GS2-Inbox 서비스에 대해 모든 조작을 수행할 수 있다는 것입니다. 이 예시의 보안 정책이 할당된 사용자의 권한은 GS2-Inbox 이외의 서비스에는 접근할 수 없습니다.

*(애스터리스크)는 와일드카드를 나타냅니다.

{
  "Version": "2016-04-01",
  "Statements": [
    {
      "Effect": "Allow",
      "Actions": [
        "Gs2Inbox:*"
      ],
      "Resources": [
        "*"
      ]
    }
  ]
}

Effect

이 정책에서 API 접근에 대한 허가/불허가를 지정합니다.

지정접근
Allow허가
Deny불허가
액션 열거

Actions에는 액션, 즉 접근하여 실행 가능/불가능한 메서드의 지정을 열거할 수 있습니다. 각 서비스의 레퍼런스에 기재된 메서드를 지정합니다.

[서비스 이름]:[메서드 이름]과 같이 :(콜론)을 사이에 넣어 주세요.

서비스 이름 지정은 Gs2Inbox 처럼 -(하이픈)을 포함하지 않고, Gs2에 각 서비스의 명칭이 이어진 형태가 됩니다.

메서드 이름은 SendMessage 처럼 첫 글자가 대문자(어퍼 카멜 케이스)가 됩니다.

{
  "Version": "2016-04-01",
  "Statements": [
    {
      "Effect": "Allow",
      "Actions": [
        "Gs2Inbox:SendMessage",
        "Gs2Inbox:DescribeMessage",
        "Gs2Inbox:ReadMessage",
        "Gs2Inbox:DeleteMessage"
      ],
      "Resources": [
        "*"
      ]
    }
  ]
}

Resources

이 정책의 영향을 받는 리소스의 범위를 지정하는 변수입니다.

Resources에는 조작을 허가하거나 거부하고자 하는 리소스의 GRN을 열거합니다. Actions와 마찬가지로 앞뒤에 와일드카드를 사용할 수 있습니다.

{
  "Version": "2016-04-01",
  "Statements": [
    {
      "Effect": "Allow",
      "Actions": [
        "Gs2Inbox:SendMessage"
      ],
      "Resources": [
        "grn:gs2:{region}:{ownerId}:inbox:namespace-0001",
        "grn:gs2:{region}:{ownerId}:inbox:namespace-0001:*"
      ]
    }
  ]
}

이 예시에서는 namespace-0001에 대해서만 SendMessage가 가능한 권한을 설정하고 있습니다.

플레이스홀더

GRN의 요소 중 “리전 이름: {region}”, “오너ID: {ownerId}”, “사용자ID: {userId}“에는 플레이스홀더를 사용할 수 있습니다. 플레이스홀더를 지정하면 실행 시 접근하고 있는 값으로 치환되어 평가됩니다.

보안 정책 판정

사용자는 최대 10개의 보안 정책을 할당할 수 있습니다. Effect에 Allow가 지정된 액션에 대해 Or로 처리한 후, Effect에 Deny가 지정된 액션에 대해 Or로 처리한 것을 제외한 API를 호출할 수 있게 됩니다.

즉, Allow와 Deny 양쪽에 기술이 있는 경우에는 Deny가 우선됩니다.