リソース・マネージャの保護

このトピックでは、リソース・マネージャのセキュリティ情報および推奨事項について説明します。

リソース・マネージャでは、構成ファイルをコミットすることで、Oracle Cloud Infrastructureリソースのプロビジョニングを自動化できます。そうすることで、プロビジョニングされたリソースが組織のセキュリティ・ガイドラインに従っていることを確認します。このような構成ファイルは、infrastructure-as-codeモデルに準拠する宣言型言語を使用して、ステップごとのプロビジョニング手順を取得します。プロビジョニング手順はジョブとして実行されます。

セキュリティ権限

リソース・マネージャを安全に使用するには、セキュリティおよびコンプライアンスの責任について学びます。

通常、Oracleは、クラウド・オペレータ・アクセス制御やインフラストラクチャ・セキュリティ・パッチ適用などのクラウド・インフラストラクチャおよび操作のセキュリティを提供します。クラウド・リソースを安全に構成する責任はユーザーにあります。クラウドのセキュリティは、ユーザーとOracleの共同責任です。

Oracleは、次のセキュリティ要件を担当します。

  • 物理セキュリティ: Oracleは、Oracle Cloud Infrastructure内のすべてのサービスを実行するグローバル・インフラストラクチャの保護に責任を持ちます。このインフラストラクチャは、Oracle Cloud Infrastructureサービスを実行するハードウェア、ソフトウェア、ネットワーキングおよび設備で構成されます。

このページでは、セキュリティ権限について説明します。このページには、次の領域があります。

  • アクセス制御:権限をできるだけ制限します。ユーザーが作業を行うために必要なアクセス権のみを付与する必要があります。
  • 機密性:構成ファイルおよび出力ファイルで機密データの使用を制限します

初期セキュリティ・タスク

このチェックリストを使用して、リソース・マネージャを新しいOracle Cloud Infrastructureテナンシで保護するために実行するタスクを識別します。

タスク 詳細情報
IAMポリシーを使用したユーザーおよびリソースへのアクセス権の付与 IAMポリシー

定期的なセキュリティ・タスク

リソース・マネージャの使用開始後、このチェックリストを使用して、定期的に実行することをお薦めします。

タスク 詳細情報
構成ファイルと出力ファイルで機密情報の使用を制限します 機密保護
セキュリティ監査の実行 監査

IAMポリシー

ポリシーを使用して、 リソース・マネージャへのアクセスを制限します。

重要

Oracle Cloud Infrastructureリソースを管理するためのポリシーは、リソースにアクセスするリソース・マネージャ操作にも必要です。たとえば、コンピュート・インスタンスおよびサブネットを含むスタック上での適用ジョブの実行には、リソースをプロビジョニングするコンパートメント内で、これらのリソース・タイプに対する権限を付与するポリシーを必要とします。Oracle Cloud Infrastructureリソースを管理するためのポリシーの例は、共通ポリシーを参照してください。

ポリシーは、Oracle Cloud Infrastructureリソースにアクセスできるユーザーとその方法を指定します。詳細は、ポリシーの仕組みを参照してください。

グループに、その責任を実行するために必要な最小限の権限を割り当てます。各ポリシーには、グループが許可されるアクションを説明する動詞があります。最もアクセスの少ない量から、使用可能な動詞はinspectreaduseおよびmanageです。

リソース・マネージャ・ポリシーの詳細は、リソース・マネージャの詳細を参照してください。

スタックとジョブの管理

このポリシーを作成すると、グループがテナンシ内のスタックおよびジョブを管理したり、テナンシ・スタック上のOracle Cloud Infrastructureリソースを管理したりできるようになります。

Allow group <group_name> to manage orm-stacks in tenancy
Allow group <group_name> to manage orm-jobs in tenancy

グループが破棄ジョブの実行を明示的に禁止するには、このポリシーを作成します。

ノート

このポリシー・ステートメントでは、read orm-jobsへの新しい権限を含める必要があります。これは、3番目のステートメントにジョブのリストまたは取得に関係ない変数を使用する条件が含まれているためです。
Allow group <group_name> to use orm-stacks in tenancy
Allow group <group_name> to read orm-jobs in tenancy
Allow group <group_name> to manage orm-jobs in tenancy where any {target.job.operation = 'PLAN', target.job.operation = 'APPLY'}

