1.13.2. ロールベースアクセス制御 (RBAC) の設定

Role-based Access Control (RBAC: ロールベースアクセス制御) オブジェクトは、ユーザーまたはサービスがプロジェクト内で所定のアクションを実行することが許可されるかどうかを決定します。メッシュでワークロードのメッシュ全体、namespace 全体、およびワークロード全体のアクセス制御を定義できます。

RBAC を設定するには、アクセスを設定する namespace で AuthorizationPolicy リソースを作成します。メッシュ全体のアクセスを設定する場合は、Service Mesh コントロールプレーンをインストールしたプロジェクト (例: istio-system) を使用します。

たとえば、RBAC を使用して以下を実行するポリシーを作成できます。

  • プロジェクト内通信を設定します。
  • デフォルト namespace のすべてのワークロードへの完全アクセスを許可または拒否します。
  • ingress ゲートウェイアクセスを許可または拒否します。
  • アクセスにはトークンが必要です。

認証ポリシーには、セレクター、アクション、およびルールの一覧が含まれます。

  • selector フィールドは、ポリシーのターゲットを指定します。
  • action フィールドは、要求を許可または拒否するかどうかを指定します。
  • rules フィールドは、アクションをトリガーするタイミングを指定します。

    • from フィールドは、要求元についての制約を指定します。
    • to フィールドは、要求のターゲットおよびパラメーターの制約を指定します。
    • when フィールドは、ルールを適用する追加の条件を指定します。

手順

  1. AuthorizationPolicy リソースを作成します。以下の例は、ingress-policy AuthorizationPolicy を更新して、IP アドレスが Ingress ゲートウェイにアクセスすることを拒否するリソースを示しています。

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: ingress-policy
      namespace: istio-system
    spec:
      selector:
        matchLabels:
          app: istio-ingressgateway
      action: DENY
      rules:
      - from:
        - source:
          ipBlocks: ["1.2.3.4"]
  2. リソースを作成した後に以下のコマンドを実行して、namespace にリソースを作成します。namespace は、AuthorizationPolicy リソースの metadata.namespace フィールドと一致する必要があります。

    $ oc create -n istio-system -f <filename>

次のステップ

その他の一般的な設定については、以下の例を参照してください。

1.13.2.1. プロジェクト内通信の設定

AuthorizationPolicy を使用して Service Mesh コントロールプレーンを設定し、メッシュまたはメッシュ内のサービスとの通信トラフィックを許可したり、拒否したりすることができます。

1.13.2.1.1. namespace 外のサービスへのアクセス制限

以下の AuthorizationPolicy リソースの例を使用して、bookinfo namespace にないソースからの要求を拒否することができます。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: httpbin-deny
 namespace: bookinfo
spec:
 selector:
   matchLabels:
     app: httpbin
     version: v1
 action: DENY
 rules:
 - from:
   - source:
       notNamespaces: ["bookinfo"]
1.13.2.1.2. allow-all およびデフォルトの deny-all 認証ポリシーの作成

以下の例は、bookinfo namespace のすべてのワークロードへの完全なアクセスを許可する allow-all 認証ポリシーを示しています。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-all
  namespace: bookinfo
spec:
  action: ALLOW
  rules:
  - {}

以下の例は、bookinfo namespace のすべてのワークロードへのアクセスを拒否するポリシーを示しています。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: deny-all
  namespace: bookinfo
spec:
  {}