ノート:

Oracle Cloudテナンシの初期管理者モデルを設定します

イントロダクション

クラウド・セキュリティには、共有責任モデルが必要です。クラウド・プロバイダとしてのOracleは、セキュアなインフラストラクチャおよびプラットフォーム・サービスを提供する責任を負います。また、テナンシの所有者は、テナンシ内に作成するリソースへのアクセスの管理および制御を担当します。Oracle Cloud Infrastructure (OCI)テナンシを初めて作成する場合、テナンシの管理者グループのメンバーである単一のユーザー・アカウントがあり、テナンシ全体およびテナンシ内のすべてのリソースへの完全なアクセス権が付与されます。

他の管理者の追加、権限の割当て、リソースの作成およびデータの移入を開始する際は、プロセスの初期段階でセキュリティ・モデルについて考えることが重要であるため、問題を消去する方法を把握する必要はありません。

このチュートリアルで説明するセキュリティ・モデルは一般的な設計であり、組織の特定のセキュリティ・ポリシーおよびテナンシ管理アプローチに適合するように適応する必要があります。Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)ポリシー・モデルは、非常に柔軟で、様々な設計に対応するように簡単に適応または変更できます。

目的

前提条件

タスク1: 初期テナンシ設定の構成

テナンシ・アクセス用のベースライン・モデルの作成を簡略化し、OCI内のテナンシ・レベルのリソースを操作するための高レベルのロールを作成するには、OCI CLIを使用して初期資格をスクリプト化し、クラウド・シェルから実行できます。

次のコア・アクセス機能セットのグループおよびポリシー・ステートメントを作成するテンプレート・スクリプトと、すべてのOCI管理者にベースライン・アクセスのレベルを提供するテンプレート・スクリプトを次に示します。

これらのポリシーの目的は、ほとんどの顧客に適用される資格の初期セットを作成することです。これらの特定のアクセス機能および潜在的な追加ポリシーの詳細は、以降のセクションで説明します。

これらのグループは、OCI IAMアイデンティティ・ドメイン内にすでに存在するロール(環境の認証メカニズムを構成するセキュリティ管理者、ユーザーのオンボーディングおよび割当てを管理するためのユーザー管理者など)とともに使用する必要があります。外部アイデンティティ管理ソリューションでユーザーが管理されるデプロイメントでは、ユーザー管理者は必要ありません。

OCI IAMポリシー構文に精通していない場合は、OCI IAMドキュメントを確認して、ポリシー・ステートメントの構造を理解してください。

ベースライン・アクセス・スクリプト

ノート:このスクリプトは、IAMドメインを含むOCI環境にのみ適用されます。一部の古いテナンシでは、環境にIAMドメインがない可能性があります。環境にIAMドメインがあるかどうかを確認するには、ここの手順に従います。

#!/bin/bash

#Update the below with details for the environment
tenancy_ocid=ocid1.tenancy.oc1..aaaaaaaa....

#Group names
tenancy_manager_group=TenancyManagers
pol_admin_group=PolicyAdmins
sec_admin_group=SecurityAdmin
sec_analyst_group=SecurityAnalysts

#All_Users_Policy
oci iam policy create -c $tenancy_ocid --name "All_Users_Policy" \
--description "General purpose permissions intended for all users of the tenancy." \
--statements "[\"allow any-user to inspect tag-defaults in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to inspect limits in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to inspect tenancies in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to inspect compartments in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to read policies in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to read objectstorage-namespaces in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to read announcements in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\", \
              \"allow any-user to use cloud-shell in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }\"]"

#Tenancy Managers
oci iam group create --name $tenancy_manager_group \
--description "Group for Tenancy Managers for OCI, who can manage tenancy-level constructs, such as budgets and regions."

oci iam policy create -c $tenancy_ocid --name "Tenancy_Managers_Policy" \
  --description "Policy statements which define the 'Tenancy Manager' role, which allows for managing tenancy-level configuration and objects." \
  --statements "[\"define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq\", \
                \"allow group ${tenancy_manager_group} to read usage-report in tenancy\", \
                \"allow group ${tenancy_manager_group} to read resource-availability in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage quotas in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage tenancies in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage objectstorage-namespaces in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage buckets in tenancy where request.operation = 'UpdateNamespaceMetadata'\", \
                \"allow group ${tenancy_manager_group} to manage usage-budgets in tenancy\", \
                \"allow group ${tenancy_manager_group} to manage organizations-family in tenancy\", \
                \"allow group ${tenancy_manager_group} to {AUDIT_CONFIGURATION} in tenancy\", \
                \"endorse group ${tenancy_manager_group} to read objects in tenancy usage-report\"]"

