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

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

特定の 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 ストリングの間に単一文字があることを意味します。

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

ストリングの比較

次の表は、 /v2/policies 構文を使用してアクセスポリシーを構築する際に使用できる文字列比較演算子をまとめたものです。 各バージョンの詳細については 、「 /v1/policies/v2/policies の構文の比較」 を参照してください。 演算子の使用例については、 リソース属性に基づく条件 を参照してください。

アクセスポリシーの条件で使用できる文字列比較演算子。
オペレーター 説明
stringEquals 大/小文字を区別するストリング比較。 ブール値または数値は、比較の前にストリングに変換されます。
stringMatch パターンと対象文字列の間で、大文字と小文字を区別した文字列の一致が、アスタリスク( * )、クエスチョンマーク( ? )、両方、またはなし(リテラル値と同じ)を使用して実行されます。 アスタリスク (*) はストリング中のゼロ個以上の文字からなる任意の文字列を表し、疑問符 (?) は任意の単一文字を表します。 アスタリスク * およびクエスチョンマーク ? は、それぞれを2組の波括弧 {{}} で囲むことで、リテラル値として表現することもできます。
stringExists ブール値 true は、文字列が存在しなければならず、空でもよいことを示します。 false は、文字列が存在してはならないことを示します。
stringEqualsAnyOf 大文字と小文字を区別して、文字列の配列のいずれかの文字列と完全に一致する。 値は10個まで。
stringMatchAnyOf 大文字と小文字を区別して、文字列の配列のいずれかの文字列と一致する。 文字列値には、アスタリスク( * )、クエスチョンマーク( ? )、両方、またはどちらも含まない(リテラル値と同じ)のいずれかを指定できます。 アスタリスク (*) はストリング中のゼロ個以上の文字からなる任意の文字列を表し、疑問符 (?) は任意の単一文字を表します。 アスタリスク * およびクエスチョンマーク ? は、それぞれを2組の波括弧 {{}} で囲むことで、リテラル値として表現することもできます。 値は10個まで。