API를 통한 액세스 정책 관리

액세스 정책은 액세스 의사결정을 판별하기 위해 평가되는 규칙 및 조건 세트입니다. 사용자 정의된 액세스 정책을 작성할 수 있습니다. 모든 사용자 정의된 액세스 정책은 애플리케이션 구성에서 옵션으로 표시됩니다.

이 태스크에 대한 정보

일부 기본 액세스 정책은 즉시 사용할 수 있도록 제공되며 수정은 불가능합니다. 테넌트는 자체 요구사항에 따라 사용자 정의된 액세스 정책을 추가할 수 있습니다.

  • 규칙은 첫 번째 일치를 기준으로 평가됩니다. 규칙의 모든 조건 일치가 true로 평가되면 규칙의 결과가 평가 결정으로 리턴됩니다. 추가 처리는 완료되지 않습니다.
  • 선택적 매개변수 alwaysRun: true를 개별 규칙에 추가할 수 있습니다. 이 매개변수를 사용하면 첫 번째로 일치한 규칙 세트 외에도 규칙이 평가됩니다. 첫 번째 일치 및 alwaysRun 매개변수의 결과가 결합되어 가장 제한적인 조치가 정책의 결과로 적용됩니다. 여러 alwaysRun 규칙을 정책에 추가할 수 있습니다.
  • 정책에 디바이스 관리와 같이 조건에 대한 특정 구독이 필요하고 테넌트에 현재 이 구독에 대한 권한이 없는 경우 정책을 건너뜁니다. 다단계 인증(MFA) 결정이 리턴됩니다.
  • 규칙에 MFA에 대한 특정 구독이 필요하고 테넌트에 현재 이 구독에 대한 권한이 없는 경우 평가된 MFA 결정이 거부로 변경됩니다. 이 변경을 통해 무조건적인 액세스를 허용하는 대신 애플리케이션을 보호합니다.

정책 편집기는 정책을 작성하고 수정할 때 사용할 수 있습니다. ‘액세스 정책 관리’를 참조하십시오.

일부 조건은 정책 편집기를 사용하여 추가될 수 없습니다. 이 경우 API는 기존 정책을 수정하거나 이 조건으로 새 액세스 정책을 작성하는 데 사용될 수 있습니다.

액세스 정책을 작성하거나 업데이트할 때 구문 유효성 검증이 수행됩니다.

