ネットワーク関連ジョブ機能の IAM の役割

このトピックでは、ネットワーク シナリオ用の IAM 権限を設定する方法を示します。シナリオに応じて企業内のネットワーク関連の機能役割にどのような IAM の役割を付与するかについて、ガイダンスを提供します。このコンテンツは主に、組織のネットワーク タスクを管理するネットワーク管理者と従業員を対象としています。以下で説明するシナリオはすべて、Cloud 組織が設定されていることを前提としています。

このドキュメントでは、ネットワークの役割と権限については詳細に説明しません。コンピューティング API とネットワーク API に関連する役割と権限の詳細な説明については、Compute Engine IAM の役割をご覧ください。

単一のチームが組織のセキュリティとネットワークを管理する

このシナリオでは、大規模な組織に、組織全体のセキュリティとネットワークの制御を一元的に管理するチームがあります。デベロッパーには、セキュリティとネットワークの担当チームによって定義されたネットワークやセキュリティの設定を変更する権限はありませんが、共有サブネットで仮想マシンなどのリソースを作成する権限は付与されています。

このような管理を容易にするために、組織は共有 VPC(Virtual Private Cloud)を使用します。共有 VPC を使用すると、関連プロジェクト(サービス プロジェクト)で使用できる RFC 1918 IP 空間の VPC ネットワークを作成できます。関連するプロジェクトを使用しているデベロッパーは、共有 VPC ネットワーク空間に VM インスタンスを作成できます。組織のネットワークとセキュリティの管理者は、サブネットや VPN だけでなく、VPC ネットワークのすべてのプロジェクトで使用可能なファイアウォール ルールを作成できます。

次の表は、セキュリティと管理の担当チーム、開発チームに付与する必要がある IAM の役割と、役割が付与されるリソースレベルについて説明しています。

リソース: 組織
役割: 共有 VPC 管理者
ネットワーク管理者
セキュリティ管理者
メンバー: セキュリティとネットワーク管理チーム
リソース: ホスト プロジェクト この役割は、共有 VPC が共有しているサブネットを使用するための権限を付与します。
役割: ネットワーク ユーザー
メンバー: デベロッパー
リソース: サービス プロジェクト この役割は、外部 IP アドレスを使用するための権限を付与します。このアクションを禁止する方法については、以下の注をご覧ください。
役割: compute.instanceAdmin
メンバー: デベロッパー

このシナリオでは、IAM ポリシーは異なる階層レベルで異なるプロジェクトにアタッチされるため、3 つの個別の IAM ポリシーが必要になります。

組織レベルでアタッチする必要がある最初の IAM ポリシーは、共有 VPC ホスト プロジェクトを管理する権限をネットワークとセキュリティ担当チームに付与するためのものです。これには、サービス プロジェクトをホスト プロジェクトに関連付ける権限が含まれます。また、ネットワークとセキュリティ担当チームに、組織内のすべてのプロジェクトについて、すべてのネットワーク リソースとセキュリティ リソースを管理する権限を与えます。

{
  "bindings": [
    {
      "role": "roles/compute.xpnAdmin",
      "members": [
        "group:sec-net@example.com"
      ]
    },
    {
      "role":"roles/compute.networkAdmin",
      "members": [
        "group:sec-net@example.com"
      ]
    },
    {
      "role": "roles/compute.securityAdmin",
      "members": [
        "group:sec-net@example.com"
      ]
    }
  ]
}

2 番目の IAM ポリシーは、ホスト プロジェクトに関連付ける必要があります。このポリシーにより、組織内のデベロッパーは共有 VPC ホスト プロジェクトで共有ネットワークを使用できます。

{
  "bindings": [
    {
      "role": "roles/compute.networkUser",
      "members": [
        "group:developers@example.com"
      ]
    }
  ]
}

3 番目の IAM ポリシーは、各サービス プロジェクトに関連付ける必要があります。このポリシーにより、プロジェクトを使用しているデベロッパーは、サービス プロジェクト内のインスタンスを管理したり、ホスト プロジェクト内の共有サブネットを使用したりできます。

