액세스 제어

IBM Cloud® App ID를 사용하면 특정 기능에 액세스하거나 앱에서 특정 조치를 수행할 수 있는 사용자와 애플리케이션을 정의할 수 있습니다. 액세스를 제어하려면 범위를 작성하고 역할로 그룹화할 수 있습니다. 그런 다음 하나 이상의 앱 사용자와 애플리케이션에 역할을 지정하십시오.

범위는 액세스 권한을 작성하기 위해 App ID에 등록하는 애플리케이션의 런타임 조치입니다. 역할은 각기 다른 유형의 앱 사용자와 애플리케이션에 다양한 권한을 지정하는 범위의 콜렉션입니다. 예를 들어 회사에서 개발자를 고용하면 코드를 읽고 쓸 수 있는 역할을 작성할 수 있습니다. 감사자를 고용하면 다음 이미지에 표시된 대로 보기 전용 역할이 있을 수 있습니다.

4단계 App ID 접근 제어 워크플로우를 보여주는 다이어그램: 런타임 작업을 범위로 등록, 범위를 역할로 컴파일, 사용자 또는 애플리케이션에 역할 할당, 런타임에 액세스 토큰에서 범위 확인
App ID 접근 제어의 작동 방식

  1. 애플리케이션에서 발생할 수 있는 런타임 조치를 App ID에 등록하십시오.
  2. 역할을 형성하도록 범위를 컴파일하여 그룹을 만드십시오.
  3. 사용자 또는 애플리케이션에 역할을 지정하여 액세스 권한을 제어하십시오.
  4. 런타임 시 사용자 액세스 토큰(또는 클라이언트 인증 정보 플로우의 경우 애플리케이션 토큰)에 리턴되는 범위를 확인하도록 애플리케이션을 구성하십시오.

애플리케이션에 관한 자세한 정보는 애플리케이션 ID 및 권한을 참조하십시오.

시작하기 전에

  • 애플리케이션이 있어야 합니다.
  • 각 유형의 역할 및 범위가 애플리케이션에 어떠한 영향을 미칠 수 있는지를 이해해야 합니다. 사용자가 액세스 권한을 부여하므로 필요한 사람에게만 권한을 부여하도록 하십시오.
  • 적용되는 한계를 알고 있어야 합니다.

콘솔에서 범위 만들기

범위는 조치를 완료하는 데 필요한 권한을 부여받은 사용자가 수행할 수 있는 애플리케이션의 런타임 조치입니다. 범위는 App ID에 애플리케이션을 등록할 때 작성됩니다. 앱이 이미 등록되어 있으면 범위를 포함하도록 편집할 수 있습니다.

범위 이름의 값은 다음 요구사항을 충족해야 합니다.

  • 영숫자임
  • 소문자임
  • appid 또는 openid로 시작하지 않음
  • 마침표(.) 또는 밑줄(_) 이외의 특수 문자를 포함하지 않음
  • 50자 미만임

범위를 작성하기 위해 App ID UI를 사용할 수 있습니다.

  1. App ID 대시보드에서 애플리케이션으로 이동하십시오.
  2. 애플리케이션 추가를 클릭하여 구성 화면을 여십시오. 이미 사용할 인증 정보가 있으면 업데이트할 행의 조치 메뉴에서 편집을 클릭하십시오.
  3. 앱에 이름을 제공하고 애플리케이션의 유형을 선택하십시오.
  4. 사용자 정의 범위의 값을 입력하고 더하기 부호(+)를 클릭하십시오. 범위 예제 값은 read 또는 write일 수 있습니다.
  5. 앱에 모든 범위를 추가할 때까지 이전 단계를 반복하십시오.
  6. 저장 을 클릭하십시오.

API를 사용하여 범위 작성

범위는 조치를 완료하는 데 필요한 권한을 부여받은 사용자가 수행할 수 있는 애플리케이션의 런타임 조치입니다. 범위는 App ID에 애플리케이션을 등록할 때 작성됩니다. 앱이 이미 등록되어 있으면 범위를 포함하도록 편집할 수 있습니다.

범위 이름의 값은 다음 요구사항을 충족해야 합니다.

  • 영숫자임
  • 소문자임
  • appid 또는 openid로 시작하지 않음
  • 마침표(.) 또는 밑줄(_) 이외의 특수 문자를 포함하지 않음
  • 50자 미만임

