コンテンツに移動
セキュリティ & アイデンティティ

IAM 推奨事項の一括適用による最小権限の実現

2021年1月27日
Google Cloud Japan Team

※この投稿は米国時間 2021 年 1 月 20 日に、Google Cloud blog に投稿されたものの抄訳です。

こんなシナリオを想像してみてください。あなたの会社はしばらく前から Google Cloud を使っています。今のところ、サービス停止やセキュリティ侵害、予想外の出費といった問題もありません。あなたは非常に満足していました。ある開発者からこんなメールを受け取るまでは。彼女は、自分が参加しているプロジェクトのサービス アカウントが Cloud Storage API へのアクセスのためだけに作成されたものであるにもかかわらず、プロジェクト オーナーのロールも付与されていることに気づいたのです。不必要に高い権限が付与されていることが気になると言われ、あなたは調査を始めます。

組織内のいくつかのプロジェクトを見ていくにつれ、複数のインスタンスで、プロジェクト オーナー編集者といった高権限のアクセスロールが、それらを必要としない人々、グループ、サービス アカウントに割り当てられていることに気がつきました。困ったことに、この問題がどこまで広がっているのかすらわかりません。あなたの会社には何百ものプロジェクトがあり、何千もの GCP ID があるのです。すべてを手作業でチェックする時間もありませんし、業務にあたってそれぞれの ID にどのような権限が必要かもわかりません。

このようなシチュエーションに見覚えがあっても不思議ではありません。驚くほどよくあることなのですから。最先端の組織でさえ、ID と権限の管理は非常に難しい問題です。ですが、朗報があります。Google Cloud の IAM Recommender は、セキュリティ組織が最小権限の原則(タスクを完了するために必要なアクセスや権限だけを与えられるべきという考え方)を遵守するためのお手伝いをします。こちらのブログ投稿でご紹介したように、IAM Recommender は機械学習を利用して、過去 90 日間の GCP 環境全体における各プリンシパルの権限使用状況を検査します。その検査に基づいて、ロールがユーザーに適していると判断するか、そのユーザーのニーズにより適した新しいロールを推奨します。たとえば、シニア マネージャーが Google Cloud を使用して BigQuery のレポートを見るとします。IAM Recommender はそのパターンに気づき、マネージャーのロールをオーナーから BigQuery データ閲覧者のようなより適切なものに変更することを推奨します。

このブログでは、Cloud Shell のコマンドセットを使用して、すべてのプロジェクトで IAM 推奨事項を分析し、それらの推奨事項をプロジェクト全体に一括適用する方法をご説明します。このプロセスでは、以下の方法をご紹介します。

  1. IAM 推奨事項があるサービス アカウント、メンバー、グループの総数をプロジェクト別に表示する。

  2. IAM 推奨事項があるプロジェクトの中から、適用してもよいと思われるものを特定する。

  3. プロジェクトに推奨事項を一括適用する。

  4. (省略可)必要に応じ、一括適用された推奨事項を元に戻す。

  5. 推奨事項があるプロジェクトをさらに特定する。

  6. ステップ 1 から 3 を繰り返す。

さっそく始めましょう。

IAM 推奨事項の一括適用の準備をする

始める前に、Google Cloud 環境の準備のために少しすることがあります。

  1. Recommender APICloud Asset API が有効になっていることを確認してください。

  2. サービス アカウントを作成し、IAM Recommender 管理者ロール閲覧者Cloud Asset 閲覧者Cloud Security 管理者 のロールを組織レベルで付与します。これらのスクリプトを実行する際には、このサービス アカウントとそれに関連するキーを後で参照する必要があります。プロジェクトの Cloud Asset API が VPC Service Control パラメータにある場合、これらのスクリプトは実行されないことに注意してください。

これで用意ができました。

ステップ 1: IAM 推奨事項を表示する

1. このコマンドを Cloud Shell で実行し、必要なコードをすべて iam_recommender_at_scale という名前のフォルダに保存します。このコマンドはまた、コードを実行するフォルダ内に Python の仮想環境を作成します。

読み込んでいます...

2. ソース ディレクトリに移動し、python 環境を起動します。

読み込んでいます...

3. 次に、組織内のすべての IAM 推奨事項を取得し、プロジェクトごとに分けます。組織 ID を必ず入力してください。ここでは <YOUR-ORGANIZATION-ID> として呼び出されます。また、準備ステップで保存したサービス アカウント キーへのパスを入力する必要があります。ここでは <SERVICE-ACCOUNT-FILE-PATH> として呼び出されます。

読み込んでいます...

たとえば次のようになります。

読み込んでいます...

4. 今回のデモでは、ステップ 1.3 の結果を CSV にエクスポートし、Google スプレッドシートにアップロードしました。ただし、簡単に BigQuery や独自のデータ分析ツールを使ってデータを見ることもできます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/active_IAM.max-1000x1000.jpg
テーブル 1: リソースの列には、組織内でアクティブな IAM 推奨事項があるすべてのプロジェクトの名前が記載されています。次の列は、推奨事項の合計をサービス アカウント別、ユーザー別、グループ別に分けたものです。

ステップ 2: IAM 推奨事項を適用するプロジェクトを選ぶ

1. これまでの作業の結果を分析します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/IAM_recommendations_n6zgG15.max-1900x1900.jpg