#Policy Admins
oci iam group create --name $pol_admin_group \
--description "Group for Policy Administrators for OCI, who create and maintain IAM Policies and supporting resources."

oci iam policy create -c $tenancy_ocid --name "Policy_Admins_Policy" \
--description "Policy statements which define the 'Policy Admin' role, who create and maintain IAM Policies and supporting resources." \
--statements "[\"allow group ${pol_admin_group} to inspect groups in tenancy\", \
              \"allow group ${pol_admin_group} to read users in tenancy\", \
              \"allow group ${pol_admin_group} to manage groups in tenancy where target.group.name != 'Administrators'\", \
              \"allow group ${pol_admin_group} to manage compartments in tenancy\", \
              \"allow group ${pol_admin_group} to manage dynamic-groups in tenancy\", \
              \"allow group ${pol_admin_group} to manage domains in tenancy where request.permission != 'DOMAIN_RESOURCES_ADMINISTER'\", \
              \"allow group ${pol_admin_group} to manage network-sources in tenancy\", \
              \"allow group ${pol_admin_group} to manage policies in tenancy\", \
              \"allow group ${pol_admin_group} to manage tag-namespaces in tenancy\", \
              \"allow group ${pol_admin_group} to manage iamworkrequests in tenancy\"]"

#Security Admin
oci iam group create --name $sec_admin_group \
--description "Group for Security Admins for OCI, who can manage Cloud Guard and Data Safe"

oci iam policy create -c $tenancy_ocid --name "Security_Admins_Policy" \
  --description "Policy statements which define the 'Security Admin' role, which allows for managing Cloud Guard and Data Safe." \
  --statements "[\"allow group ${sec_admin_group} to inspect groups in tenancy\", \
                \"allow group ${sec_admin_group} to read repos in tenancy\", \
                \"allow group ${sec_admin_group} to manage cloud-guard-family in tenancy\", \
                \"allow group ${sec_admin_group} to manage data-safe in tenancy\"]"

#Security Analyst
oci iam group create --name $sec_analyst_group \
--description "Group for Security Analysts for OCI, which provides read access to resources in the tenancy, and the ability to use Cloud Guard"

oci iam policy create -c $tenancy_ocid --name "Security_Analysts_Policy" \
  --description "Policy statements which define the 'Security Analyst' role, which allows for read access to the tenancy, and the ability to work with Cloud Guard." \
  --statements "[\"allow group ${sec_analyst_group} to read all-resources in tenancy\", \
                \"allow group ${sec_analyst_group} to read audit-events in tenancy\", \
                \"allow group ${sec_analyst_group} to read cloud-guard-family in tenancy\", \
                \"allow group ${sec_analyst_group} to use cloud-guard-config in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-detectors in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-problems in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-detector-recipes in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-managed-lists in tenancy\", \
                \"allow group ${sec_analyst_group} to manage cloud-guard-user-preferences in tenancy\"]"

