たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【GCP】【OCI】IAMの比較

ここでは、GCPとOCIのIAMについて比較してみます。お互いのIAMの深い比較というよりは、使用する上で必要な考え方について説明します。

IAMとはなにか

IAM(Identity and Access Management)。アデンティティ情報や、情報へのアクセス権限の管理を行う。

パブリッククラウド(例:OCI/GCP)では、クラウド上のリソースに対して、どのユーザがどんな操作をすることができるのかを定義して管理を行います。そうすることで、リソースへのアクセスを、アクセスすべきユーザのみに絞ることができます

GCPのIAM

cloud.google.com

Cloud IAM を使用すると、特定の GCP リソースに対するアクセス権をきめ細かく付与し、他のリソースへの望ましくないアクセスを防ぐことができます。Cloud IAM では「最小権限」のセキュリティ原則を導入でき、リソースに対する必要なアクセス権のみを付与できます

ここに書かれているように、GCPにおいて最小権限での運用を勧められています。原則のため、もちろん例外もあります。これは追々説明します。

リソース一覧

まずは、CGPにおけるIAMリソースの確認をします。大きく分けて、下記の2つです。さらにそ下にいろんな要素があります。

  • ID ( Google アカウント, サービス アカウント, Google グループ, G Suite ドメイン, Cloud Identity ドメイン )
  • アクセス管理 ( リソース, 権限, 役割, IAMポリシー, ポリシー階層)

GCPのIAMのページを見てもらえるとわかると思いますが、上記の要素がGCPにはあります。

OCIのIAM

docs.oracle.com

OCIのIAMに関するドキュメントはこちらです。和訳が変な感じですが、マウスオーバーすると英文が表示されるので意味がわからない箇所は英文を読んだほうがわかりやすいかも。

リソース一覧

OCIでは、下記リソースが存在します。GCPと分け方そのものが異なりますが、ここで記載した項目はあくまで公式の引用だからです。

  • リソース
  • ユーザ
  • グループ
  • 動的グループ
  • コンパートメント
  • テナンシ
  • ポリシー
  • ホーム・リージョン
  • フェデレーション

2つのIAMの違い

仕様の違い

例えばですが、GCPではユーザ単位でも権限の付与ができますし、メンバ(IDにあたるアカウント)をグループに登録してそのグループに対して権限を付与することもできます。後者のやり方のほうがGoogleとしての推奨方法です。

ですが、OCIだとユーザ単位での設定はできず、グループに権限を付与し、そのグループにメンバ(アカウント)を所属させることでメンバの権限をコントロールしています。(最初はメンバ単位でもできると思ったけど、ドキュメント読んだりコンソール画面に行ってもやはりグループ単位でしたできなさそう)

GCPの推奨方法しかできなくしているOCIの仕様は後発のクラウドサービスゆえの設計なのかもしれないですね。

言葉の意味の違い

上記で記載した権限ですが、これはGCPとOCIで言葉が異なります。下記が対になっている言葉です。

  • GCP 役割
  • OCI ポリシー

つまり、GCPの場合グループに付与する権限は役割と呼びますが、OCIではグループに付与する権限をポリシーと呼びます。

ちょっと厄介なのが、GCPにもポリシーという言葉を別の概念で使っていることです。GCPの場合はメンバと役割のバインディングリストになります。(組み合わせのリスト:例としてGoogleアカウントA+RoleA、GoogleアカウントB+RoleBという組み合わせのリストのこと)

有効範囲の違い

GCPでのポリシー(アカウントと役割のバインド)は組織レベル、フォルダレベル、プロジェクト レベル、リソースレベルで設定が可能です。たとえば、階層構造でいうとリソースの上にプロジェクトプロジェクトの上にフォルダという階層になっているのですが上のレイヤで設定したポリシーは下の階層で引き継がれます。そのため、フォルダAに対して、ユーザAがComputeEngineを操作するための権限を付けた場合、フォルダAに所属するプロジェクトすべてでユーザAはComputeEngineを操作することができるようになります。

OCIでは、テナンシとコンパートメントに対しての権限付与となります。コンパートメントというのは、OCIのテナンシの中に作成されたリソースを論理的に分割する単位です。ここも階層構造となっていて、コンパートメントの上にテナンシがあります。そのため、テナンシにつけた権限は、その下にある全てのコンパートメントでも同様の権限が付与されます。

まとめ

とりあえず、かんたんにGCPとOCIのIAMの仕様の違いについて説明しました。まだ詳細というほどではないですが、もしGCPの人がOCIを勉強するとき、もしくはその逆のパターンのときは、この違いを意識してもらえると覚えやすいかなと思います。