범위를 작성하기 위해 App ID UI를 사용할 수 있습니다.

  1. /scopes 엔드포인트에 대한 다음과 같은 요청을 수행하여 범위를 작성하십시오.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/scopes"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{\ "scopes":\ [\ <scopesObject>}" ]}"
    
    가변 설명
    region App ID 인스턴스가 프로비저닝되는 지역입니다. 사용 가능한 지역에 대해 자세히 알아보십시오.
    tenantID App ID 인스턴스의 고유 ID입니다. 이 값은 서비스 대시보드의 애플리케이션 탭에 나열되므로 앱의 인증 정보에서 찾을 수 있습니다.
    clientID 애플리케이션의 고유 ID입니다. 이 값은 서비스 대시보드의 애플리케이션에 나열되므로 앱의 인증 정보에서 찾을 수 있습니다.
    scopesObject 애플리케이션에 대해 작성할 모든 범위의 JSON 오브젝트.
    {: caption=" /scopes 엔드포인트를 호출하는 데 필요한 변수" caption-side="top"}
  2. 선택사항: 범위가 작성되었는지 확인하십시오.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/scopes"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    

콘솔에서 역할 만들기

역할은 동일한 유형의 사용자에게 적용되는 범위 그룹입니다. 예를 들어 관리자 역할을 작성하면 범위 섹션에서 해당 역할이 읽기, 쓰기 또는 작성 조치를 수행할 수 있습니다. 그러나 viewer(이)라는 다른 역할을 작성하는 경우 해당 역할이 지정된 사용자는 읽기 전용 액세스 권한이 있습니다. 역할을 작성하기 위해 App ID UI를 사용할 수 있습니다.

  1. App ID 대시보드에서 프로파일 및 역할 > 역할로 이동하십시오.

  2. 역할 작성을 클릭하여 구성 화면을 여십시오.

  3. 역할에 이름을 지정하고 설명을 제공하십시오.

  4. 이전 섹션에서 작성한 범위를 사용하여 다음 형식으로 역할에 범위를 지정하십시오. **+**를 클릭하여 범위를 추가하십시오.

    <appName>/<scope>
    

    애플리케이션이 하나뿐이면 앱 이름을 지정하지 않아도 됩니다. 범위만 추가할 수 있습니다.

  5. 이전 단계를 반복하여 범위를 추가하십시오.

  6. 저장 을 클릭하십시오.

API를 사용하여 역할 작성

역할은 동일한 유형의 사용자에게 적용되는 범위 그룹입니다. 예를 들어 관리자 역할을 작성하면 범위 섹션에서 해당 역할이 읽기, 쓰기 또는 작성 조치를 수행할 수 있습니다. 그러나 viewer(이)라는 다른 역할을 작성하는 경우 해당 역할이 지정된 사용자는 읽기 전용 액세스 권한이 있습니다. 역할을 작성하기 위해 App ID API를 사용할 수 있습니다.

  1. /roles 엔드포인트에 대한 요청을 수행하여 역할을 작성하십시오.

    curl -X POST "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d { \"name\": \"<roleName>\", \"description\": \"<roleDescription>\", \"access\": [ { \"application_id\": \"<applicationID>\", \"scopes\": [ \"<scopes>" ] } ]}"
    
    가변 설명
    region App ID 인스턴스가 프로비저닝되는 지역입니다. 사용 가능한 지역에 대해 자세히 알아보십시오.
    tenantID App ID 인스턴스의 고유 ID입니다. 이 값은 서비스 대시보드의 애플리케이션 탭에 나열되므로 앱의 인증 정보에서 찾을 수 있습니다.
    clientID 애플리케이션의 고유 ID입니다. 이 값은 애플리케이션에 나열되므로 앱의 인증 정보에서 찾을 수 있습니다.
    roleName 역할에 지정할 이름입니다.
    roleDescription 역할이 수행해야 하는 작업을 설명하는 간단한 문구입니다.
    applicationID 애플리케이션의 고유 ID입니다. 이 값은 애플리케이션에 나열되므로 앱의 인증 정보에서 찾을 수 있습니다.
    scopes 역할에 적용할 모든 범위의 JSON 오브젝트.
    {: caption=" /scopes 엔드포인트를 호출하는 데 필요한 변수" caption-side="top"}
  2. 선택사항: 역할이 작성되었는지 확인하십시오.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles -H "accept: application/json"
    

    응답은 다음 예와 비슷합니다.

    {
       "roles": [
       {
          "id": "12345678-1234-1234-1234-123456789012",
          "name": "admin",
          "description": "Can perform administrative tasks.",
          "access": [
             {
             "application_id": "de33d272-f8a7-4406-8fe8-ab28fd457be5",
             "scopes": [
                "create",
                "update",
                "write",
                "read"
             ]
             }
          ]
       }
       {
          "id": "123454231-1234-1234-3334-12345687012",
          "name": "developer",
          "description": "Can perform administrative tasks.",
          "access": [
             {
             "application_id": "de33d272-f8a7-4406-8fe8-ab28fd457be5",
             "scopes": [
                "write",
                "read"
             ]
             }
          ]
       }
       ]
    }
    

