要塞の保護
このトピックでは、要塞のセキュリティ情報および推奨事項について説明します。
Oracle Cloud Infrastructure Bastionを使用すると、パブリック・エンドポイントがないターゲット・リソースへの制限と時間制限付きアクセスが可能になります。Bastionsでは、認可されたユーザーが、Secure Shell (SSH)セッションを使用して特定のIPアドレスからターゲット・リソースに接続できます。接続したユーザーは、SSHでサポートされている任意のソフトウェアまたはプロトコルを使用してターゲット・リソースとやり取りできます。たとえば、リモート・デスクトップ・プロトコル(RDP)を使用してWindowsホストに接続したり、Oracle Net Servicesを使用してデータベースに接続したりできます。
セキュリティの責任
要塞をセキュアに使用するために、セキュリティおよびコンプライアンスの責任について学習します。
Oracleは、次のセキュリティ要件に対して責任を負います:
- 物理セキュリティ: Oracleは、Oracle Cloud Infrastructureで提供されるすべてのサービスを実行するグローバル・インフラストラクチャを保護する責任を負います。このインフラストラクチャは、Oracle Cloud Infrastructureサービスを実行するハードウェア、ソフトウェア、ネットワーキングおよび設備で構成されます。
お客様のセキュリティの責任についてこのページで説明します。次のような領域があります:
- アクセス制御: 可能なかぎり権限を制限します。ユーザーが作業を行うために必要なアクセス権のみを付与する必要があります。
- ネットワーク・セキュリティ:要塞にアクセスできるクラウド・ネットワーク内のノードを制限します。
- ホスト・セキュリティ:最大限のセキュリティを実現するために、クライアントおよびターゲット・インスタンスでSSHを構成します。
初期セキュリティ・タスク 🔗
このチェックリストを使用して、新しいOracle Cloud Infrastructureテナンシで要塞を保護するために実行するタスクを識別します。
タスク | 詳細情報 |
---|---|
IAMポリシーを使用したユーザーおよびリソースへのアクセス権の付与 | IAMポリシー |
要塞を作成する際、ネットワーク・アクセスを制限します | ネットワーク・セキュリティ |
定期的なセキュリティ・タスク 🔗
IAMポリシー 🔗
要塞へのアクセスは、ポリシーを使用して制限します。
ポリシーは、Oracle Cloud Infrastructureリソースに誰がどのようにアクセスできるかを指定します。詳細は、ポリシーの仕組みを参照してください。
グループに、その職責を実行するために必要な最小限の権限を割り当てます。各ポリシーには、グループに許可されるアクションを記述する動詞があります。使用可能な動詞は、アクセス・レベルが低い方から順にinspect
、read
、use
、manage
です。
要塞では、次のような要塞へのアクセスをさらに制限するためのポリシー変数がサポートされています:
target.bastion-session.username
- コンピュート・インスタンスに接続するセッションを作成するときに、特定のPOSIXオペレーティング・システムのユーザー名へのアクセスを制限します。target.resource.ocid
- セッションの作成時に特定のコンピュート・インスタンスへのアクセスを制限します。
opc
ユーザー(およびUbuntuプラットフォーム・イメージのubuntu
ユーザー)へのアクセスは、デフォルトではOracle Cloud Infrastructureプラットフォーム・イメージでsudoer
機能を持つため、制限することをお薦めします。IAMユーザーおよびグループの最小セットにDELETE
権限を付与することをお薦めします。この演習では、認可されたユーザーまたは悪意のあるアクターによる不注意な削除によるデータの損失を最小限に抑えます。DELETE
権限はテナンシ管理者にのみ付与します。
グループSecurityAdmins
のユーザーに、テナンシ全体のあらゆる要塞リソースの作成、更新および削除を許可します:
Allow group SecurityAdmins to manage bastion-family in tenancy
Allow group SecurityAdmins to manage virtual-network-family in tenancy
Allow group SecurityAdmins to read instance-family in tenancy
Allow group SecurityAdmins to read instance-agent-plugins in tenancy
Allow group SecurityAdmins to inspect work-requests in tenancy
グループBastionUsers
のユーザーに、テナンシ全体のセッションの作成、接続および終了を許可します:
Allow group BastionUsers to use bastion in tenancy
Allow group BastionUsers to manage bastion-session in tenancy
Allow group BastionUsers to manage virtual-network-family in tenancy
Allow group BastionUsers to read instance-family in tenancy
Allow group BastionUsers to read instance-agent-plugins in tenancy
Allow group BastionUsers to inspect work-requests in tenancy
グループSalesAdmins
のユーザーに、コンパートメントSalesApps
にある特定のターゲット・ホストのセッションの作成、接続および終了を許可します:
Allow group SalesAdmins to use bastion in compartment SalesApps
Allow group SalesAdmins to manage bastion-session in compartment SalesApps where ALL {target.resource.ocid='<instance_OCID>'}
Allow group SalesAdmins to manage virtual-network-family in compartment SalesApps
Allow group SalesAdmins to read instance-family in compartment SalesApps
Allow group SalesAdmins to read instance-agent-plugins in compartment SalesApps
Allow group SalesAdmins to inspect work-requests in tenancy
グループSalesAdmins
のユーザーに、コンパートメントSalesApps
およびユーザーopc
でのセッションの作成、接続および終了を許可します:
Allow group SalesAdmins to use bastion in compartment SalesApps
Allow group SalesAdmins to manage bastion-session in compartment SalesApps where ALL {target.bastion-session.username in ('opc')}
Allow group SalesAdmins to manage virtual-network-family in compartment SalesApps
Allow group SalesAdmins to read instance-family in compartment SalesApps
Allow group SalesAdmins to read instance-agent-plugins in compartment SalesApps
Allow group SalesAdmins to inspect work-requests in tenancy
すべてのユーザーがコンパートメントHRProd
のセッションを作成、接続および終了できるようにします。ただし、IAMユーザー名と完全に一致するユーザー名を指定する場合のみです:
Allow any-user to manage bastion-session in compartment HRProd where ALL {target.bastion-session.username=request.user.name}
要塞ポリシーの詳細およびその他の例については、要塞ポリシーを参照してください。
アクセス制御 🔗
IAMポリシーの作成に加えて、Bastionに接続するターゲットへのアクセスを保護するために、次の追加のベスト・プラクティスに従ってください。
多要素認証(MFA)使用可能 🔗
プラグイン可能認証モジュール(PAM)を使用すると、ターゲットLinuxインスタンスをIAMと統合し、第1および第2要素の認証でエンド・ユーザー認証を実行できます。
エンド・ユーザーは、SSHを使用してLinuxサーバーにログインし、IAMユーザー資格証明で認証できます。また、IAMのマルチファクタ認証機能も使用できます。MFAでは、エンド・ユーザーは、2番目の要素(電子メール、SMS、モバイル・オーセンティケータ・アプリケーションを使用して送信されるワンタイム・パスワード・コードやセキュリティ質問を使用した認証など)による認証を要求されます。
- PAMおよびMFAを構成する前に、インスタンスのSSH構成が要塞の最小要件を満たしていることを確認します。要塞のトラブルシューティングの「ターゲット・インスタンスでSSHサーバーが適切に構成されていません」の項を参照してください。
- インスタンスにPAMをインストールおよび構成してから、MFAを有効にします。MFAのLinuxへの認証の有効化を参照してください。
データ暗号化 🔗
SSHを使用してクライアントと要塞間の通信を暗号化するには、次のベスト・プラクティスに従います。
FIPS認定モジュールの使用 🔗
すべてのクライアント・オペレーティング・システムでは、OpenSSH 7.6クライアントをFederal Information Processing Standard (FIPS)保護とともに使用することをお薦めします。
詳細は、OpenSSL FIPSのドキュメントおよび暗号化モジュール検証プログラムを参照してください。
デフォルトでは、RSAキー・ペアはOpenSSHクライアント・バージョン8以上ではサポートされていません。RSAキー・ペアを有効にするには、SSH構成に次のスタンザを追加する必要があります。
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
詳細は、OpenSSHリリース・ノートを参照してください。
セッションのSSHキー・ペアを再利用しない 🔗
新しい要塞セッションごとに新しい一時SSHキー・ペアを再生成します。
以前に生成されたキー・ペアを再利用しないでください。ポート転送と管理対象SSHセッション・タイプの両方に対して新しいキー・ペアを作成します。
ネットワーク・セキュリティ 🔗
Bastionを使用して接続するリソースへのネットワーク・アクセスを保護します。
要塞の作成時、CIDRブロック許可リストを使用して、この要塞でホストされるセッションへの接続を許可する1つ以上のアドレス範囲をCIDR表記で指定します。
アドレス範囲が制限されるほど、セキュリティが向上します。0.0.0.0/0
などのオープンCIDR範囲は指定しないでください。
強化 🔗
セキュリティを最大化するために、ターゲット・コンピュート・インスタンスでSSHサーバーを構成します。
これらの設定のデフォルト値は、/etc/ssh/sshd_config
で更新することをお薦めします。
設定 | 説明 |
---|---|
MaxAuthTries |
接続ごとに許可される認証の試行最大数を指定します。障害の数がこの値の半分に達すると、失敗が記録されます。 |
ClientAliveCountMax |
クライアントからメッセージを受信せずに送信できる、クライアント存続中のメッセージの数を設定します。クライアント・アライブ・メッセージの送信中にこのしきい値に達すると、サーバーはクライアントを切断し、セッションを終了します。 |
ClientAliveInterval |
クライアントからデータを受信しなかった場合、サーバーは暗号化されたチャネルを介してメッセージを送信し、クライアントからのレスポンスをリクエストするまでのタイムアウト間隔を秒単位で設定します。 |
監査中 🔗
要塞のアクセス・ログおよびその他のセキュリティ・データを特定します。
Auditサービスは、Oracle Cloud Infrastructureリソースに対するすべてのAPIコールを自動的に記録します。Auditサービスを使用してテナンシ内のすべてのユーザー・アクティビティを監視することで、セキュリティおよびコンプライアンスの目標を達成できます。コンソール、SDKおよびコマンドライン(CLI)のコールはすべてAPIを経由するため、これらのソースからのすべてのアクティビティが含まれます。監査レコードは、認証済でフィルタ可能な問合せAPIから利用できます。また、オブジェクト・ストレージからバッチ・ファイルとして取得できます。監査ログの内容には、発生したアクティビティ、アクティビティを開始したユーザー、リクエストの日時、リクエストのソースIP、ユーザー・エージェントおよびHTTPヘッダーが含まれます。監査ログ・イベントの表示を参照してください。
次に、新しい要塞セッションを作成するためのログ・エントリからの抜粋を示します。
{
"datetime": 1651547126164,
"logContent": {
"data": {
"additionalDetails": {
"X-Real-Port": 58181,
"bastionId": "ocid1.bastion.oc1.<unique_id>",
"bastionName": "mybastion",
"displayName": "mysession",
"lifecycleState": "CREATING",
"sessionId": "ocid1.bastionsession.oc1.<unique_id>",
"sessionType": "MANAGED_SSH",
"targetResourceDisplayName": "mylinuxinstance",
"targetResourceId": "ocid1.instance.oc1.<unique_id>",
"targetResourceOperatingSystemUserName": "opc",
"targetResourcePort": "22",
"targetResourcePrivateIpAddress": "<target_ip_address>"
},
"availabilityDomain": "AD2",
"compartmentId": "ocid1.compartment.oc1..<unique_id>",
"compartmentName": "mycompartment",
"definedTags": null,
"eventGroupingId": "ocid1.bastionworkrequest.oc1.<unique_id>",
"eventName": "CreateSession",
"freeformTags": null,
"identity": {
"authType": "natv",
"callerId": null,
"callerName": null,
"consoleSessionId": "<unique_id>",
"credentials": "<unique_id>",
"ipAddress": "<source_ip>",
"principalId": "ocid1.user.oc1..<unique_id>",
"principalName": "<user_id>",
"tenantId": "ocid1.tenancy.oc1..<unique_id>",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
},
"message": "Session-20220502-2304 CreateSession succeeded",
...
}
}
テナンシでクラウド・ガードを有効にした場合、潜在的なセキュリティ上の問題があるユーザー・アクティビティがレポートされます。問題を検出すると、クラウド・ガードは修正アクションを提案します。特定のアクションを自動的に実行するようにクラウド・ガードを構成することもできます。クラウド・ガードのスタート・ガイドおよびレポートされた問題の処理を参照してください。