テーブル 2: テーブル 1 を縦棒グラフを使って可視化すると、推奨事項の総数の点で、いくつかの外れ値があることが明らかになります。このドキュメントでは、「project/organization1:TestProj」プロジェクトに絞って見ていきます。

2. 一括適用する推奨事項があるプロジェクトを選択します。この例では、「project/organization1: TestProj」が以下の 2 つの基準条件を満たしていると思われました。

  • このプロジェクトには、比較的多くの推奨事項がありますか?

    • 「TestProj」は、推奨事項の総数が 2 番目に多いので、基準を満たしています。


  • プロジェクトは IAM Recommender をテストドライブするのに安全な環境ですか?

    • 「TestProj」はサンドボックスなので安全です。

3. (省略可)サンドボックス プロジェクトがない場合や、ステップ 2 で説明した基準が適切でないと感じた場合は、他にも以下のような方法があります。

  • 身近なプロジェクトを選んでみてください。不必要な変更がなされた場合に気づきやすいようなプロジェクトです。

  • セキュリティに気を配っている同僚に、自分のプロジェクトで IAM Recommender を使いたいかどうか聞いてみましょう。

  • 非常に予測しやすい使用パターンがある従来のプロジェクトを選択します。IAM Recommender は機械学習を使用して、最も動的なプロジェクトに対しても正確な推奨を行えますが、このほうがリスクを管理しやすいかもしれません。

ステップ 3: IAM 推奨事項を適用する

1. 「TestProj」で各プリンシパルに推奨事項を表示します。このステップでは、推奨事項は適用されず、表示されるのみです。

読み込んでいます...

例:

読み込んでいます...

2. 結果として得られる JSON は、IAM アクセス ポリシーを実際に変更するためのテンプレートです。この JSON は、後で必要になった場合にこれらの変更を元に戻す仕組みとしても機能しますので、安全な場所に保存するようにしてください。

以下に JSON の一般的な例を示します。JSON 内の各推奨事項には以下のものが含まれます。

  1. id: 推奨事項の一意の識別子。

  2. etag: 推奨事項の変更時間。

  3. member: 推奨事項の対象となっている ID またはプリンシパル。メンバーごとに複数のロールを持つことができるため、1 人のメンバーにつき 1 つ以上の推奨事項がある場合があります。

  4. roles_recommended_to_be_removed: IAM Recommender が削除するロール。

  5. roles_recommended_to_be_replaced_with: 既存のロールに置き換えられるロール。推奨事項に応じて、IAM Recommender は最小権限の原則に沿って、既存のロールを 1 つのロール、多くのロール、またはロールなし(つまり、そのロールを完全に削除する)に置き換えます。

読み込んでいます...

3. (省略可)このデモでは JSON を変更するのではなく、すべての推奨事項をそのまま適用します。しかし、この JSON をカスタマイズして特定の推奨事項を削除する場合は、この時点で行います。お好みのエディタで推奨事項を削除してファイルを保存し、Cloud Shell のファイル マネージャーにアップロードするだけです。JSON を通じて特定のタイプの推奨事項を削除するスクリプトを書くこともできます(たとえば、特定のプリンシパルやロールに関連した推奨事項を採用したくない場合など)。

4. 以下のコマンドを実行して、ステップ 3.1 で作成した JSON に記載されたすべての変更を適用します。ステップ 4 では、これらの変更を後で元に戻す方法をご説明します。

読み込んでいます...

例:

読み込んでいます...

5. これであなたのプロジェクトは、プロセスの最初の段階よりも、はるかに最小権限の原則の遵守に近づきました。ステップ 1.3 を再び実行すると、「TestProj」の推奨事項が 483 から 0 になったことがわかります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/TestProj.max-1200x1200.jpg

ステップ 4: 変更を元に戻す(省略可)

3.1 で作成した JSON を参照し、以下のコードを実行して変更を元に戻します。

読み込んでいます...

例:

読み込んでいます...

ステップ 5: さらに多くの推奨事項を適用する

この時点で、次に何を行うかにはいくつかの選択肢があります。

さらに多くの推奨事項を適用できます。このスクリプトを再度実行するか、コンソールの IAM ページに移動し、IAM 推奨事項アイコンから個々の推奨事項を探します。もう一つの方法は、Recommendations Hub にアクセスして、IAM 関連のものだけでなく、すべての GCP 推奨事項を見ることです。

または追加ステップとして、Terraform などを使用して、IAM Recommender の Infrastructure as Code パイプラインを設定することも可能です。設定方法については、このチュートリアルをチェックしてみてください。

それだけではありません

IAM Recommender を使って最小権限を確保する方法はたくさんあります。このブログが、会社のセキュリティ リスクになりかねないプロジェクトを特定し、低減するのに役立てば幸いです。Veolia のような企業が IAM Recommender を利用して、何百万もの権限を悪影響なく削除した方法については、こちらでお読みいただけます。貴社でも同じような経験をされることを期待しています。お読みいただきありがとうございました。

Google 社員の Asjad Nasir、Bakh Inamov、Tom Nikl の協力に感謝します。

-ユーザー エクスペリエンス リサーチャー Joel Sytsma

-ソフトウェア エンジニア Abhishek Mishra

投稿先