リソース・マネージャの保護
このトピックでは、リソース・マネージャのセキュリティ情報および推奨事項について説明します。
リソース・マネージャでは、指示を構成ファイルに設定することで、Oracle Cloud Infrastructureリソースのプロビジョニングを自動化できます。そうすることで、プロビジョニングされたリソースが組織のセキュリティ・ガイドラインに従っていることを確認します。このような構成ファイルは、infrastructure-as-codeモデルに準拠する宣言型言語を使用して、ステップごとのプロビジョニング手順を取得します。プロビジョニング手順はジョブとして実行されます。
セキュリティの責任
Resource Managerを安全に使用するには、セキュリティとコンプライアンスの職責について学習します。
Oracleは、次のセキュリティ要件に対して責任を負います:
- 物理セキュリティ: Oracleは、Oracle Cloud Infrastructureで提供されるすべてのサービスを実行するグローバル・インフラストラクチャを保護する責任を負います。このインフラストラクチャは、Oracle Cloud Infrastructureサービスを実行するハードウェア、ソフトウェア、ネットワーキングおよび設備で構成されます。
お客様のセキュリティの責任についてこのページで説明します。次のような領域があります:
- アクセス制御: 可能なかぎり権限を制限します。ユーザーが作業を行うために必要なアクセス権のみを付与する必要があります。
- 機密性:構成および出力ファイルでの機密データの使用を制限します
初期セキュリティ・タスク 🔗
このチェックリストを使用して、新しいOracle Cloud InfrastructureテナンシでResource Managerを保護するために実行するタスクを識別します。
タスク | 詳細情報 |
---|---|
IAMポリシーを使用したユーザーおよびリソースへのアクセス権の付与 | IAMポリシー |
定期的なセキュリティ・タスク 🔗
IAMポリシー 🔗
リソース・マネージャへのアクセスを制限するには、ポリシーを使用します。
Oracle Cloud Infrastructureリソースを管理するためのポリシーは、リソースにアクセスするリソース・マネージャ操作にも必要です。たとえば、コンピュート・インスタンスおよびサブネットを含むスタック上で適用ジョブを実行するには、リソースをプロビジョニングするコンパートメント内で、これらのリソース・タイプに対する権限を付与するポリシーを必要とします。Oracle Cloud Infrastructureリソースを管理するためのポリシーの例は、共通ポリシーを参照してください。
ポリシーは、Oracle Cloud Infrastructureリソースに誰がどのようにアクセスできるかを指定します。詳細は、ポリシーの仕組みを参照してください。
グループに、その職責を実行するために必要な最小限の権限を割り当てます。各ポリシーには、グループに許可されるアクションを記述する動詞があります。使用可能な動詞は、アクセス・レベルが低い方から順にinspect
、read
、use
、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-templates」を参照してください。
プライベート・エンドポイントの管理 🔗
このポリシーを作成して、テナンシ内のプライベート・エンドポイントを作成、更新、移動および削除する権限をグループに付与します。これには、プライベート・エンドポイントの作成時にVCNsおよびサブネットを選択する機能も含まれます。
Allow group <group_name> to manage orm-private-endpoints in tenancy
where any request.operation={'CreatePrivateEndpoint'}"
Allow group <group_name> to use virtual-network-family in tenancy
プライベート・エンドポイント権限の詳細は、orm-private-endpointsを参照してください。
機密保護 🔗
リソース・マネージャで機密情報へのアクセスを管理および制御します。
Terraformの状態ファイル 🔗
Terraform状態(.tfstate
)には、リソースID、パスワード、SSHキーなどの機密データを含めることができます。Vaultサービスを使用して、リソース・マネージャで使用するシークレット資格証明を管理およびローテーションします。
ボールトには、データの保護および保護されたリソースへの接続に使用する暗号化キーおよびシークレットが含まれます。シークレットはマスター暗号化キーを使用して暗号化され、パスワード、証明書、SSHキー、認証トークンなどの資格証明を格納します。シークレットを作成して使用する前に、ボールトおよびマスター暗号化キーが存在しない場合は作成する必要があります。
たとえば、コンピュート・インスタンスでリモート・コマンドおよびスクリプトを実行するには、SSHキーが必要です。「リモート実行の使用」を参照してください。
各シークレットには、シークレット・バージョンが自動的に割り当てられます。シークレットをローテーションすると、新しいシークレット・コンテンツをVaultサービスに提供することで、新しいシークレット・バージョンが生成されます。シークレット・コンテンツを定期的にローテーションすることで、シークレットが公開された場合の影響を抑えることができます。
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内のサービス・ゲートウェイを構成して、プライベート・サブネット上のリソースが他のクラウド・サービスにアクセスできるようにすることもできます。Connectivity Choicesを参照してください。
監査中 🔗
Resource Managerのアクセス・ログおよびその他のセキュリティ・データを特定します。
Auditサービスは、Oracle Cloud Infrastructureリソースに対するすべてのAPIコールを自動的に記録します。Auditサービスを使用してテナンシ内のすべてのユーザー・アクティビティを監視することで、セキュリティおよびコンプライアンスの目標を達成できます。コンソール、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": "<example-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"
}
}