コンピュートの保護
このトピックでは、コンピュートのセキュリティ情報および推奨事項について説明します。
コンピュート・サービスでは、インスタンスと呼ばれるコンピュート・ホストをプロビジョニングおよび管理できます。コンピュートおよびアプリケーションの要件に合せ、必要に応じてインスタンスを作成できます。インスタンスを作成したら、コンピュータからインスタンスに安全にアクセスし、再起動、ボリュームのアタッチやデタッチを行い、完了時にはインスタンスを終了できます。インスタンスのローカル・ドライブに対して行った変更内容は、インスタンスを終了すると失われます。インスタンスにアタッチされたボリュームに保存された変更内容は保持されます。
セキュリティの責任
コンピュートをセキュアに使用するために、セキュリティおよびコンプライアンスの責任について学習します。
Oracleは、次のセキュリティ要件を担当します。
- 物理セキュリティ: Oracleは、Oracle Cloud Infrastructureで提供されるすべてのサービスを実行するグローバル・インフラストラクチャを保護する責任を負います。このインフラストラクチャは、Oracle Cloud Infrastructureサービスを実行するハードウェア、ソフトウェア、ネットワーキングおよび設備で構成されます。
このページでは、セキュリティ権限について説明します。このページには、次の領域があります。
- アクセス制御: 可能なかぎり権限を制限します。ユーザーが作業を行うために必要なアクセス権のみを付与する必要があります。
- 暗号化および機密保護:暗号化キーおよびシークレットを使用してデータを保護し、保護されたリソースに接続します。これらのキーを定期的にローテーションします。
- パッチ適用: 脆弱性を防ぐために、最新のセキュリティ・パッチでソフトウェアを最新の状態に保ちます。
初期セキュリティ・タスク
このチェックリストを使用して、新しいOracle Cloud Infrastructureテナンシでコンピュートを保護するために実行するタスクを識別します。
タスク | 詳細情報 |
---|---|
IAMポリシーを使用したユーザーおよびリソースへのアクセス権の付与 | IAMポリシー |
カスタム・キーを使用したリソースの暗号化 | データの暗号化 |
リソースへのネットワーク・アクセスの保護 | ネットワーク・セキュリティ |
クラウド・ガードの有効化および構成(オプション) | クラウド・ガード |
セキュリティ・ゾーンの作成(オプション) | セキュリティ・ゾーン |
定期的なセキュリティ・タスク
IAMポリシー
コンピュートへのアクセスは、ポリシーを使用して制限します。
ポリシーは、Oracle Cloud Infrastructureリソースに誰がどのようにアクセスできるかを指定します。詳細は、ポリシーの仕組みを参照してください。
グループに、その責任を実行するために必要な最小限の権限を割り当てます。各ポリシーには、グループが許可されるアクションを説明する動詞があります。最もアクセスの少ない量から、使用可能な動詞はinspect
、read
、use
およびmanage
です。
IAMユーザーおよびグループの最小セットにDELETE
権限を付与することをお薦めします。この演習では、認可されたユーザーまたは悪意のあるアクターによる不注意な削除によるデータの損失を最小限に抑えます。DELETE
権限はテナンシ管理者にのみ付与します。
次のすべての例で、ポリシーの対象範囲はテナンシです。ただし、コンパートメント名を指定することによって、テナンシ内の特定のコンパートメントを対象範囲に絞り込むことができます。
次の例は、InstanceUsers
グループにインスタンスの起動を許可しますが、削除は許可しません。
Allow group InstanceUsers to manage instance-family in tenancy
where request.permission!='INSTANCE_DELETE'
Allow group InstanceUsers to use volume-family in tenancy
Allow group InstanceUsers to use virtual-network-family in tenancy
セキュリティ・コンプライアンスの理由から、一部の顧客はテナンシのユーザーにインスタンス・コンソールを公開しません。次のポリシーの例は、コンソールでの作成または読取り権限を制限します。
Allow group InstanceUsers to manage instance-console-connection in tenancy
where all {request.permission!= INSTANCE_CONSOLE_CONNECTION_READ,
request.permission!= INSTANCE_CONSOLE_CONNECTION_CREATE}
コンピュート・ポリシーの詳細およびその他の例については、コア・サービスの詳細を参照してください。
アクセス制御
IAMポリシーの作成に加えて、コンピュート・インスタンスへのアクセスをロックダウンします。
他のサービスへのインスタンス・アクセス
Oracle Cloud Infrastructureインスタンス・プリンシパル機能を使用して、IAMユーザーのかわりにインスタンスが他のサービスにアクセスすることを認可できます。
たとえば、インスタンスはBlock Volume、Networking、Load BalancerまたはObject Storageにアクセスできます。
この機能を使用するには、動的グループを作成し、そのグループにサービスAPIへのアクセス権を付与します。動的グループを使用すると、(ユーザー・グループと同様に) Oracle Cloud Infrastructureコンピュート・インスタンスを「プリンシパル」のアクターとしてグループ化できます。ポリシーを作成して、インスタンスがOracle Cloud Infrastructureサービスに対してAPIコールを実行できるようにします。
動的グループを作成する場合、メンバーをグループに明示的に追加するのではなく、グループ・メンバーを定義する一致ルールのセットを定義します。APIコールに署名する有効期限が短い秘密キーは、インスタンス・メタデータ・サービス(http://169.254.169.254/opc/<version>/identity/cert.pem
)を介して提供され、1日に数回ローテーションされます。インスタンスのサービスにアクセスする方法の詳細は、インスタンスからのサービスの呼出しを参照してください。
インスタンス・メタデータへのアクセス
インスタンスのメタデータ・アクセスを、インスタンス上の特権ユーザーに制限することをお薦めします。
インスタンス・メタデータ(http://169.254.169.254
)では、OCID、表示名、カスタム・フィールドなどの事前定義済インスタンス情報が提供されます。インスタンス・メタデータは、動的グループ資格証明などの存続時間の短い資格証明も提供できます。次の例は、iptables
を使用して、root
ユーザーへのインスタンス・メタデータ・アクセスを制限する方法を示しています。
iptables -A OUTPUT -m owner ! --uid-owner root -d 169.254.169.254 -j DROP
インスタンスは、リンクのローカル・アドレスを使用して、インスタンス・メタデータ・サービス(169.254.169.254:80
)、DNS (169.254.169.254:53
)、NTP (169.254.169.254:123
)、カーネル更新(169.254.0.3
)、ブート・ボリュームへのiSCSI接続(169.254.0.2:3260
、169.254.2.0/24:3260
)にアクセスします。iptables
などのホスト・ベースのファイアウォールを使用して、これらのIPへのアクセスをroot
ユーザーに許可できます。これらのオペレーティング・システムのファイアウォール・ルールが変更されていないことを確認します。
インスタンス・メタデータ・サービスは、バージョン1とバージョン2の2つのバージョンで使用できます。IMDSv2は、v1と比較してセキュリティが強化されています。IMDSv1を無効にし、IMDSv2へのリクエストのみを許可することをお薦めします。インスタンス・メタデータ・サービスv2へのアップグレードを参照してください。
クラウド・ガード
クラウド・ガードを有効にし、これを使用してコンピュート・リソースのセキュリティの問題を検出して対応します。
問題を検出すると、クラウド・ガードは修正アクションを提案します。特定のアクションを自動的に実行するようにクラウド・ガードを構成することもできます。クラウド・ガードには、Computeの次のディテクタ・ルールが含まれています。
- インスタンスにパブリックIPアドレスがあります
- インスタンスがOracleイメージを実行しています
- インスタンスでOracleイメージが実行されていません
- インスタンスにパブリックにアクセス可能です
- インスタンス終了
- イメージのエクスポート
- イメージのインポート
- イメージの更新
クラウド・ガードで使用可能なすべてのディテクタ・ルールのリストは、ディテクタ・レシピ・リファレンスを参照してください。
まだ行っていない場合は、クラウド・ガードを有効にし、リソースを含むコンパートメントを監視するように構成します。クラウド・ガード・ターゲットを構成して、テナンシ全体(ルート・コンパートメントおよびすべてのサブコンパートメント)を調査するか、特定のコンパートメントのみをチェックできます。クラウド・ガードの開始を参照してください。
クラウド・ガードを有効にすると、検出されたセキュリティの問題を表示して解決できます。「報告された問題の処理」を参照してください。
セキュリティ・ゾーン
セキュリティ・ゾーンを使用すると、Compute内のリソースがセキュリティのベスト・プラクティスに準拠していることが保証されます。
セキュリティ・ゾーンは、1つ以上のコンパートメントおよびセキュリティ・ゾーン・レシピに関連付けられます。セキュリティ・ゾーンのコンパートメントでリソースを作成および更新すると、Oracle Cloud Infrastructureでは、これらの操作がレシピのセキュリティ・ゾーン・ポリシーのリストに対して検証されます。レシピ内のポリシーに違反している場合、操作は拒否されます。Computeのリソースには、次のセキュリティ・ゾーン・ポリシーを使用できます。
deny instance_in_security_zone_launch_from_boot_volume_not_in_security_zone
deny instance_in_security_zone_in_subnet_not_in_security_zone
deny instance_without_sanctioned_image
deny boot_volume_not_in_security_zone_attach_to_instance_in_security_zone
deny boot_volume_without_vault_key
すべてのセキュリティ・ゾーン・ポリシーのリストは、セキュリティ・ゾーン・ポリシーを参照してください。
既存のリソースをセキュリティ・ゾーン内のコンパートメントに移動するには、リソースがゾーンのレシピ内のすべてのセキュリティ・ゾーン・ポリシーに準拠している必要があります。同様に、セキュリティ・ゾーンの外部のコンパートメントは安全性が低い可能性があるため、セキュリティ・ゾーン内のリソースは移動できません。セキュリティ・ゾーンの管理を参照してください。
データ暗号化
Vaultサービスで暗号化キーを作成してローテーションし、Compute内のリソースを保護します。
ボールトは、データの保護に使用する暗号化キーを格納する論理エンティティです。保護モードに応じて、キーはサーバーに格納されるか、可用性が高く耐久性のあるハードウェア・セキュリティ・モジュール(HSM)に格納されます。当社のHSMは、連邦情報処理標準(FIPS) 140-2セキュリティ・レベル3のセキュリティ認証を満たしています。ボールトの管理およびキーの管理を参照してください。
デフォルトの暗号化キーは、特定のOracle Cloud Infrastructureリソースの作成時に自動的に生成できますが、Vaultサービスで独自のカスタム暗号化キーを作成および管理することをお薦めします。
インスタンスのブート・ボリュームは、デフォルトで暗号化されます。インスタンスを作成する際、カスタム暗号化キーを使用して、ブート・ボリュームに保存されているデータを暗号化できます。インスタンスの転送中暗号化を有効にすると、転送中暗号化にもカスタム・キーが使用されます。インスタンスの作成を参照してください。
各マスター暗号化キーには、キー・バージョンが自動的に割り当てられます。キーをローテーションすると、ボールト・サービスにより新しいキー・バージョンが生成されます。定期的にキーをローテーションすると、1つのキー・バージョンによって暗号化または署名されるデータの量が制限されます。キーが構成されたことがある場合、キーのローテーションによりデータのリスクが軽減されます。キーの管理を参照してください。
IAMポリシーを使用して、暗号化キーの作成、ローテーションおよび削除を厳密に制限することをお薦めします。Vaultサービスの詳細を参照してください。
ネットワーク・セキュリティ
Secure Shell (SSH)を含む、Computeサービスのリソースへのネットワーク・アクセスを保護します。
すべてのインスタンスでSSHを強化します。次の表にSSHセキュリティの推奨事項をいくつか示します。SSH構成オプションは、sshd_config
ファイルに設定できます。Linuxでは、このファイルは/etc/ssh/sshd_config
にあります。
セキュリティの推奨事項 | sshd_configの構成 | コメント |
---|---|---|
公開キー・ログインのみを使用 | PubkeyAuthentication yes |
~/.SSH/authorized_keys ファイルのSSH公開キーを定期的に確認します。 |
パスワード・ログインの無効化 | PasswordAuthentication no |
ブルートフォース・パスワード攻撃を軽減します。 |
ルート・ログインの無効化 | PermitRootLogin no |
リモート・ログインのルート権限を防ぎます |
SSHポートを標準以外のポートに変更 | Port <port_number> |
オプション。SSHでポート22を使用するアプリケーションがこの変更で破損しないようにしてください。 |
セキュアなSSH秘密キーを使用して、インスタンスにアクセスし、不注意による公開を防止します。SSHキー・ペアの作成とキーを使用したインスタンスの構成の詳細は、Linuxインスタンスでのキー・ペアの管理を参照してください。
セキュリティ・リスト、ネットワーク・セキュリティ・グループまたは両方の組合せを使用して、VCN (仮想クラウド・ネットワーク)内のリソースに対するパケット・レベルのトラフィックを制御します。アクセスとセキュリティを参照してください。
Fail2ban
は、総当たり攻撃のサインイン試行(インスタンスへのサインインの失敗が大量に発生)に関連するIPアドレスをブロックするアプリケーションです。デフォルトでは、Fail2ban
はSSHアクセスを検査するため、他のプロトコルを検査するように構成できます。Fail2ban
の詳細は、Fail2banのメイン・ページを参照してください。
VCNネットワーク・セキュリティ・グループおよびセキュリティ・リストに加えて、iptables
やfirewalld
などのホストベースのファイアウォールを使用して、ポート、プロトコル、パケットのタイプを制御することで、インスタンスへのネットワーク・アクセスを制限します。これらのファイアウォールを使用して、ポートのスキャンや侵入の試行など、潜在的なネットワーク・セキュリティ攻撃の偵察を防ぎます。カスタム・ファイアウォール・ルールは、起動するインスタンスごとに構成、保存および初期化できます。次の例は、iptables
のコマンドを示しています。
# save iptables rules after configuration
sudo iptables-save > /etc/iptables/iptables.rules
# restore iptables rules on next reboot
sudo /sbin/iptables-restore < /etc/iptables.rules
# restart iptables after restore
sudo service iptables restart
VCNにサブネットを作成すると、デフォルトではサブネットはパブリックとみなされ、インターネット通信が許可されます。インターネット・アクセスを必要としないリソースをホストするには、プライベート・サブネットを使用します。プライベート・サブネット上のリソースが他のクラウド・サービスにアクセスできるように、VCNでサービス・ゲートウェイを構成することもできます。接続の選択肢を参照してください。
要塞サービスは、パブリック・エンドポイントがないターゲット・リソースへの制限および時間制限付きのアクセスを提供します。要塞を使用すると、認可されたユーザーがSecure Shell (SSH)セッションを介してプライベート・エンドポイントのターゲット・リソースに接続できます。接続したユーザーは、SSHでサポートされている任意のソフトウェアまたはプロトコルを使用してターゲット・リソースとやり取りできます。「要塞の管理」を参照してください。
Web Application Firewall (WAF)を使用して、クロスサイト・スクリプト(XSS)やSQLインジェクション、OWASP定義のその他の脆弱性を含むインターネットの脅威に対する保護ルールを作成および管理します。必要なボットが入ることは許可されますが、不要なボットは軽減できます。WAFは、Webアプリケーションへのトラフィックを経時的に監視し、構成するための新しいルールを推奨します。エッジ・ポリシーの開始を参照してください。
パッチ適用中
コンピュート・リソースが最新のセキュリティ更新を実行していることを確認します。
インスタンス・ソフトウェアは、セキュリティ・パッチを使用して最新に維持します。インスタンスには、使用可能な最新のソフトウェア更新を定期的に適用することをお薦めします。Oracle Autonomous Linuxイメージは、最新パッチで自動的に更新されます。Oracle Linuxイメージでは、sudo yum update
コマンドを実行できます(Oracle Linux 8ではsudo dnf update
)。Oracle Linuxで、yum-security
プラグインを使用して、入手できるセキュリティ・パッチとインストールされたセキュリティ・パッチの情報を取得します。次の例では、yum-security
のコマンドを示します。
# Install yum-security plugin
yum install yum-plugin-security
# Get list of security patches without installing them
yum updateinfo list security all
# Get list of installed security patches
yum updateinfo list security all
Oracle Cloud Infrastructure上のLinuxインスタンスでは、Oracle Kspliceを使用して、再起動せずに重要なカーネル・パッチを適用できます。Kspliceは、Oracle Linux、CentOSおよびUbuntuの特定のカーネル・バージョンを維持できます。詳細は、Oracle Kspliceを参照してください。
- 意図せずに開いたままになっているポートは、クラウド・リソースへの攻撃ベクトルの可能性があるか、ハッカーが他の脆弱性を悪用できる可能性があります。
- 脆弱性に対処するために更新およびパッチが必要なOSパッケージ
- ハッカーが悪用する可能性のあるOS構成
強化
本番デプロイメントのコンピュート・リソースを構成します。
インスタンス上で実行中のLinuxおよびWindowsイメージのセキュリティ強化のためのベースラインを確立します。Oracle Linuxイメージのセキュリティ強化の詳細は、Oracle Linuxサーバーの強化のヒントを参照してください。Center for Internet Securityベンチマークでは、LinuxおよびWindowsサーバーの様々なディストリビューションについて、オペレーティング・システム・セキュリティ強化ベンチマークの包括的なセットが提供されます。
インスタンス・エントロピ
Linuxインスタンスでは、/dev/random
は非ブロックであり、乱数を必要とするセキュリティ・アプリケーションで使用する必要があります。
ベア・メタル・インスタンスもVMインスタンスも高品質で高スループットのエントロピ・ソースとなります。インスタンスにはランダム番号ジェネレータがあり、その出力がオペレーティング・システムで使用されるエンティティ・プールに提供され、乱数が生成されます。
次のコマンドを使用すると、アプリケーションで出力を使用する前に、/dev/random
によって生成された乱数のスループットと品質をチェックできます。
# check sources of entropy
sudo rngd -v
# enable rngd, if not already
sudo systemctl start rngd
# verify rngd status
sudo systemctl status rngd
# verify /dev/random throughput and quality using rngtest
cat /dev/random | rngtest -c 1000
監査中
コンピュート・インスタンスのアクセス・ログおよびその他のセキュリティ・データを特定します。
様々なセキュリティ関連イベントがログ・ファイルに取得されます。これらのログ・ファイルを定期的に確認して、セキュリティの問題を検出することをお薦めします。Oracle Linuxでは、ログ・ファイルは/var/log
フォルダにあります。次の表にセキュリティ関連のログ・ファイルの一部を示します。
ログ・ファイルまたはディレクトリ | 説明 |
---|---|
/var/log/secure
|
Auth ログには、失敗したサインインと成功したサインインが表示されます。 |
/var/log/audit
|
Auditd は、発行されたシステム・コール、sudo 試行、ユーザー・サインインなどを取得します。ausearch とaureport は、auditd ログの問合せに使用される2つのツールです。 |
/var/log/yum.log
|
yum を使用してインスタンス上でインストールまたは更新されたパッケージをリストします。 |
/var/log/cloud-init.log
|
インスタンスの起動中、cloud-init は権限のあるユーザーとしてユーザー提供スクリプトを実行できます。たとえば、cloud-init はSSHキーを導入できます。認識されないコマンドについては、cloud-init ログを確認することをお薦めします。 |
Audit Serviceでは、Oracle Cloud Infrastructureリソースに対するすべてのAPIコールが自動的に記録されます。Auditサービスを使用してテナンシ内のすべてのユーザー・アクティビティを監視することで、セキュリティおよびコンプライアンスの目標を達成できます。コンソール、SDKおよびコマンドライン(CLI)のコールはすべてAPIを経由するため、これらのソースからのすべてのアクティビティが含まれます。監査レコードは、認証済でフィルタ可能な問合せAPIから利用できます。また、オブジェクト・ストレージからバッチ・ファイルとして取得できます。監査ログの内容には、発生したアクティビティ、アクティビティを開始したユーザー、リクエストの日時、リクエストのソースIP、ユーザー・エージェントおよびHTTPヘッダーが含まれます。監査ログ・イベントの表示を参照してください。
LaunchInstance
イベントの監査ログ
{
"datetime": 1642192740551,
"logContent": {
"data": {
"additionalDetails": {
"X-Real-Port": 50258,
"imageId": "ocid1.image.oc1.<unique_id>",
"shape": "VM.Standard.E3.Flex",
"type": "CustomerVmi",
"volumeId": "null"
},
"availabilityDomain": "AD1",
"compartmentId": "ocid1.tenancy.oc1..<unique_id>",
"compartmentName": "mytenancy",
"definedTags": {},
"eventGroupingId": "<unique_id>",
"eventName": "LaunchInstance",
"freeformTags": {},
"identity": {
"authType": null,
"callerId": null,
"callerName": null,
"consoleSessionId": null,
"credentials": "<key>",
"ipAddress": "<ip_address>",
"principalId": "<user_id>",
"principalName": "<user_name>",
"tenantId": "ocid1.tenancy.oc1..<unique_id>",
"userAgent": "Oracle-JavaSDK/1.33.2 (Linux/4.14.35-2047.509.2.2.el7uek.x86_64; Java/1.8.0_301; Java HotSpot(TM) 64-Bit Server VM GraalVM EE 20.3.3/25.301-b09-jvmci-20.3-b18)"
},
"message": "myinstance LaunchInstance succeeded",
"request": {
"action": "POST",
"headers": {
"Accept": [
"application/json"
],
"Connection": [
"keep-alive"
],
"Date": [
"Fri, 14 Jan 2022 20:38:59 GMT"
]
},
"id": "<unique_id>",
"parameters": {},
"path": "/20160918/instances"
},
"resourceId": "ocid1.instance.oc1.phx.<unique_id>",
"response": {
"headers": {
"Connection": [
"keep-alive"
],
"Content-Type": [
"application/json"
],
"Date": [
"Fri, 14 Jan 2022 20:39:00 GMT"
],
"ETag": [
"<unique_id>"
],
"Transfer-Encoding": [
"chunked"
],
"X-Content-Type-Options": [
"nosniff"
],
"opc-request-id": [
"<unique_id>"
],
"opc-work-request-id": [
"ocid1.coreservicesworkrequest.oc1.phx.<unique_id>"
]
},
"message": null,
"payload": {},
"responseTime": "2022-01-14T20:39:00.551Z",
"status": "200"
},
"stateChange": {
"current": {
"agentConfig": {
"areAllPluginsDisabled": false,
"isManagementDisabled": false,
"isMonitoringDisabled": false
},
"availabilityConfig": {
"recoveryAction": "RESTORE_INSTANCE"
},
"availabilityDomain": "EMIr:PHX-AD-1",
"compartmentId": "ocid1.tenancy.oc1..<unique_id>",
"definedTags": {},
"displayName": "<unique_id>",
"extendedMetadata": {},
"faultDomain": "FAULT-DOMAIN-1",
"freeformTags": {},
"id": "ocid1.instance.oc1.phx.<unique_id>",
"imageId": "ocid1.image.oc1.phx.<unique_id>",
"instanceOptions": {
"areLegacyImdsEndpointsDisabled": false
},
"launchMode": "PARAVIRTUALIZED",
"launchOptions": {
"bootVolumeType": "PARAVIRTUALIZED",
"firmware": "UEFI_64",
"isConsistentVolumeNamingEnabled": true,
"isPvEncryptionInTransitEnabled": false,
"networkType": "PARAVIRTUALIZED",
"remoteDataVolumeType": "PARAVIRTUALIZED"
},
"lifecycleState": "PROVISIONING",
"region": "phx",
"shape": "VM.Standard.E3.Flex",
"shapeConfig": {
"gpus": 0,
"localDisks": 0,
"maxVnicAttachments": 2,
"memoryInGBs": 16,
"networkingBandwidthInGbps": 1,
"ocpus": 1,
"processorDescription": "2.25 GHz AMD EPYC™ 7742 (Rome)"
},
"sourceDetails": {
"imageId": "ocid1.image.oc1.phx.<unique_id>",
"sourceType": "image"
},
"systemTags": {},
"timeCreated": "2022-01-14T20:39:00.260Z"
},
"previous": {}
}
},
"dataschema": "2.0",
"id": "<unique_id> ",
"oracle": {
"compartmentid": "ocid1.tenancy.oc1..<unique_id>",
"ingestedtime": "2022-01-14T20:39:05.212Z",
"loggroupid": "_Audit",
"tenantid": "ocid1.tenancy.oc1..<unique_id>"
},
"source": "<unique_id>",
"specversion": "1.0",
"time": "2022-01-14T20:39:00.551Z",
"type": "com.oraclecloud.computeApi.LaunchInstance.begin"
}
}
テナンシでクラウド・ガードを有効にした場合、潜在的なセキュリティ上の問題があるユーザー・アクティビティがレポートされます。問題を検出すると、クラウド・ガードは修正アクションを提案します。特定のアクションを自動的に実行するようにクラウド・ガードを構成することもできます。クラウド・ガードの開始およびレポートされた問題の処理を参照してください。