すべてのサービス プロジェクトをフォルダに配置し、この特定のポリシーをその階層レベルで設定することができます。これにより、そのフォルダに作成されたすべてのプロジェクトは、サービス プロジェクトが作成されたフォルダに設定されている権限を継承できます。

また、デベロッパーにサービス プロジェクトのネットワーク ユーザーの役割を付与する必要もあります。

{
  "bindings": [
    {
      "role": "roles/compute.networkUser",
      "members": [
        "group:developers@example.com"
        ]
    },
    {
      "role": "roles/compute.instanceAdmin",
      "members": [
        "group:developers@example.com"
        ]
    }
  ]
}

グループを使用してメンバーを管理することがベスト プラクティスです。上記の例では、セキュリティとネットワークの制御を管理するユーザーのユーザー ID を sec-net グループに追加し、デベロッパーを developers グループに追加します。機能を実行できるユーザーを変更する必要がある場合は、グループ メンバーシップを調整するだけでよく、ポリシーを更新する必要はありません。

独立したネットワーク チームとセキュリティ チーム

このシナリオでは、大規模な組織に一元管理を行う 2 つのチームがあります。一方はセキュリティ制御を管理し、もう一方は組織全体の他のすべてのネットワーク リソースを管理します。デベロッパーには、セキュリティとネットワークの担当チームによって定義されたネットワークやセキュリティの設定を変更する権限はありませんが、共有サブネットで仮想マシンなどのリソースを作成する権限は付与されています。

最初のシナリオと同様に、共有 VPC が使用され、ネットワーク、セキュリティ、デベロッパーの 3 つのグループに対して適切な権限が設定されます。

次の表は、セキュリティと管理の担当チーム、開発チームに付与する必要がある IAM の役割と、役割が付与されるリソースレベルについて説明しています。

リソース: 組織
役割: 共有 VPC 管理者
ネットワーク管理者
メンバー: ネットワーク管理チーム
リソース: 組織
役割: セキュリティ管理者
組織管理者
メンバー: セキュリティ チーム
リソース: ホスト プロジェクト この役割は、共有 VPC が共有しているサブネットを使用するための権限を付与します。
役割: ネットワーク ユーザー
メンバー: デベロッパー
リソース: サービス プロジェクト この役割は、外部 IP アドレスを使用するための権限を付与します。このアクションを禁止する方法については、以下の注をご覧ください。
役割: compute.instanceAdmin
メンバー: デベロッパー

このシナリオでは、IAM ポリシーは異なる階層レベルで異なるプロジェクトにアタッチされるため、3 つの個別の IAM ポリシーが必要になります。

組織レベルでアタッチする必要がある最初の IAM ポリシーは、共有 VPC ホスト プロジェクトとすべてのネットワーク リソースを管理する権限をネットワーク チームに付与するためのものです。これには、サービス プロジェクトをホスト プロジェクトに関連付ける権限が含まれます。ネットワーク管理者の役割では、ファイアウォール ルールの表示も許可されますが、変更はできません。また、セキュリティ チームに、IAM ポリシーの設定と、組織内のすべてのプロジェクトのファイアウォール ルールと SSL 証明書の管理を行う権限を与えます。

{
  "bindings": [
  {
    "role": "roles/compute.xpnAdmin",
    "members": [
      "group:networks@example.com"
      ]
  },
  {
    "role": "roles/compute.networkAdmin",
    "members": [
      "group:networks@example.com"
      ]
  },
  {
    "role": "roles/compute.securityAdmin",
    "members": [
      "group:security@example.com"
      ]
    },
    {
      "role": "roles/resourcemanager.organizationAdmin",
      "members": [
        "group:security@example.com"
        ]
    }
  ]
}

2 番目の IAM ポリシーは、ホスト プロジェクトに関連付ける必要があります。このポリシーにより、組織内のデベロッパーは共有 VPC ホスト プロジェクトで共有ネットワークを使用できます。

{
  "bindings": [
    {
      "role": "roles/compute.networkUser",
      "members": [
        "group:developers@example.com"
        ]
    }
  ]
}