액세스 정책은 다음의 JSON 형식을 갖습니다.
참고: FedRAMP 은 적응형 액세스를 지원하지 않습니다. 따라서 FedRAMP 고객은 Trusteer 기능을 이용할 수 없습니다.
{
    "name": "policy_name",
    "description": "Description of the policy",
    "schemaVersion": "urn:access:policy:4.0:schema",
    "rules": [
        {
            "name": "allow_with_conditions",
            "id": "1",
            "conditions": {
                "contextAttributes": {
                    "attributes": [
                        {
                            "name": "attrName",
                            "values": [
                                "value1",
                                "value2"
                            ],
                            "opCode": "EQ"
                        }
                    ]
                },
                "subjectAttributes": {
                    "attributes": [
                        {
                            "name": "realmName",
                            "values": [
                                "cloudIdentityRealm",
                                "www.ibm.com"
                            ],
                            "opCode": "IN"
                        },
                        {
                            "name": "customAttr1",
                            "values": [
                                "val1"
                            ],
                            "opCode": "NEQ"
                        }
                    ]
                },
                "timeAttributes": {
                    "attributes": [
                        {
                            "name": "timezone",
                            "opCode": "EQ",
                            "values": [
                                "UTC Offset or GMT Offset"
                            ]
                        },
                        {
                            "name": "startDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "endDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "Monday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        },
                        {
                            "name": "Tuesday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        }
                    ]
                },
                "ipAddress": {
                    "opCode": "MATCH",
                    "values": [
                        "<ip_address>",
                        "<ip_address_range_start> - <ip_address_range_end>",
                        "<ip_address/subnet>"
                    ]
                },   
                "location": {
                    "attributes": [
                        {
                            "values": [
                                "3-Letter-ISO"
                            ],
                            "name": "country",
                            "opCode": "IN"
                        }
                    ]
                }
                  "location": {
                      "attributes": [
                          {
                              "values": [
                                  "<city>"
                              ],
                              "name": "city",
                              "opCode": "IN"
                        }
                    ]
                }
                "geoLocation": {
                    "enabled": "true"
                },
                "trusteer": {
                    "enabled": "true"
                }
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_ALLOW"
                },
                "authnMethods": []
            }
        },
        {
            "name": "Authentication factor validity",
            "id": "2",
            “alwaysRun”: true,
            "conditions": {
            "factorLifetimeAttributes": {
                "attributes": [
                {
                    "name": "anyFactor",
                    "opCode": "EQ",
                    "values": [
                       "120"
                     ]
                }, 
                {
                      "name": "reauthPerDevice",
                      "opCode": "EQ",
                      "values": [
                         "enabled"
                       ]
                  }

               ]
            }
       },
       "result": {
        "extendedAction": {
          "action": "ACTION_MFA_OVERRIDE"
        }
       }
        },
        {
            "name": "mfa_once_per_session_device_conditions",
            "id": "3",
            "contextAttributes": {
                "attributes": [
                    {
                        "name": "devicePlatform",
                        "values": [
                            "IOS",
                            "ANDROID",
                            "OTHER_MOBILE",
                            "MACOS",
                            "WINDOWS",
                            "OTHER_DESKTOP"
                        ],
                        "opCode": "IN"
                    },
                    {
                        "name": "deviceCompliance",
                        "values": [
                            "COMPLIANT",
                            "NONCOMPLIANT",
                            "UNKNOWN"
                        ],
                        "opCode": "IN"
                    }
                ]
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_MFA_PER_SESSION"
                },
                "authnMethods": [
                    "urn:ibm:security:authentication:asf:macotp"
                ]
            }
        },
        {
            "name": "deny_otherwise",
            "id": "100",
            "conditions": {},
            "result": {
                "extendedAction": {
                    "action": "ACTION_DENY"
                },
                "authnMethods": []
            }
        }
    ]
}
참고: API의 대부분은 이미 Swagger 문서에 설명되어 있습니다. 관리자 콘솔의 [설정 ] > [API 액세스 ] > [API 문서 ]에서 Swagger 문서를 확인할 수 있습니다. Swagger API에 대한 자세한 내용은 ‘애플리케이션 프로그래밍 인터페이스(API) 확인’을 참조하세요.
다음 정보가 API 규칙에 적용됩니다.
  • 각 규칙은 3개의 특성으로 구성되어 있습니다.
    name
    규칙의 이름입니다.
    id
    이벤트 데이터 및 보고서에 사용된 규칙에 대한 고유 ID입니다.
    conditions
    규칙마다 둘 이상의 조건이 있을 수 있습니다. 규칙이 일치하고 결과가 적용되려면 규칙의 모든 조건이 true로 평가되어야 합니다. 기본 규칙에 빈 조건이 포함됩니다.
  • 조건에는 다음 특성이 포함되어 있습니다.
    contextAttributes
    액세스 정책이 실행된 플로우에 문맥상으로 관련된 속성입니다. 이러한 속성에는 디바이스 관리, OpenID Connect 및 HTTP 요청 속성이 포함됩니다.
    subjectAttributes
    인증된 사용자 주체와 연관된 로그인 세션 속성입니다.
    factorLifetimeAttributes
    특정 인증 요인 또는 메소드에 유효성을 연관시킵니다.
    timeAttributes
    시간 기반 액세스 제어를 사용하는 하루의 시간 속성입니다.
    ipAddress
    개별, 범위 또는 서브넷 기반 허용 및 차단 목록을 사용하는 IP 주소 조건입니다.
    location
    사용자의 IP 주소에서 분석된 국가 또는 구/군/시입니다. 국가는 다음 ISO 표준에 기반한 쉼표로 구분된 국가 이름 또는 세 자리 국가 코드 목록을 포함해야 합니다. 단일 국가 또는 세 자리 국가 코드가 허용 가능합니다.

    구/군/시는 쉼표로 구분된 구/군/시 이름 목록을 포함해야 합니다. 단일 구/군/시가 허용 가능합니다.

    geoLocation
    액세스 결정이 확인된 위치입니다. 기본 설정은 이전 다섯 개의 확인된 위치에 대한 설정입니다. condition 속성은 (true) 또는 disabledenabled (false)입니다.
    trusteer
    IBM Security Trusteer는 사용자를 위한 새 디바이스의 첫 번째 액세스를 발견합니다.
  • 속성에는 다음 특성이 포함되어 있습니다.
    name
    속성의 이름입니다.
    values
    속성의 값입니다.
    opCode
    연산자입니다.
  • 속성값의 평가를 위한 연산자:
    EQ
    모든 값이 존재합니다.
    NEQ
    어떤 값도 존재하지 않습니다.
    IN
    하나 이상의 값이 존재합니다.
    MATCH
    IP 주소, 범위 또는 서브넷 일치에 대한 ipAddress 조건 opCode입니다.
    NOMATCH
    IP 주소, 범위 또는 서브넷 불일치에 대한 ipAddress 조건 opCode입니다.
  • 결과에는 다음 특성이 포함되어 있습니다.
    Action
    조건이 충족될 때 트리거할 조치를 지정합니다. 유효값은 다음과 같습니다.
    • ACTION_ALLOW
    • ACTION_MFA_ALWAYS - 액세스 정책 평가 중에 규칙이 일치할 때마다 MFA 수행.
    • ACTION_MFA_PER_SESSION - 인증된 세션당 한 번의 MFA 수행 및 이미 완료된 경우 허용.
    • ACTION_DENY.
    authnMethods
    이 작업이 다단계 인증(MFA)인 경우 허용되는 인증 방식을 지정합니다. urn:ibm:security:authentication:asf:macotp - 사용자가 완료할 수 있는 모든 방식을 선택하도록 허용하거나, 다음 요소 중 하나 이상을 선택하도록 허용합니다:
    • emailotp - 이메일 일회성 비밀번호
    • smsotp - SMS 일회성 비밀번호
    • totp - 시간 기반 일회성 비밀번호(인증자 앱)
    • signatures - IBM® Verify 앱 푸시 알림
    • passkey - 패스키 인증기
    • voiceotp - 사용자의 등록된 전화번호로 전송된 일회성 음성 비밀번호입니다.
    • anyFactorurn:ibm:security:authentication:asf:macotp의 별명입니다. 이 메커니즘은 특히 factorLifetime 조건에 사용되며 사용자가 완료한 유효한 인증 메커니즘을 나타냅니다.
