AWS IAMとGoogle Cloud IAMの比較

最近、社内プロジェクトで GCP IAM の権限に関する問題に直面し、さまざまな資料を調べたところ、英語のドキュメントのほうが内容も充実していてとても参考になりました(たとえば IAM 権限の紹介 は非常に重要な内容であるにもかかわらず、日本語版が存在しないのは残念です)。

そこで、GCP と AWS の IAM について私なりに考えたポイントをまとめてみましたので、ご参考になれば幸いです。

まずは、Organization の下にある Google Cloud のアーキテクチャ構造を簡単に紹介します。

Organization(グループ)
├── Folder A(子会社をFolderで管理する)
│   ├── Project A1(各子会社のプロジェクト)
│   │   ├── Resource A1-1
│   │   └── Resource A1-2
│   └── Project A2
│       └── Resource A2-1
└── Folder B
    ├── Project B1
    │   ├── Resource B1-1
    │   └── Resource B1-2
    └── Project B2
        └── Resource B2-1

では、結論からいきましょう。

設計思想の違い

簡単にまとめると、Google Cloud の IAM は「Role」を中心とした設計になっており、私はこれを「ロール指向型」と呼んでいます。一方、AWS の IAM は Role も存在しますが、より「Policy(ポリシー)」を中心に据えた設計になっているため、私はこれを「ポリシー指向型」と呼んでいます(詳細は下の表をご覧ください)。

user, role, principal, policy といった用語は AWS と Google Cloud の両方で登場しますが、同じ英単語でも指している内容が完全に一致するものもあれば、大きく異なるものもあり、混乱を招きやすい部分です。

名称 Amazon Web Service (AWS) Google Cloud
user IAM UserはAWS IAM サービスのコンポーネントの一つであり、タグを設定してタグによる管理が可能 通常はメールアドレスによってユーザーを表す。タグが設定できず、ユーザーをラベルベースで管理するのは難しい。機能面では概ね類似。
roles IAM Roleは権限 (permission) の集合であり、assume の主体にこの Role の権限を一時的に付与する仕組み。assume role を使ったことがある方はご存知でしょう。 個人的には、Google Cloud における IAM のコア概念だと考えている。権限(permission)の集合だが、一時的ではなく恒久的に権限を付与する形。AWS より複雑な事前定義ロールがあり、3 種類に分類される(後述の表を参照)。
principal 主体(principal)を指す言葉で、IAM User、Group、IAM Role、Service などを含む AWS と同様に、User、Group、Service アカウントなどを主体として含む
policy 個人的には AWS IAM のコア概念だと考えている。principal(主体)、action(操作)、effect(allow/deny)を組み合わせてリソース単位の詳細なアクセス制御を実装できる。 principal と role を紐づける。リソースに直接ポリシーを付与する仕組みはない。role を通して権限を付与するため、細かな粒度の制御はやや難しいが、そのぶん管理コストは低く抑えやすい。

また、Google Cloud の role は次の 3 種類に分類されており、それぞれ適用範囲が異なります。

role の種類 特徴 適用範囲
Basic Role Owner, Editor, Viewer Google Cloud 事前定義 組織、フォルダ、プロジェクト
Pre-Defined Role FolderAdmin, FolderEditor Google Cloud 事前定義 具体的なロールによって異なる
Custom Role MyExampleRole(任意の名前) ユーザー定義 プロジェクト単位のみ

高度な使い方の違いとして、AWS ではリソースのポリシーに条件式 (condition) を直接書き込んで制限をかけられますが、Google Cloud では IAM Conditions を活用する必要があります。ただし、Cloud Storage や BigQuery、Pub/Sub など、一部のリソースでのみ利用可能です。

もしご意見やアドバイスなどございましたら、ぜひ X(旧 Twitter)の DM にてお気軽にご連絡ください。