スタック権限の詳細は、orm-stacksを参照してください。ジョブ権限の詳細は、orm-jobsを参照してください。

構成ソース・プロバイダの管理

このポリシーを作成して、テナンシの構成ソース・プロバイダを作成、更新、移動および削除する権限をグループに付与します。

Allow group <group_name> to manage orm-config-source-providers in tenancy

このポリシーを作成して、スタックおよびジョブの管理に加えて、ソース・コード制御システム(既存の構成ソース・プロバイダを使用して)構成ファイルからスタックを作成する権限をグループに付与します。

Allow group <group_name> to read orm-config-source-providers in tenancy
Allow group <group_name> to manage orm-stacks in tenancy
Allow group <group_name> to manage orm-jobs in tenancy

構成ソース・プロバイダの権限の詳細は、orm-config-source-providersを参照してください。

プライベート・テンプレートの管理

このポリシーを作成して、テナンシ内のプライベート・テンプレートを作成、更新、移動および削除する権限をグループに付与します。

Allow group <group_name> to manage orm-template in tenancy

このポリシーを作成して、スタックおよびジョブの管理に加えて、プライベート・テンプレートからスタックを作成する権限をグループに付与します。

Allow group <group_name> to manage orm-stacks in tenancy
Allow group <group_name> to manage orm-jobs in tenancy
Allow group <group_name> to read orm-templates in tenancy

プライベート・テンプレートの権限の詳細は、orm-templateを参照してください。

プライベート・エンドポイントの管理

このポリシーを作成して、プライベート・エンドポイントの作成時にVCNおよびサブネットを選択する機能など、テナンシのプライベート・エンドポイントを作成、更新、移動および削除する権限をグループに付与します。

Allow group <group_name> to manage orm-private-endpoints in tenancy
Allow group <group_name> to use virtual-network-family in tenancy
  where any request.operation={'CreatePrivateEndpoint'}"

プライベート・エンドポイントの権限の詳細は、orm- private- endpointsを参照してください。

機密保護

リソース・マネージャで機密情報へのアクセスを管理および制御します。

Terraformの状態ファイル

Terraformの状態(.tfstate)には、リソースID、パスワード、SSHキーなどの機密データを含めることができます。ボールト・サービスを使用して、リソース・マネージャで使用するシークレット資格証明を管理およびローテーションします。

ボールトには、データの保護および保護されたリソースへの接続に使用する暗号化キーおよびシークレットが含まれます。シークレットはマスター暗号化キーを使用して暗号化され、パスワード、証明書、SSHキー、認証トークンなどの資格証明を格納します。シークレットを作成して使用する前に、ボールトとマスター暗号化キーが存在しない場合は作成する必要があります。

たとえば、コンピュート・インスタンスでリモート・コマンドおよびスクリプトを実行するには、SSHキーが必要です。リモート実行の使用を参照してください。

各シークレットには、シークレット・バージョンが自動的に割り当てられます。シークレットをローテーションするときに、ボールト・サービスに新しいシークレット・コンテンツを指定して、新しいシークレット・バージョンを生成します。シークレット・コンテンツを定期的にローテーションすることで、シークレットが公開された場合の影響を抑えることができます。

Terraform状態ファイルへのアクセスを制御するには、次のように読取りジョブのアクセスを制限するセキュリティ・ポリシーを作成します:

Allow group <group_name> to read orm-jobs in compartment

ORM_JOB_READ権限を持つユーザーは、Terraform状態ファイルにアクセスできます。

ノート

権限read orm-jobsは、ログやTerraform構成の取得など他の操作にも影響するため、制限ポリシーによって他の操作を実行する権限が制限されていないコンパートメントに状態ファイルを分離することをお薦めします。

Terraform構成

通常、リソース・マネージャのワークフローには、後でスタックの管理に使用されるTerraform構成の記述または生成が含まれます。Terraform構成にはリソース・マネージャのAPI GetJobTfConfigを使用してアクセスできるため、構成ファイルに機密情報を含めないことをお薦めします。

ORM_JOB_READ権限を持つユーザーは、Terraform構成にアクセスできます。

