サービス間の HTTP リクエストをきめ細かく制御するために、HTTP リクエストに対する承認ポリシーを設定して、サービスインタラクション権限を管理できます。これにより、承認されたリクエストのみが特定のサービスにアクセスできるようになり、サービスのセキュリティと信頼性が向上します。
前提条件
Bookinfo アプリケーションが ASM インスタンスにデプロイされていること。詳細については、「ASM インスタンスに追加された ACK クラスターにアプリケーションをデプロイする」をご参照ください。
Istio リソースが定義されていること。詳細については、「Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする」をご参照ください。
ステップ 1:空の承認ポリシーを設定する
次の例は、空の承認ポリシーに基づいてワークロードへのアクセス権限を取得するために承認ポリシーを設定する方法を示しています。空の承認ポリシーは、ワークロードへのアクセスを開始したすべてのリクエストを拒否する基本的な拒否ポリシーです。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。表示されたページで、[YAML から作成] をクリックします。
[作成] ページで、既定[名前空間] ドロップダウンリストから YAML作成 を選択し、テンプレートを選択し、次の内容を コードエディターにコピーして、 をクリックします。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {}その後、[承認ポリシー] ページで [allow-nothing] 承認ポリシーを表示できます。
ブラウザーのアドレスバーに
http://{IP address of your ASM gateway}/productpageと入力して、Bookinfo アプリケーションにアクセスします。RBAC: access deniedメッセージが返されます。これは、アクセス権限がないことを示しています。ゲートウェイの IP アドレスを取得する方法の詳細については、「Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする」をご参照ください。
ステップ 2:productpage サービスの承認ポリシーを設定する
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
次のいずれかの方法を使用して、Productpage サービスへのアクセスを許可する承認ポリシーを設定します。
方法 1:YAML を使用して承認ポリシーを作成する
[承認ポリシー] ページで、[YAML から作成] をクリックします。
[作成] ページで、[名前空間] ドロップダウンリストから [default] を選択し、テンプレートを選択し、次の内容を [YAML] コードエディターにコピーして、[作成] をクリックします。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: "productpage-viewer" namespace: default spec: selector: matchLabels: app: productpage action: ALLOW rules: - to: - operation: methods: ["GET"]
方法 2:グラフィカルユーザーインターフェース (GUI) を使用して承認ポリシーを作成する
[承認ポリシー] ページで、[作成] をクリックします。
[作成] ページで、次のパラメーターを設定し、[作成] をクリックします。
パラメーター
説明
名前
承認ポリシーの名前。この例では、値は productpage-viewer に設定されています。
ポリシータイプ
承認アクション。この例では、値は [許可] に設定されています。
名前空間
承認ポリシーを作成する名前空間。この例では、[ワークロードスコープ] タブの [名前空間] パラメーターは [default] に設定されています。
有効スコープ
承認ポリシーの有効スコープ。この例では、値は [サービス] に設定されています。
ワークロード
承認ポリシーが有効になるワークロード。この例では、値は [productpage] に設定されています。
リクエストマッチングルール
HTTP リクエストを処理する方法。この例では、[リクエストターゲットの追加] セクションで [メソッド] がオンになっており、値は GET に設定されています。
その後、[承認ポリシー] ページに [productpage-viewer] 承認ポリシーが表示されます。
ブラウザーのアドレスバーに
http://{IP address of your ASM gateway}/productpageと入力して、Bookinfo アプリケーションにアクセスします。次の図の結果は、productpage サービスにはアクセスできますが、details サービスまたは reviews サービスにはアクセスできないことを示しています。これは、productpage サービス用に設定した承認ポリシーが、HTTP GET リクエストによる productpage サービスへのアクセスを許可しているためです。