3 番目の IAM ポリシーは、各サービス プロジェクトに関連付ける必要があります。このポリシーにより、プロジェクトを使用しているデベロッパーは、サービス プロジェクト内のインスタンスを管理したり、ホスト プロジェクト内の共有サブネットを使用したりできます。

すべてのサービス プロジェクトをフォルダに配置し、この特定のポリシーをその階層レベルで設定することができます。これにより、そのフォルダに作成されたすべてのプロジェクトは、サービス プロジェクトが作成されたフォルダに設定されている権限を継承できます。

{
  "bindings": [
    {
      "role": "roles/compute.networkUser",
      "members": [
        "group:developers@example.com"
        ]
      },
      {
        "role": "roles/compute.instanceAdmin",
        "members": [
          "group:developers@example.com"
          ]
      }
    ]
}

各チームが独自のネットワークを管理できる

デジタル ネイティブは、開発チームに自律的に作業する権限を与えることを望んでいます。一元管理を行う IT 管理チームはなく、各チームにプロジェクトのすべての側面の管理を託します。

その一方で、ビジネスが成長してプロダクトが一般提供されたときにより正式な設定を採用できるように、いくつかの緩い制御を配置できることも同時に望んでいます。

このシナリオを満たすために、デベロッパーの各チームにはそれぞれ独自のフォルダが割り当てられ、フォルダの下に作成される個々のプロジェクトは適切な権限を継承します。各チームは、それぞれのプロジェクト内で関連付けられたネットワークを自律的に管理できます。これらの自律的なチーム内でも、最初から最低限の権限が適用されるようにプロセスと IAM ポリシーを実装することで、チームがより緊密な連携を開始する際に摩擦が発生しないようにします。

最初はプロジェクト内のネットワーク リソースと実際のリソースを管理するのが同じチームメンバーであっても、論理的な職務に応じて別々のグループを作成するのがベスト プラクティスです。

このアプローチは、一時的なスタッフが必要とするリソースへのアクセス権の制限や、ネットワーク リソースを変更する前にトレーニングが必要な新しいスタッフのアクセス権を制限するのにも役立つ場合があります。また、人事異動が発生するたびに IAM ポリシーを変更する必要はなく、誰がどのリソースにアクセスできるかを変更することができます。

リソース: フォルダ サービス アカウントを使用してプロジェクトを作成し、所有することができます。
役割: プロジェクト作成者
フォルダ管理者
メンバー: 開発チームリーダー
サービス アカウント
リソース: フォルダ
役割: ネットワーク管理者

セキュリティ管理者

メンバー: ネットワークとセキュリティ担当チーム
リソース: フォルダ これらの役割により、デベロッパーは BigQuery と Compute Engine のすべての側面を管理できます。
役割: インスタンス管理者
BigQuery 管理者
メンバー: デベロッパー

これには、各チームに割り当てられたフォルダに IAM ポリシーがバインドされている必要があります。

{
  "bindings": [
    {
      "role": "roles/resourcemanager.foldersAdmin",
      "members": [
        "group:devteamleads01@example.com",
        "serviceAccount:dev01-project-creator@shared-resources-proj.iam.gserviceaccount.com"
        ]
    },
    {
      "role":"roles/resourcemanager.projectCreator",
      "members": [
        "group:devteamleads01@example.com",
        "serviceAccount:dev01-project-creator@shared-resources-proj.iam.gserviceaccount.com"
      ]
    },
    {
      "role": "roles/compute.securityAdmin",
      "members": [
        "group:net-sec-dev01@example.com"
        ]
    },
    {
      "role": "roles/compute.networkAdmin",
      "members": [
        "group:net-sec-dev01@example.com"
        ]
    },
    {
      "role": "roles/compute.instanceAdmin",
      "members": [
        "group:dev01@example.com"
        ]
    },
    {
      "role": "roles/bigquery.admin",
      "members": [
        "group:dev01@example.com"
        ]
    }
  ]
}
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Identity and Access Management のドキュメント