요인 수명

이 조건은 유효성을 특정 인증 요인 또는 메소드와 연관시킵니다. 유효성은 사용자 프로파일 또는 사용자의 디바이스와 연관될 수 있습니다.

이 기능을 사용하여 다음과 같은 비즈니스 로직을 구현할 수 있습니다.
  • 캘린더 일에 한 번만 사용자를 MFA하려는 조직의 경우 18시간 동안 재인증을 구성할 수 있습니다.
  • 비즈니스 주에 한 번만 사용자를 MFA하려는 조직의 경우에는 6일마다 정책을 구성할 수 있습니다.
    참고:reauthPerDevice 옵션이 활성화되면, '알려진' 기기가 아닌 경우 사용자에게 다단계 인증(MFA)을 요청합니다. 예를 들어, 사용자가 다른 브라우저(Edge 대신에 Chrome)에서 또는 다른 물리적 디바이스에서 인증합니다.

    사생활 보호 모드가 사용되면 각각의 새 세션마다 최초 액세스에 대해 MFA 인증 확인이 생성됩니다.

참고: 이 조건을 포함하는 규칙은 해당 규칙 내에 다른 조건이 정의되어 있지 않은 ‘ “alwaysRun” ’ 규칙이어야 합니다.
factorLifeTimeAttributes는 다음 필수 속성을 포함합니다.
name
유효한 authnMethods 또는 anyFactor 속성의 목록입니다.
values
authnMethod의 유효성 간격(초)입니다.
opCode
EQ.
다음 속성은 MFA 유효성을 값이 “사용(enabled)”인 경우 사용자의 디바이스와 연관시키고 값이 “사용 안함(disabled)”인 경우 사용자의 프로파일과 연관시킵니다.
name
reauthPerDevice.
values
사용 또는 사용 안함.
opCode
EQ.
컨텍스트 속성