콘솔에서 사용자에게 역할 할당하기

역할을 작성한 다음 사용자의 프로파일에 지정할 수 있습니다. 향후 사용자를 작성할 때 역할도 지정할 수 있습니다.

  1. App ID 대시보드에서 프로파일 및 역할 > 사용자 프로파일로 이동하십시오.
  2. 역할을 지정하는 특정 사용자 행의 조치 메뉴에서 역할 지정을 클릭하십시오.
  3. 사용 가능한 역할 목록에서 추가할 역할을 하나 이상 선택하십시오.
  4. 선택사항: 원하는 역할이 표시되지 않으면 역할 작성을 클릭하고 정보를 제공하여 다른 옵션을 추가하십시오.
  5. 저장 을 클릭하십시오.

API를 사용하여 사용자에게 역할 지정

역할을 작성한 다음 사용자의 프로파일에 지정할 수 있습니다. 향후 사용자를 작성할 때 역할도 지정할 수 있습니다.

  1. 이메일 주소와 같은 식별 조회로 App ID 사용자를 검색하여 사용자 ID를 찾으십시오.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/Users?query=<identifyingSearchQuery>" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    

    예:

    curl -X GET https://us-south.appid.cloud.ibm.com/management/v4/e19a2778-3262-4986-8875-8khjafsdkhjsdafkjh/cloud_directory/Users?query=example@domain.com
    -H "accept: application/json"
    -H "authorization: Bearer eyJraWQiOiIyMDE3MTEyOSIsImFsZ...."
    
  2. 선택사항: 역할 ID나 역할 이름을 가져오십시오. 역할 ID나 이름을 이미 알고 있으면 다음 단계로 건너뛰십시오.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    
  3. 지정할 역할의 JSON 오브젝트를 포함하는 /roles 엔드포인트에 대한 요청을 하십시오.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/users/<userID>/roles"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{ \"roles\": { \"ids\": [ \"<roleIDs>\" ] }}"
    -H "authorization: Bearer <token>"
    

사용자로부터 역할을 제거하려면 PUT 요청을 다시 수행하되 역할 ID를 제거하십시오.

토큰에 사용자 역할 추가

기본적으로 역할은 사용자 토큰에 리턴되지 않습니다. 런타임 의사결정은 범위를 기준으로 구성하는 것이 좋습니다. 그러나 역할을 사용하려는 경우 사용자 정의 청구 맵핑을 사용하여 역할을 토큰에 맵핑할 수 있습니다.

인증하는 경우 제어를 구성한 애플리케이션 및 사용자에 맞게 username : client IDpassword : secret을 사용해야 합니다.

애플리케이션에 역할 지정

역할을 작성한 다음 App ID API를 사용하여 애플리케이션에 지정할 수 있습니다.

애플리케이션 역할은 클라이언트 인증 정보 플로우에서만 유효합니다.

  1. 애플리케이션 목록을 조회하여 애플리케이션 클라이언트 ID를 확인하십시오. App ID UI의 애플리케이션 탭에서 이 값을 확인할 수도 있습니다.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    

    예:

    curl -X GET https://us-south.appid.cloud.ibm.com/management/v4/e19a2778-3262-4986-8875-8khjafsdkhjsdafkjh/applications
    -H "accept: application/json"
    -H "authorization: Bearer eyJraWQiOiIyMDE3MTEyOSIsImFsZ...."
    
  2. 역할 ID를 확인하십시오.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles" \
    -H "accept: application/json" \
    -H "authorization: Bearer <token>"
    
  3. 지정할 역할의 JSON 오브젝트를 포함하는 /roles 엔드포인트에 대한 요청을 하십시오. 이 요청은 현재 역할을 제공된 역할 ID로 대체합니다. 올바른 역할을 지정하고 있는지 확인하십시오.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/roles"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{ \"roles\": { \"ids\": [ \"<roleIDs>\" ] }}"
    -H "authorization: Bearer <token>"
    

사용자로부터 역할을 제거하려면 PUT 요청을 다시 수행하되 역할 ID를 제거하십시오.

런타임 시 액세스 제어

사용자 또는 애플리케이션이 보호되는 리소스 중 하나에 액세스를 시도하면 App ID에서 토큰을 작성하고 리턴합니다. 사용자 또는 애플리케이션이 지정된 모든 범위가 액세스 토큰에 리턴됩니다. 액세스 토큰을 사용하여 런타임 시 의사결정을 내릴 수 있습니다. 애플리케이션을 보호하는 데 사용하는 전략에 따라 범위 확인 방법이 다를 수 있습니다.