ネットワーク・セキュリティ

リソース・マネージャからアクセスするプライベートGitサーバーおよびクラウド・リソースを含む、リソース・マネージャ・サービスのリソースへのセキュアなネットワーク・アクセス。

プライベート・リソースおよび対応するネットワーク・トラフィックをパブリックに公開するかわりに、これらのリソースへのリモート・アクセスにプライベート・エンドポイントを使用します。

セキュリティ・リストネットワーク・セキュリティ・グループまたは両方の組合せを使用して、VCN (仮想クラウド・ネットワーク)内のリソースに対するパケット・レベルのトラフィックを制御します。アクセスおよびセキュリティを参照してください。

プライベート・エンドポイントで使用するネットワーク・セキュリティ・グループ(NSG)を設定する場合は、次のルールを含めます。

  • 非パブリック・リソースへのトラフィックを許可するエグレス・ルール。

    IPアドレス192.168.227.87のパブリックではないコンピュート・インスタンスの例:

    • 最小アクセス: 192.168.227.87/32
    • VCNおよびサブネットCIDRへの一般アクセス: 192.168.0.0/16
  • プライベート・エンドポイントからのトラフィックを許可するイングレス・ルール。

    IPアドレス192.168.227.87のパブリックではないコンピュート・インスタンスの例:

    • 最小アクセス: 192.168.198.204/32 (ソース・タイプ: CIDR)
    • サブネットCIDRからの一般アクセス: 192.168.0.0/16

VCNにサブネットを作成すると、デフォルトでサブネットはパブリックとみなされ、インターネット通信が許可されます。インターネット・アクセスを必要としないリソースをホストするには、プライベート・サブネットを使用します。プライベート・サブネットのリソースが他のクラウド・サービスにアクセスできるように、VCNでサービス・ゲートウェイを構成することもできます。接続の選択肢を参照してください。

監査

リソース・マネージャのアクセス・ログおよびその他のセキュリティ・データを見つけます。

監査サービスは、Oracle Cloud Infrastructureリソースに対するすべてのAPIコールを自動的に記録します。監査サービスを使用してテナンシ内のすべてのユーザー・アクティビティをモニターすることで、セキュリティおよびコンプライアンスの目標を達成できます。コンソール、SDKおよびコマンドライン(CLI)のコールはすべてAPIを経由するため、これらのソースからのすべてのアクティビティが含まれます。監査レコードは、認証されたフィルタ可能な問合せAPIを介して使用可能であるか、オブジェクト・ストレージからバッチ・ファイルとして取得できます。監査ログの内容には、発生したアクティビティ、アクティビティを開始したユーザー、リクエストの日時、リクエストのソースIP、ユーザー・エージェントおよびHTTPヘッダーが含まれます。監査ログ・イベントの表示を参照してください。

監査ログの例

CreateJobイベントの監査ログ

