🐧

IAM での権限管理プロジェクト単位でやってませんか?

2024/11/28に公開

はじめに

こんにちは。
クラウドエース株式会社 第四開発部の家野です。

Google Cloud を利用する上で、IAM による権限管理はセキュリティの基礎になります。
しかし、多くの方は、プロジェクト単位で権限を管理しているのではないでしょうか。

この記事では、よりきめ細やかな権限管理を実現する、リソース単位での IAM 権限付与について解説します。
この方法を理解することで、Google Cloud のセキュリティのレベルを 1 段階向上させることができます。

記事の目的

  • プロジェクト単位での IAM 権限管理の課題を理解し、リソース単位での権限管理の必要性を認識する

プロジェクト単位とリソース単位の権限管理の比較

  • プロジェクト単位の権限管理
    図 1

  • リソース単位の権限管理
    図 2

図 1 が示すように、ユーザーに「Compute インスタンス管理者 v1」ロールを付与したとき、そのユーザーは、Compute Engine インスタンスに対して、ほぼすべての操作を実行できます。
従って、図 1 のようにプロジェクト単位で「Compute インスタンス管理者 v1」をユーザーに与えると、そのユーザーが関与していないインスタンスにまで操作できてしまいます。

それに対して、リソース単位の権限管理は、「Compute インスタンス管理者 v1」をリソース単位でユーザーに付与したとき、そのリソースに対してのみ操作が可能になります。
図 2 が示すように、instance-tokyo に対して、ユーザーに「Compute インスタンス管理者 v1」の権限を付与すると、ユーザーは instance-tokyo の Compute Engine インスタンスにのみ操作が可能になります。つまり、instance-osaka に対しては、起動や停止といった簡単な操作も実行できません。

これが、プロジェクト単位の権限管理とリソース単位の権限管理の違いです。

プロジェクト単位での権限管理の落とし穴

プロジェクト単位の権限管理を行うと、プロジェクトメンバー全員に該当するリソースへのアクセス権限を付与します。
これは、一見、シンプルな方法に思えますが、実際にはセキュリティリスクの問題点を抱えています。

過剰権限の付与によるセキュリティリスクの増加

プロジェクト単位で権限を管理する場合、プロジェクトメンバー全員に同じ権限が付与されます。
これは、必要以上の権限を持つユーザーを生み出し、セキュリティリスクを高めることになります。

これでは、特定の権限を持つべきではないユーザーが誤ってデータを削除したり、改ざんしたりするリスクが高まります。
また、悪意のあるユーザーによって機密情報を持ち出してしまう可能性も否定できません。

管理の煩雑化

プロジェクトが増加するにつれて、プロジェクト単位での権限管理は煩雑になります。
各プロジェクトの権限設定を個別に管理するのは大変ですし、担当者が異動や退職などで変更になるたびに、権限設定の内容が分からなくなるブラックボックス化のリスクもあります。

リソース単位の権限管理では、権限をリソースごとに設定するため、プロジェクトが増加しても管理が煩雑になりにくく、ブラックボックス化のリスクも低減できます。
オフィスビルの例で言えば、各部屋に個別の鍵を設定することで、社員の入退社や異動があっても、鍵の管理が容易になります。

このように、プロジェクト単位の権限管理は、一見シンプルで管理しやすいように見えますが、実際にはセキュリティリスクが高く、運用管理の面でも非効率な方法と言えるでしょう。

そこで、リソース単位の権限管理を採用することで、これらのプロジェクト単位の権限管理により生じる問題点を解決します。

リソース単位での権限管理によるメリット

リソース単位の権限管理とは、Cloud Run サービスや Storage バケット、GCE インスタンスなどの個々のリソースに対してユーザーに許可する権限を付与することです。

これは、最小権限の原則に基づいた考え方で、各ユーザーには、業務に必要な最低限のリソースのみに対して権限を付与します。

セキュリティリスクの低減と運用効率の向上

リソース単位での権限管理には、セキュリティリスクの低減運用効率の向上という 2 つの大きなメリットがあります。

  • セキュリティリスクの低減
    権限の過剰付与を防ぐことで、セキュリティリスクを大幅に低減できます。

例えば、あなたがマンションに住んでいたとして、プロジェクト単位の権限管理であると、同じマンションの住民に同じ鍵を渡し、どの部屋でも入れる状態のことです。
しかし、リソース単位の権限管理であると、それぞれの住人に自分の部屋の鍵だけを渡し、それぞれ自分の部屋にしか入れない状態です。

以上の例えのように聞くと当たり前のセキュリティと思われがちですが、実際にプロジェクトにおいて多くの人は、同じマンションの住民に同じ鍵を渡すようなセキュリティリスクを犯しています。

このように、リソース単位の権限管理は、それぞれの開発者に必要なリソースのみの権限を与えることでセキュリティリスクを低減することができます。

  • 運用効率の向上
    運用効率とは、限られた時間(工数)やリソースで、より多くの成果を上げることを指します。
    リソース単位での権限管理は、この運用効率の向上にも貢献します。

具体的には、

  • 特定のユーザーにのみ特定のバケットへの書き込み制限をすることで、データの誤削除や上書きを防ぐことができます。
  • 特定のユーザーにのみ特定のインスタンスへのアクセス権限を付与することで、誤操作によるシステム障害のリスクを低減できます。

このように、特定のユーザーにのみ特定のリソースへのアクセス権限を付与することで、タスクへの集中オペレーションミス防止を実現し、運用効率を高めることができます。

チームメンバーの役割やタスクに応じて、きめ細やかに権限を付与する柔軟な権限設定が可能

リソース単位での権限管理では、各メンバーの役割やタスクに応じて、必要なリソースへのアクセス権限のみを付与することができます。

リソース単位での権限管理では、各メンバーの役割やタスクに応じて、必要なリソースへのアクセス権限のみを付与することができます。
これは、チームメンバーそれぞれが自分の役割に集中し、最高の成果を生み出すための仕組みと言えます。

まとめ

この記事では、Google Cloud の IAM における権限管理について、プロジェクト単位とリソース単位の違いを解説し、リソース単位での権限管理のメリットを紹介しました。

プロジェクト単位の権限管理は、一見シンプルですが、セキュリティリスクの増加や管理の煩雑化などの問題点があります。
一方、リソース単位の権限管理は、最小権限の原則に基づき、必要な人に必要な権限だけを付与することで、セキュリティリスクを低減し、運用効率を高めることができます。

具体的には、以下のようなメリットがあります。

  • セキュリティリスクの低減: 権限の過剰付与を防ぐことで、セキュリティリスクを大幅に低減できます。
  • 運用効率の向上: 特定のユーザーにのみ特定のリソースへのアクセス権限を付与することで、タスクへの集中とオペレーションミス防止を実現し、運用効率を高めることができます。
  • チームメンバーの役割やタスクに応じて、きめ細やかに権限を付与する柔軟な権限設定が可能: 各メンバーが自分の役割に集中し、最高の成果を生み出すための仕組みと言えます。
    Google Cloud を利用する際は、ぜひリソース単位での権限管理を検討し、より安全で効率的なクラウド環境を構築しましょう。

参照

https://cloud.google.com/iam/docs/overview?hl=ja

https://cloud.google.com/iam/docs/viewing-grantable-roles?hl=ja#listing_grantable_roles

https://cloud.google.com/iam/docs/resource-hierarchy-access-control?hl=ja

Discussion