와일드카드 정책을 사용한 액세스 권한 지정

특정 IAM 지원 서비스에 대한 액세스 권한을 할당할 때 정책에서사용자, 서비스 ID 및 액세스 그룹에 계정 리소스에 대한 액세스 권한을 부여하는 방법입니다. 액세스 정책에는 주체, 대상 및 역할이 포함됩니다. 고급 운영자를 사용하여 특정 명명 규칙을 충족하는 리소스에 대한 액세스 권한을 부여할 수 있습니다. 와일드카드 정책을 사용하여 일부 리소스에 대한 액세스 권한을 관리하는 데 필요한 정책의 수를 줄일 수 있습니다.

액세스를 지정하려면 리소스에 대한 관리자 역할이 있어야 합니다. 자세한 정보는 IAM 액세스를 참조하십시오.

JSON 정책 문서

대부분의 액세스 정책은 JSON 문서로 IBM Cloud®에 저장됩니다. 정책에서 stringEquals 연산자를 사용하는 경우 조회와 대상 문자열 간에 문자열이 정확하게 일치합니다. stringMatch 연산자를 사용하는 경우 별표(*), 물음표(?), 둘 다 또는 리터럴 값을 사용하여 패턴과 대상 문자열 간에 대/소문자를 구분하는 문자열 일치가 수행됩니다. 별표(*)는 문자열에서 0개 이상의 문자열의 순서를 표시하고, 물음표(?)는 단일 문자를 표시합니다. 다음 예를 참조하십시오.

  • *dev*는 dev가 포함된 문자열과 일치합니다.
  • dev*는 dev로 시작하는 문자열과 일치합니다.
  • *dev는 dev로 끝나는 문자열과 일치합니다.

해당 서비스의 특정 속성에 지원되는 연산자에 대한 세부사항은 액세스를 지정 중인 특정 서비스의 문서를 참조하십시오.

와일드카드로 별표(*) 사용

다음 예에서는 특정 계정에서 dev로 시작하는 모든 Event Streams 주제를 관리하기 위해 모든 사용자에게 제공하는 정책을 작성하는 방법을 보여줍니다.

{
    "type": "access",
    "subjects": [
        {
            "attributes": [
                {
                    "name": "iam_id",
                    "value": "IBMid-12345"
                }
            ]
        }
    ],
    "roles": [
        {
            "role_id": "crn:v1:bluemix:public:iam::::serviceRole:Manager"
        }
    ],
    "resources": [
        {
            "attributes": [
                {
                    "name": "accountId",
                    "value": "d727f71e99b14534b3267fab8cc9b09a"
                },
                {
                    "name": "serviceName",
                    "value": "messagehub"
                },
                {
                    "name": "resourceType",
                    "value": "topic"
                },
                {
                    "name": "resource",
                    "operator": "stringMatch",
                    "value": "dev*"
                }
            ]
        }
    ]
}

와일드카드로 물음표(?) 사용

다음 예제는 특정 패턴으로 끝나는 Event Streams 주제를 편집하기 위해 사용자 액세스를 제공하는 정책을 작성하는 방법을 보여줍니다.

"value": "*??81" 행에서 *은(는) 0개 이상의 문자를 표시하고 ??81(으)로 끝나는 모든 문자열과 일치합니다. ?은(는) 단일 문자를 나타냅니다. 두 개의 ??이(가) 있으므로 결과 패턴은 81에서 끝나는 네 개 이상의 문자의 문자열과 일치합니다.

{
    "type": "access",
    "subjects": [
        {
            "attributes": [
                {
                    "name": "iam_id",
                    "value": "IBMid-12345"
                }
            ]
        }
    ],
    "roles": [
        {
            "role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
        }
    ],
    "resources": [
        {
            "attributes": [
                {
                    "name": "accountId",
                    "value": "d727f71e99b14534b3267fab8cc9b09a"
                },
                {
                    "name": "serviceName",
                    "value": "messagehub"
                },
                {
                    "name": "resourceType",
                    "operator": "stringEquals"
                    "value": "topic",
                },
                {
                    "name": "resource",
                    "operator": "stringMatch",
                    "value": "*??81"
                }
            ]
        }
    ]
}

별표(*)와 물음표(?)를 리터럴 문자로 사용

별표(*)와 물음표(?)를 리터럴 문자로 표현할 수 있으며, 각각을 두 개의 중괄호( {{}}) 안에 묶어 와일드카드로 해석되지 않도록 할 수 있습니다.

다음 예에서는 리터럴 문자 * 및 ? 를 포함하는 Event Streams 주제를 편집할 수 있는 액세스 권한을 사용자에게 부여하는 정책을 만드는 방법을 보여 줍니다. 주제는 마침표 . 뒤에 오는 log 문자열 사이의 단일 문자를 의미하는 .?.log 패턴으로 끝나야 합니다.

{
    "type": "access",
    "subjects": [
        {
            "attributes": [
                {
                    "name": "iam_id",
                    "value": "IBMid-12345"
                }
            ]
        }
    ],
    "roles": [
        {
            "role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
        }
    ],
    "resources": [
        {
            "attributes": [
                {
                    "name": "accountId",
                    "value": "d727f71e99b14534b3267fab8cc9b09a"
                },
                {
                    "name": "serviceName",
                    "value": "messagehub"
                },
                {
                    "name": "resourceType",
                    "operator": "stringEquals"
                    "value": "topic",
                },
                {
                    "name": "resource",
                    "operator": "stringMatch",
                    "value": "dev-topic-{{*}}-{{?}}.?.log"
                }
            ]
        }
    ]
}

"value": "dev-topic-{{*}}-{{?}}.?.log" 에서 {{*}} 은 문자 * 를 나타내고 {{?}} 은 문자 ? 를 나타냅니다. 따라서 dev-topic-*-?.1.log 같은 주제는 이 패턴과 일치합니다.

다음 두 예는 dev* 대소문자를 구분하는 문자열 비교가 수행되는 동일한 평가를 나타냅니다.

{
    "name": "resource",
    "operator": "stringMatch",
    "value": "dev{{*}}"
}
{
    "name": "resource",
    "operator": "stringEquals",
    "value": "dev*"
}

문자열 비교

{{_include-segments/string-compare-intro-reuse.md}}

{{_include-segments/string-compare-table-reuse.md}}