{
  "datetime": 1639092316856,
  "logContent": {
    "data": {
      "additionalDetails": {
        "X-Real-Port": 31720
      },
      "availabilityDomain": "AD1",
      "compartmentId": "ocid1.tenancy.oc1..<unique_id>",
      "compartmentName": "mytenancy",
      "definedTags": null,
      "eventGroupingId": "<unique_id>",
      "eventName": "CreateJob",
      "freeformTags": null,
      "identity": {
        "authType": "natv",
        "callerId": null,
        "callerName": null,
        "consoleSessionId": "<unique_id>",
        "credentials": "<key>",
        "ipAddress": "<ip_address>",
        "principalId": "ocid1.user.oc1..<unique_id>",
        "principalName": "<user_name>",
        "tenantId": "ocid1.tenancy.oc1..<unique_id>",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
      },
      "message": "apply-job-20211209152516 CreateJob succeeded",
      "request": {
        "action": "POST",
        "headers": {
          "Accept": [
            "*/*"
          ],
          "Accept-Encoding": [
            "gzip, deflate, br"
          ],
          "Accept-Language": [
            "en"
          ],
          "Authorization": [
            "Signature keyId=\"<key>",version=\"1\",algorithm=\"rsa-sha256\",headers=\"(request-target) host content-length accept-language content-type opc-request-id x-content-sha256 x-date\",signature=\"*****\""
          ],
          "Connection": [
            "keep-alive"
          ],
          "Content-Length": [
            "207"
          ],
          "Content-Type": [
            "application/json"
          ],
          "Origin": [
            "https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com"
          ],
          "Referer": [
            "https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com/"
          ],
          "Sec-Fetch-Dest": [
            "empty"
          ],
          "Sec-Fetch-Mode": [
            "cors"
          ],
          "Sec-Fetch-Site": [
            "same-site"
          ],
          "User-Agent": [
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0"
          ],
          "opc-request-id": [
            "<unique_id>"
          ],
          "x-content-sha256": [
            "<key>"
          ],
          "x-date": [
            "Thu, 09 Dec 2021 23:25:16 GMT"
          ]
        },
        "id": "<unique_id>,
        "parameters": {},
        "path": "/20180917/jobs"
      },
      "resourceId": "ocid1.ormjob.oc1.phx.<unique_id>",
      "response": {
        "headers": {
          "Access-Control-Allow-Credentials": [
            "true"
          ],
          "Access-Control-Allow-Origin": [
            "https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com"
          ],
          "Access-Control-Expose-Headers": [
            "opc-previous-page,opc-next-page,opc-client-info,ETag,opc-total-items,opc-request-id,Location"
          ],
          "Cache-Control": [
            "no-cache, no-store, must-revalidate"
          ],
          "Content-Length": [
            "1135"
          ],
          "Content-Type": [
            "application/json"
          ],
          "Date": [
            "Thu, 09 Dec 2021 23:25:16 GMT"
          ],
          "ETag": [
            "<unique_id>"
          ],
          "Pragma": [
            "no-cache"
          ],
          "Strict-Transport-Security": [
            "max-age=31536000; includeSubDomains;"
          ],
          "Timing-Allow-Origin": [
            "https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com"
          ],
          "Vary": [
            "Origin"
          ],
          "X-Content-Type-Options": [
            "nosniff"
          ],
          "X-XSS-Protection": [
            "1; mode=block"
          ],
          "opc-request-id": [
            "<unique_id>"
          ]
        },
        "message": null,
        "payload": {
          "id": "ocid1.ormjob.oc1.phx.<unique_id>",
          "resourceName": "apply-job-<unique_id>"
        },
        "responseTime": "2021-12-09T23:25:16.856Z",
        "status": "200"
      },
      "stateChange": {
        "current": {
          "applyJobPlanResolution": {
            "isAutoApproved": true
          },
          "cancellationDetails": {
            "isForced": false
          },
          "compartmentId": "ocid1.tenancy.oc1..<unique_id>",
          "configSource": {
            "configSourceRecordType": "ZIP_UPLOAD"
          },
          "definedTags": {},
          "displayName": "apply-job-<unique_id>",
          "freeformTags": {},
          "id": "ocid1.ormjob.oc1.phx.<unique_id>",
          "jobOperationDetails": {
            "executionPlanStrategy": "AUTO_APPROVED",
            "operation": "APPLY"
          },
          "lifecycleState": "ACCEPTED",
          "operation": "APPLY",
          "stackId": "ocid1.ormstack.oc1.phx.<unique_id>",
          "timeCreated": "2021-12-09T23:25:16.707Z",
          "variables": {
            "compartment_ocid": "ocid1.tenancy.oc1..<unique_id>",
            "region": "us-phoenix-1",
            "tenancy_ocid": "ocid1.tenancy.oc1..<unique_id>",
            "wp_admin_password": "<password>",
            "wp_admin_user": "<user_name>"
          }
        },
        "previous": {}
      }
    },
    "dataschema": "2.0",
    "id": "<unique_id>",
    "oracle": {
      "compartmentid": "ocid1.tenancy.oc1..<unique_id>",
      "ingestedtime": "2021-12-09T23:25:19.071Z",
      "loggroupid": "_Audit",
      "tenantid": "ocid1.tenancy.oc1..<unique_id>"
    },
    "source": "apply-job-<unique_id>",
    "specversion": "1.0",
    "time": "2021-12-09T23:25:16.856Z",
    "type": "com.oraclecloud.OracleResourceManager.CreateJob.begin"
  }
}