웹 앱 전략을 사용하는 경우

웹 앱 전략을 사용하면 hasScope 메소드를 사용하여 요청에 범위가 포함되어 있는지 확인할 수 있습니다. 역할이 지정된 사용자가 로그인할 때 역할에 정의된 모든 범위를 포함하는 App ID 토큰에 의해 액세스가 부여됩니다.예를 들어 Node.js SDK로 작업하는 경우 코드 스니펫은 다음과 유사합니다.

app.get("/protected", passport.authenticate(WebAppStrategy.STRATEGY_NAME), function(req, res){
    if(WebAppStrategy.hasScope(req, "read write")){
              res.json(req.user);
    }
    else {
        res.send("insufficient scopes");
    }
});

API 전략을 사용하는 경우

API 전략 코드에 범위 변수를 추가하여 특정 엔드포인트에 액세스하는 데 필요한 범위를 정의할 수 있습니다. 예를 들어 예를 들어 Node.js로 작성된 애플리케이션이 있으며 Node.js SDK로 작업 중인 경우 코드 스니펫은 다음과 같을 수 있습니다.

app.get("/api/protected",
        passport.authenticate(APIStrategy.STRATEGY_NAME, {
                audience: "myApp",
                scope: "read write update"
        }),
        function(req, res) {
                res.send("Hello from protected resource");
        }
);
API 전략에 사용되는 변수 이해하기
가변 설명
scope 필수 범위로, 공백으로 구분됩니다.
audience 애플리케이션 클라이언트 ID입니다.

액세스 제거

더 이상 필요하지 않은 범위 또는 역할을 삭제할 수 있습니다.

콘솔에서 범위 삭제하기

범위가 더 이상 필요하지 않으면 App ID UI를 사용하여 삭제할 수 있습니다.

범위를 삭제하면 연관된 모든 역할에서 제거됩니다.

App ID 서비스 대시보드를 사용하여 범위를 삭제할 수 있습니다.

  1. App ID 대시보드에서 애플리케이션으로 이동하십시오.
  2. 범위를 편집하려는 애플리케이션 행의 조치 메뉴에서 편집을 클릭하십시오.
  3. 제거할 범위의 상자에서 X를 클릭하십시오.
  4. 저장 을 클릭하십시오.

API를 사용하여 범위 삭제

범위가 더 이상 필요하지 않으면 App ID API를 사용하여 삭제할 수 있습니다. 범위를 삭제하려면 JSON 오브젝트에서 제거한 다음 /scopes 엔드포인트에 대한 새 PUT 요청을 수행하십시오.

범위를 삭제하면 연관된 모든 역할에서 제거됩니다.

  1. /scopes 엔드포인트에 다음을 요청한 다음 범위를 변경하거나 삭제하십시오. 허용하려는 범위만 포함하도록 범위 JSON 오브젝트를 업데이트하십시오.

    curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/applications/<clientID>/scopes"
    -H "accept: application/json"
    -H "Content-Type: application/json"
    -d "{\ "scopes":\ [\ <scopesObject>" ]}"
    

콘솔에서 역할 삭제하기

특정 역할이 더 이상 필요하지 않은 경우 App ID UI를 사용하여 이를 삭제할 수 있습니다.

역할을 삭제하면 현재 역할을 사용 중인 모든 사용자 및 애플리케이션에서 액세스가 제거됩니다.

  1. 서비스 대시보드에서 프로파일 및 역할 > 역할로 이동하십시오.
  2. 삭제할 역할 행의 조치 메뉴에서 삭제를 선택하십시오.
  3. 역할을 삭제하면 현재 역할을 사용 중인 모든 사용자와 애플리케이션에 영향을 미친다는 점을 유의하십시오.
  4. 삭제를 클릭하십시오.

API를 사용하여 역할 삭제

특정 역할이 더 이상 필요하지 않은 경우 App ID API를 사용하여 삭제할 수 있습니다.

역할을 삭제하면 현재 역할을 사용 중인 모든 사용자 및 애플리케이션에서 액세스가 제거됩니다.

  1. 역할 ID나 역할 이름을 가져오십시오. 역할 ID나 이름을 이미 알고 있으면 다음 단계로 건너뛰십시오.

    curl -X GET "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles"
    -H "accept: application/json"
    
  2. 지정할 역할의 JSON 오브젝트를 포함하는 /roles 엔드포인트에 대한 요청을 하십시오.

    curl -X DELETE "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/roles/<roleID>"
    -H "accept: application/json"