ワイルドカード・ポリシーを使用したアクセス権限の割り当て

特定の IAM 対応サービスへのアクセスを割り当てるとき、 ポリシーのユーザー、サービス ID、およびアクセス・グループにアカウント・リソースへのアクセス権限を付与する方法。 アクセス・ポリシーは、サブジェクト、ターゲット、および役割を含みます。中で高度な演算子を使って、特定の命名規則を満たすリソースへのアクセスを許可することができる。 ワイルドカード・ポリシーを使用することによって、複数のリソースへのアクセス権限を管理するのに必要なポリシーの数を減らすことができます。

アクセス権限を割り当てるには、対象のリソースに対する管理者役割が必要です。 詳しくは、IAM アクセス権限を参照してください。

JSON ポリシー文書

ほとんどのアクセス・ポリシーは、JSON 文書として IBM Cloud® に保管されます。 stringEquals 演算子をポリシーで使用すると、照会とターゲット・ストリングとの間で完全一致ストリング突き合わせが実行されます。 stringMatch 演算子を使うと、アスタリスク(* )、クエスチョンマーク(? )、その両方、またはリテラル値のいずれかを使って、パターンとターゲット文字列の間で大文字小文字を区別した文字列マッチが行われます。 アスタリスク (*) はストリング中のゼロ個以上の文字からなる任意の文字列を表し、疑問符 (?) は任意の単一文字を表します。 以下の例を参照してください。

  • *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"で、*はゼロ個以上の文字を示し、??81で終わる任意のストリングと一致します。 ?は単一文字を表します。 2 つの??があるため、結果のパターンは、81で終わる 4 文字以上のストリングと一致します。

{
    "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"
                }
            ]
        }
    ]
}

アスタリスク (*) およびクエスチョンマーク (?) をリテラル文字として使用する

アスタリスク(*)とクエスチョンマーク(?)をリテラル文字として表現するには、それぞれを2つの中括弧 {{}} で囲み、ワイルドカードとして解釈されないようにします。

次の例では、リテラル文字 * および ? を含む Event Streams トピックを編集するアクセ スをユーザーに与えるポリシーを作成する方法を示します。 トピックの末尾はパターン .?.log でなければならない。これは、ピリオド . に続く log 文字列の間の任意の1文字を意味する。

{
    "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 のようなトピックはこのパターンに合致する。

次の2つの例は、 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}}