컨텍스트 속성에는 디바이스 관리, OpenID Connect 및 HTTP 요청 속성이 포함될 수 있습니다.

디바이스 관리 컨텍스트 속성
디바이스 관리 속성 devicePlatform 및 deviceComplaince이 contextAttributes 조건 아래에 정의됩니다.
devicePlatform
OTHER_DESKTOPIOS운영 체제 및 장치 플랫폼(예: iOS, Android, Mac OS X ). 허용되는 값은, ANDROID, OTHER_MOBILE, MACOS, WINDOWS, 입니다. 이 조건을 적용하려면 장치 관리 구독이 필요하며, ‘조건부 액세스 구성’을 참조하십시오.
deviceCompliance
디바이스의 준수 레벨입니다. UNKNOWNCOMPLIANT허용되는 값은, NONCOMPLIANT, 및 입니다. 이 조건을 적용하려면 장치 관리 구독이 필요합니다. ‘조건부 액세스 구성’을 참조하십시오.
OpenID Connect 컨텍스트 속성
OpenID Connect 애플리케이션에 사용 가능한 대부분의 다음 컨텍스트 속성은 OIDC 요청 매개변수입니다. 요청 매개변수 이름과 1-1 일치하지 않는 해당 속성은 설명과 함께 제공됩니다. 자세한 내용은 https://openid.net/specs/openid-connect-core-1_0.html#AuthRequesthttps://tools.ietf.org/html/rfc7636#section-4.3 을 참조하십시오.
scope
이 토큰이 수신하는 임의의 공백으로 구분된 범위 목록입니다. 잘 알려진 범위의 예는 emailaddressprofileopenid입니다.
response_type
다음 중 하나 이상: codetokenid_token. 지원되는 값에 대해서는 https://oidc-dev-test.ite1.idng.ibmcloudsecurity.com/developer/explorer/#!/OpenID_Connect/handleAuthorizeGet 을 참조하십시오.
acr_values
특정 ARC를 특정 인증에 연결합니다.
method
실행된 정책이 포함된 문자열 목록으로, 형식은 urn:ibm:security:policy:id:<policy-id>다음과 같습니다.
claims
복합 JSON입니다.
response_mode
문자열, query fragment form_post 중 하나입니다.
response_method
요청에서 URI로 리턴되는 메소드를 지정합니다.
code_challenge_exist
요청에서 code_challenge가 전송되었는지 여부를 지정하는 PKCE 플로우의 부울 선택입니다.
redirect_uri_scheme
브라우저가 아닌 사용자 에이전트와 응답을 발견하는 경로 재지정 URI의 스킴 구성요소입니다.
client_type
클라이언트가 public 또는 confidential 클라이언트인지 여부를 지정합니다. 기밀 클라이언트에는 클라이언트 시크릿이 있습니다.
request_type
요청이 전송된 엔드포인트를 식별합니다. device_authorize, user_authorize, authorization access_token, introspect, user_info, revoke,, 또는 client_registration.
HTTP 요청 컨텍스트 속성
HTTP 요청 헤더는 액세스 정책에서 평가할 수 있습니다. HTTP 요청 헤더 이름을 contextAttributes의 속성 이름 및 인바운드 헤더 값에 해당하는 값으로 사용하십시오. 값의 변환은 현재 지원되지 않으며 컨텍스트 속성에 대한 표준 opCodes만 사용 가능합니다. 예를 들어,,
"conditions": {
  "contextAttributes": {
    "attributes": [{
        "name": "referer",
        "values": [
          "https://<isv_tenant>/usc/",
          "https://<some_other_known_referrer>"
        ],
        "opCode": "IN"
      },
      {
        "name": "user-agent",
        "values": [
          "<specific_user_agent>"
        ],
        "opCode": "EQ"
      },
      {
        "name": "x-forwarded-for",
        "values": [
          "<x_forwarded_for_ip_address>"
        ],
        "opCode": "EQ"
      }
    ]
  }
 }