タスク2: スクリプトの更新

  1. スクリプトをテキスト・エディタにコピーして、環境で実行する前に必要な調整を行います。

  2. tenancy_ocid変数をテナンシの正しい値に更新します。テナンシOCIDは、「テナンシ詳細」ページ(https://cloud.oracle.com/tenancy)またはOCIコンソール・ダッシュボードのテナンシ名をクリックすることで取得できます。

    OCIDアイテムが強調表示されたテナンシ概要画面のイメージ

  3. 必要に応じてグループ名を更新します。グループ名は、特に外部のアイデンティティ管理システムから移入する場合は、ネーミング・スキームに合せる必要があります。

  4. 組織の要件に合せてポリシー・ステートメントをレビューおよび更新します。これらのポリシー・ステートメントの変更に関する考慮事項および追加のポリシー・ステートメントについては、以降の項で説明します。

権限モデルの理解

このスクリプトによって実装される資格設計では、テナンシ管理の職責をより狭いロールに分割し、環境に存在する可能性のある様々なタイプの管理者をより適切に反映します。また、テナンシ・レベルで運用しているユーザーが、専用のOCIコンパートメント以外のインフラストラクチャ・リソースを作成できないようにすることも意図されています。

予算およびリソース割当てをコンパートメント・レベルで構成できるため、リソースをコンパートメントに作成することでテナンシ・ガバナンスが向上します。また、コンパートメントをそれらのポリシーで直接参照できるため、それらのリソースを管理するためのポリシー・モデルも簡略化されます。

このスクリプトは慎重に行うことを目的としており、各グループに最小限のアクセス権セットのみを付与します。組織がOCIをどのように使用する予定かによっては、追加の権限が必要になる場合があります。次の各項では、スクリプトによって作成された資格について詳細に説明し、潜在的な変更の例を示します。

'all-users'ポリシーによるベースライン・アクセス

OCIでは、アクセスを提供するポリシーが構成されていないかぎり、ユーザーはアクセスできません。ユーザーの生産性を向上させ、テナンシに関する意味のある情報をユーザーに提供するために、スクリプトはすべてのユーザーに対して一連のベースライン・アクセスを作成します。これらのポリシーは、クラウド・シェルの使用、およびお知らせの読取りとサブスクライブ済リージョンの確認の機能を認可します。

推奨ポリシーは、サービス制限やポリシーなど、テナンシとの対話能力を制限できるオブジェクトを表示できるようにすることで、ユーザーが追加のアクセスまたはリソースが必要なときに情報付きリクエストを実行できるようにも設計されています。

通常、OCIリソース管理にはデフォルトのOCI IAMアイデンティティ・ドメインを使用し、他のアイデンティティ・ドメインを介して認証するユーザーにはOCIコンソールへのアクセスを許可しないことをお薦めします。そのため、指定されたスクリプトは、デフォルトドメイン経由で認証されるユーザーへのアクセスを制限します。セキュリティ設計では、OCIアクセスの管理に複数のアイデンティティ・ドメインの使用がサポートされる場合があります。たとえば、本番管理者用の本番ドメインと非本番管理者用の非本番ドメインがあるとします。この場合、ベースライン・アクセス・ポリシーの条件を次のように変更して、各ドメインを取得できます。

... where all{ request.domain.name in ('<prod_domain_name>, '<non-prod_domain_name>'), request.principal.type = 'user' }

テナンシの設計によっては、次のポリシーを追加する場合があります。

allow any-user to use tag-namespaces in tenancy where all{ request.domain.name = 'default', request.principal.type = 'user' }

このポリシーにより、すべてのユーザーが、変更可能なリソースの定義済タグを適用、更新または削除できます。これは、リソースの所有者が独自のトラッキング目的またはアクセス管理目的でタグを変更できる必要がある場合に望ましいことがあります。設計でコスト追跡やその他の目的でタグのデフォルト設定を使用することは望ましくない場合があります。

テナンシ・マネージャ

テナンシ・マネージャ資格は、コストと予算編成の管理、およびテナンシがサブスクライブするリージョンなど、テナンシのガバナンス責任を持つユーザーを対象としています。

テナンシ・マネージャ用のスクリプトで作成されたポリシーでは、使用状況レポートへのアクセスを提供するために若干の調整が必要になる場合があります。スクリプトはコスト分析にデフォルトのテナンシ識別子を使用しますが、一部のテナンシはそのステータスに応じて代替テナンシ識別子を使用できます。テナンシ・マネージャが使用状況レポートにアクセスできない場合は、OCIコンソールの使用状況レポート・セクションに表示される値を使用するようにポリシーを更新する必要があります。例:

必要なテナンシIDが表示された未承認の「使用状況レポート」ページのイメージ。

ポリシー管理者

おそらく、管理者グループの使用から脱却する最も重要な機能は、ポリシー管理権限の割当てです。これらの資格は、テナンシ内のアクセス資格の構成を担当する管理者が使用します。指定されたスクリプトで作成されたモデルでは、ポリシー管理者は権限の定義を担当しますが、それらのグループへのユーザーの割当ては行いません。ユーザー管理資格は、IAMドメイン内のユーザー管理者ロールの割当てを通じて付与されます。デプロイメントによっては、組織のセキュリティ設計に応じて、1人の管理者に両方の職責を割り当てることができます。

ノート:ポリシー管理権限の範囲は非常に狭いですが、それを使用して、独自のアクセス・レベルのエスカレーションなど、環境内の任意のレベルのアクセス権を付与するポリシーを作成できるため、高い権限を持つ資格とみなされます。

セキュリティ管理者

セキュリティ管理ロールは、クラウド・ガードやデータ・セーフなどの環境でのセキュリティ・サービスの構成を担当するユーザー用です。

また、次のステートメントを追加して、セキュリティ管理者がテナンシ・レベルのアラートを構成できるようにすることもできます:

allow group SecurityAdmins to manage cloudevents-rules in tenancy where target.compartment.id = '<tenancy_ocid>'
allow group SecurityAdmins to use metrics in tenancy

これにより、セキュリティ管理者は、サインインやクラウド・ガードの問題の作成など、テナンシ・レベルで発生するイベントに関するアラートを構成できます。これらのイベントには、通知を関連付けて意味のあるアクションが必要になりますが、アクションはルート(テナンシ)コンパートメントにある必要はありません。これらのイベントを処理するサービスは、かわりに、他のセキュリティ目的に使用されるサブコンパートメントに配置できます。たとえば、次のようなポリシーを追加して、セキュリティ目的で通知の構成を認可できます。

allow group SecurityAdmins to manage ons-family in compartment security_resources

セキュリティ・アナリスト

セキュリティ・アナリスト・ロールは、OCIテナンシ内のアクションおよびイベントの確認を担当するユーザー用です。クラウド・ガードの問題に関連する問題を調査および検証するには、セキュリティ・アナリストがテナンシ全体への読取りアクセス権を必要とします。

タスク3: クラウド・シェルを使用したスクリプトの実行

スクリプトに必要な変更を加えた後、OCIコンソール内のCloud Shellを使用して実行できます。

ノート:クラウド・シェルは必須ではありませんが、OCI CLIで事前構成され、ログイン・ユーザーの認証コンテキストを使用するため、スクリプトを実行するための簡単なメカニズムを提供します。

  1. OCIコンソール・ヘッダーの「開発者ツール」アイコンからCloud Shellを開きます。

    「Cloud Shell」メニュー項目が強調表示された「Developer Tools」ドロップダウンのイメージ

    Cloud Shellの初期化には時間がかかる場合があります。特に、これが初めてアクセスされた場合です。

  2. 更新したスクリプトをクラウド・シェル環境にコピーします。例: vi:

    $vi policy_scaffold.sh
    

    vi内で、iを押して[INSERT]モードに入り、スクリプトの内容をファイルに貼り付けてから、escを押してから:wqを押して保存して終了します。

  3. スクリプトを実行可能にし、実行して初期資格を作成します。

    $chmod +x policy_scaffold.sh
    $./policy_scaffold.sh
    
  4. 出力をモニターして、各GroupオブジェクトおよびPolicyオブジェクトが正しく作成されていることを確認します。問題は、手動で解決するか、スクリプト内から個々のOCI CLIコマンドを微調整してから再実行することで解決できます。

タスク4: ユーザーの割当てと管理者グループの保護

スクリプトが実行されると、ユーザーは作成されたグループに割り当てられ、関連する資格を付与できます。

いくつかの管理ロールを割り当てた後、OCI管理者グループの使用を緊急アクセス・シナリオに制限することをお薦めします。OCIでは、アイデンティティの停止または構成ミスが発生した場合にテナンシへのアクセスを回復できるように、少なくとも1つのユーザー・アカウントを管理者グループに割り当てる必要があります。そうしないと、ユーザーがアクセス権を割り当てられず、すべての管理者が環境からロックアウトされる状況が発生する可能性があります。

詳細および詳細な推奨事項は、Oracle Cloud Infrastructureでの緊急アクセス・アカウントの管理を参照してください。

次のステップ

テナンシ管理ロールの初期セットを作成した後、個々のプロジェクトのロールの作成を容易にするためのベースとして使用したり、これらのコア管理者の機能を拡張できます。

ここで使用されるモデルには、2つの主要な目標があります。まず、OCI環境の管理者を管理者グループから削除し、特定の責任により厳密に調整されたロールにすることができます。第2に、テナンシ・レベルのアクセス権を持つユーザーがルート・コンパートメントにインフラストラクチャ・リソースを作成できないようにします。追加のポリシーを作成する場合、この設計原則を維持し、ルート下でコンパートメントをターゲットにするポリシーのみを作成することをお薦めします。また、セキュリティ上の利点に加えて、コスト追跡とプロジェクト・ガバナンスを簡素化することもできます。

詳細は、Oracle Cloud Infrastructureセキュリティ・ガイドを参照してください。

謝辞

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。