ステップ 3:details サービスの承認ポリシーを設定する
details サービスの承認ポリシーを設定して、productpage サービスのサービスアカウントから送信されたリクエストが details サービスにアクセスできるようにすることができます。
productpage サービスのサービスアカウントを取得します。
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のペインで、 を選択します。
[デプロイメント] ページで、[productpage-v1] サービスを見つけて、[アクション] 列の
サービスアカウントを選択します。[YAML の編集] ダイアログボックスで、 パラメーターの値を取得します。次の図に示すように、
serviceAccountパラメーターの値はbookinfo-productpageです。
承認ポリシーを作成します。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
次のいずれかの方法を使用して、承認ポリシーを作成します。
方法 1:YAML を使用して承認ポリシーを作成する
[承認ポリシー] ページで、[YAML から作成] をクリックします。
[作成] ページで、[名前空間] ドロップダウンリストから [default] を選択し、テンプレートを選択し、次の内容を [YAML] コードエディターにコピーして、[作成] をクリックします。
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: details-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage # bookinfo-productpage は serviceAccount パラメーターの値で、前のステップで取得したものです。 selector: matchLabels: app: details
方法 2:GUI を使用して承認ポリシーを作成する
[承認ポリシー] ページで、[作成] をクリックします。
[作成] ページで、次のパラメーターを設定し、[作成] をクリックします。
パラメーター
説明
名前
承認ポリシーの名前。この例では、値は details-viewer に設定されています。
ポリシータイプ
承認アクション。この例では、値は [許可] に設定されています。
名前空間
承認ポリシーを作成する名前空間。この例では、[ワークロードスコープ] タブの [名前空間] パラメーターは [default] に設定されています。
有効スコープ
承認ポリシーの有効スコープ。この例では、値は [サービス] に設定されています。
ワークロード
承認ポリシーが有効になるワークロード。この例では、値は [details] に設定されています。
リクエストマッチングルール
リクエストの送信元。この例では、[リクエスト送信元の追加] セクションで [プリンシパル] がオンになっており、値は cluster.local/ns/default/sa/bookinfo-productpage に設定されています。
説明bookinfo-productpageはserviceAccountパラメーターの値で、サブステップ 1 で取得したものです。HTTP リクエストを処理する方法。この例では、[リクエストターゲットの追加] セクションで [メソッド] がオンになっており、値は GET に設定されています。
その後、[承認ポリシー] ページに [details-viewer] 承認ポリシーが表示されます。
ブラウザーのアドレスバーに
http://{IP address of your ASM gateway}/productpageと入力して、Bookinfo アプリケーションにアクセスします。次の図の結果は、左側の details サービスにはアクセスできますが、右側の reviews サービスにはアクセスできないことを示しています。
ステップ 4:reviews サービスの承認ポリシーを設定する
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
次のいずれかの方法を使用して、承認ポリシーを作成します。
方法 1:YAML を使用して承認ポリシーを作成する
[承認ポリシー] ページで、[YAML から作成] をクリックします。
[作成] ページで、[名前空間] ドロップダウンリストから [default] を選択し、テンプレートを選択し、次の内容を [YAML] コードエディターにコピーして、[作成] をクリックします。
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: reviews-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage selector: matchLabels: app: reviews
方法 2:GUI を使用して承認ポリシーを作成する
[承認ポリシー] ページで、[作成] をクリックします。
[作成] ページで、次のパラメーターを設定し、[作成] をクリックします。
パラメーター
説明
名前
承認ポリシーの名前。この例では、値は reviews-viewer に設定されています。
ポリシータイプ
承認アクション。この例では、値は [許可] に設定されています。
名前空間
承認ポリシーを作成する名前空間。この例では、[ワークロードスコープ] タブの [名前空間] パラメーターは [default] に設定されています。
有効スコープ
承認ポリシーの有効スコープ。この例では、値は [サービス] に設定されています。
ワークロード
承認ポリシーが有効になるワークロード。この例では、値は [reviews] に設定されています。
リクエストマッチングルール
リクエストの送信元。この例では、[リクエスト送信元の追加] セクションで [プリンシパル] がオンになっており、値は cluster.local/ns/default/sa/bookinfo-productpage に設定されています。
説明bookinfo-productpageはserviceAccountパラメーターの値で、サブステップ 1 で取得したものです。HTTP リクエストを処理する方法。この例では、[リクエストターゲットの追加] セクションで [メソッド] がオンになっており、値は GET に設定されています。
その後、[承認ポリシー] ページに [reviews-viewer] 承認ポリシーが表示されます。
ブラウザーのアドレスバーに
http://{IP address of your ASM gateway}/productpageと入力して、Bookinfo アプリケーションにアクセスします。次の図の結果は、左側の details サービスと右側の reviews サービスの両方にアクセスできることを示しています。

参考資料
承認ポリシーの設定が不適切な場合、予期しないアクセスが拒否または許可される可能性があります。ASM 承認ポリシーを試用モードで使用して、承認ポリシーの実行結果がログに基づいて期待どおりかを確認できます。期待どおりでない場合は、実行結果が期待どおりになるまで承認ポリシーを調整できます。その後、試用モードを無効にして、承認ポリシーを有効にすることができます。詳細については、「ASM 承認ポリシーを試用モードで実行する」をご参照ください。
サービス間の TCP リクエストをきめ細かく制御する方法の詳細については、「TCP リクエストに対する承認ポリシーを設定する」をご参照ください。
ASM インスタンス内のサービスから外部サービスへのアクセストラフィックを制御する方法の詳細については、「承認ポリシーを使用して ASM インスタンス内のサービスから外部 Web サイトへのアクセストラフィックを制御する」および「承認ポリシーを使用して ASM インスタンス内のサービスから外部データベースへのアクセストラフィックを制御する」をご参照ください。
ASM ゲートウェイのアクセスログの内容をカスタマイズして、潜在的なセキュリティリスクをタイムリーに検出できます。詳細については、「ASM ゲートウェイのアクセスログの生成と収集の機能を設定する」をご参照ください。
メッシュ監査機能を有効にして、さまざまなユーザーの日常業務を記録または追跡できます。また、ASM リソースに対する操作の監査アラートを設定し、重要なリソースが変更されたときにアラート連絡先にタイムリーにアラート通知を送信することもできます。詳細については、「ASM で KubeAPI 操作監査機能を使用する」および「ASM リソースに対する操作の監査アラートを設定する」をご参照ください。