클라우드 디렉토리 주제 속성
다음의 주제 속성이 클라우드 디렉토리 ID 소스의 사용자에 사용 가능합니다.
displayName
사용자에 대해 표시된 이름입니다.
name
이름 및 성입니다.
family_name
사용자의 성입니다.
given_name
사용자의 이름입니다.
email
사용자의 이메일입니다.
emailAddress
사용자의 이메일입니다.
groupIds
그룹 ID입니다.
preferred_username
변경 가능한 사용자 이름입니다.
uuid
사용자의 고유 ID입니다.
uniqueSecurityName
사용자의 고유 ID입니다.
realmName
비연합 클라우드 디렉토리 사용자의 경우 이 값은 항상 cloudIdentityRealm입니다.
userType
비연합 클라우드 디렉토리 사용자의 경우 이 값은 항상 regular입니다.
timeAttributes

일 속성의 시간입니다.

  • 속성에는 다음 특성이 포함되어 있습니다.
    name
    속성의 이름입니다. name은 요일이고 선택적으로 timeZone, startDateendDate입니다. 값은 다음 중 하나입니다.
    • 월요일
    • 화요일
    • 수요일
    • 목요일
    • 금요일
    • 토요일
    • 일요일

    요일 시간 범위는 { ... "values": [ "hh:mm-hh:mm" ]}의 범위에서 사용 가능하며 선택적으로 startDateendDate로 스테이징될 수 있습니다.

    timeZone
    지역과 연관된 시간대입니다. 기본값은 협정 세계시(UTC)입니다. 값은 다음 형식일 수 있습니다.
    • UTC<+/-><offset> - 예를 들어, UTC+10
    • GMT<+/-><offset> - 예를 들어, GMT-5
    • 시간대 데이터베이스 이름 - 예: Australia/Brisbane
    startDate
    조건이 활성이 되는 시작 날짜 및 시간입니다. 요일 속성으로 스테이징된 블록 시간 일치를 작성하는 데 개별적으로 사용될 수 있습니다. startDate는 요일에 우선합니다. 값의 형식은 YYYY-MM-DD HH:mm:ss입니다. 요일의 경우 값의 형식은 hh:mm-hh:mm입니다.
    endDate
    조건이 더 이상 활성이 아니게 되는 선택적 종료 날짜 및 시간입니다. startDate를 포함하거나 요일 속성으로 스테이징된 블록 시간 일치를 작성하는 데 개별적으로 사용될 수 있습니다. endDate 없이, startDate 또는 요일이 있는 경우 조건이 무제한으로 일치합니다. YYYY-MM-DD HH:mm:ss값은 다음과 같은 형식입니다.
ipAddress

IPv4 및 IPv6를 지원하는 IP 주소 기반 조건입니다.

  • 조건에는 다음 특성이 포함됩니다.
    values
    조건의 값입니다. 유효한 값은 IP 주소의 범위, 쉼표로 구분된 IP 주소 목록 또는 CIDR IP 주소입니다.
    opCode
    연산자입니다. 특정 opCodesipAddress 조건에 필요합니다.
    사용 가능한 연산자는 다음과 같습니다.
    MATCH
    모든 값이 존재합니다.
    NOMATCH
    어떤 값도 존재하지 않습니다.
location

사용자의 IP 주소에서 분석된 국가 또는 구/군/시입니다. 국가는 다음 ISO 표준에 기반한 쉼표로 구분된 국가 이름 또는 세 자리 국가 코드 목록을 포함해야 합니다. ISO 3166-1 alpha-3을 참조하십시오. 단일 국가 또는 세 자리 국가 코드가 허용 가능합니다. 구/군/시는 쉼표로 구분된 구/군/시 이름 목록을 포함해야 합니다. 단일 구/군/시가 허용 가능합니다.

  • 조건에는 다음 특성이 포함됩니다.
    사용
    조건이 사용(true) 아니면 사용 안함(false)으로 설정됩니다.
    opCode
    연산자입니다. 특정 opCodeslocation 조건에 필요합니다.
    사용 가능한 연산자는 다음과 같습니다.
    IN
    하나 이상의 값이 존재합니다.
    NOT IN
    어떤 값도 존재하지 않습니다.
geoLocation

액세스 결정이 확인된 위치입니다. 기본 설정은 이전 다섯 개의 확인된 위치에 대한 설정입니다.

  • 조건에는 다음 특성이 포함됩니다.
    사용
    조건이 사용(true) 아니면 사용 안함(false)으로 설정됩니다.
trusteer

IBM Security Trusteer는 사용자를 위한 새 디바이스의 첫 번째 액세스를 발견합니다.

  • 조건에는 다음 특성이 포함됩니다.
    사용
    조건이 사용(true) 아니면 사용 안함(false)으로 설정됩니다.

프로시저

  1. 액세스 토큰을 가져오십시오.
    (액세스 정책 관리) 권한이 manageAccessPolicies 있는 API 클라이언트를 사용하여 액세스 토큰을 생성하십시오.
    Request:
    
    curl https://<tenant-hostname>/oidc/endpoint/default/token 
    -d 'grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>'
    
    Response:
    
    {
      "access_token": <access_token>,
      "token_type": "Bearer",
      "expires_in": 7199
    }

    후속 요청을 위해 액세스 토큰을 저장하십시오.

  2. 요청 본문의 일부로서 액세스 정책을 전송하십시오.
    
    Request:
    
    curl -X POST \
      https://<tenant-hostname>/v5.0/policyvault/accesspolicy \
      -H 'Authorization: Bearer <access_token>' \
      -H 'Content-Type: application/json' \
      -d 
    '{
        "schemaVersion": "urn:access:policy:4.0:schema",
        "name": "policy_name",
        "description": "Description of the policy",
        "rules": [
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_ALLOW"
                    },
                    "authnMethods": []
                },
                "name": "allow_with_conditions",
                "id": "1",
                "alwaysRun": false,
                "conditions": {
                    "subjectAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "cloudIdentityRealm",
                                    "www.ibm.com"
                                ],
                                "name": "realmName",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "val1"
                                ],
                                "name": "customAttr1",
                                "opCode": "NEQ"
                            }
                        ]
                    },
                    "contextAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "COMPLIANT",
                                    "NONCOMPLIANT",
                                    "UNKNOWN"
                                ],
                                "name": "deviceCompliance",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "IOS",
                                    "ANDROID",
                                    "OTHER_MOBILE",
                                    "MACOS",
                                    "WINDOWS",
                                    "OTHER_DESKTOP"
                                ],
                                "name": "devicePlatform",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "value1",
                                    "value2"
                                ],
                                "name": "attrName",
                                "opCode": "EQ"
                            }
                        ]
                    }
                }
            },
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_MFA_PER_SESSION"
                    },
                    "authnMethods": [
                        "urn:ibm:security:authentication:asf:macotp"
                    ]
                },
                "name": "mfa_once_per_session",
                "id": "2",
                "alwaysRun": false,
                "conditions": {}
            },
         {	           
             "name": "Authentication factor validity",
             "id": "3",
             "conditions": {
             "factorLifetimeAttributes": {
                 "attributes": [
                 {
                     "name": "smsotp",
                     "opCode": "EQ",
                     "values": [
                        "120"
                      ]
                   }
                  ]
                }
           },
           "result": {
            "extendedAction": {
                "action": "ACTION_MFA_OVERRIDE"
             }
           }
             },
    
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_DENY"
                    },
                    "authnMethods": []
                },
                "name": "deny_otherwise",
                "id": "100",
                "alwaysRun": false,
                "conditions": {}
            }
        ]
    }'