Oracle Cloud Infrastructureドキュメント

ブロック・ボリュームの保護

セキュリティの推奨事項

  • ボリュームには2タイプあります: ブロック・ボリュームとブート・ボリューム。 ブロック・ボリュームにより、インスタンス・ストレージ容量を動的に拡張することができます。 ブート・ボリュームには、コンピュート・インスタンスを起動するためのイメージが含まれています。 IAMサービスは、関連するボリューム・リソース・タイプのファミリを、volume-familyという結合リソース・タイプにグループ化します。
  • volume-familyのリソース・タイプにIAMユーザーおよびグループの最小特権アクセスを割り当てます。 volume-familyのリソース・タイプは、volumes volume-attachments、および volume-backupsです。 volume-familyリソースは、インスタンス・ストレージ容量の動的拡張を可能にする取り外し可能なブロック・ボリューム・デバイスであるか、またはインスタンスをブートするためのイメージを含みます。 volume-attachmentsリソースは、ボリュームとインスタンス間のアタッチメントです。 volume-backupsリソースは、ブロック・ボリュームの作成やブロック・ボリュームのリカバリに使用できるボリュームのポイント・イン・タイム・コピーです。

データ耐久性

権限のあるユーザーによる誤った削除や悪意のある削除によるデータの損失を最小限に抑えるために、VOLUME_DELETEVOLUME_ATTACHMENT_DELETEおよびVOLUME_BACKUP_DELETEのパーミッションを可能な限り最小限のIAMユーザーおよびグループに与えることをお薦めします。 DELETE パーミッションは、テナンシとコンパートメント管理者にのみ与えてください。

削除または破損によるデータの損失を最小限に抑えるため、ボリュームの定期的なバックアップを作成することをお薦めします。 Oracle Cloud Infrastructureは自動スケジュール・バックアップを可能にします。 スケジュールされたバックアップの詳細については、「ポリシーベースのバックアップ」を参照してください。

データ・アット・レスト暗号化

デフォルトでは、ボリュームとそのバックアップは、AES-256を使用して安定して暗号化されます。 dm-crypt、veracrypt、Bit-Lockerなどのツールを使用してデータ・ボリュームを暗号化することもできます。 dm-crypt暗号化の手順については、次のセクションで説明します。

セキュリティ・ポリシーの例

ボリュームの削除を防止

次のポリシー例では、グループVolumeUsersは、ボリュームとバックアップを削除する以外はすべての操作を実行できます。

Allow group VolumeUsers to manage volumes in tenancy
 where request.permission!='VOLUME_DELETE' 
Allow group VolumeUsers to manage volume-backups in tenancy
 where request.permission!='VOLUME_BACKUP_DELETE'

VolumeUsersがインスタンスからボリュームを切り離せない場合は、前の例に次のポリシーを追加できます。

Allow group VolumeUsers to manage volume-attachments in tenancy
 where request.permission!='VOLUME_ATTACHMENT_DELETE'

セキュリティ関連のタスク

dm-cryptによる非ルート・ボリュームの暗号化

dm-cryptは、暗号化されたボリュームを提供するためのカーネル・レベルの暗号化メカニズム(Linuxデバイス・マッパー・フレームワークの一部)です。 これは、ファイルシステム(例えば、ext4とNTFS)から渡されたデータを暗号化し、それをLinux Unified Key Setup (LUKS)形式でストレージ・デバイスに格納します。 暗号化されたボリュームは、完全なディスク、ディスク・パーティション、論理ボリューム、またはループバック・デバイスを使用して作成されたファイル・バックアップ・ストレージに格納できます。 Cryptsetupは、dm-cryptの管理に使用されるユーザー・レベルのユーティリティで、パーティションやファイルの暗号化に使用されます。dm-cryptは、暗号化ルーチンにLinux暗号APIを使用します。

  1. ブロック・ストレージ・ボリュームをインスタンスにアタッチする(たとえば、/dev/sdb)

  2. LUKS暗号化用に/dev/sdbをフォーマットします。 プロンプトが表示されたらLUKSパスフレーズを入力します。 パスフレーズは、ボリュームの暗号化に使用されるLUKSマスター・キーを暗号化するために使用されます。

    cryptsetup -y luksFormat /dev/sdb
  3. LUKSの書式設定が成功したことを確認します。

    cryptsetup isLuks /dev/sdb && echo Success
  4. デバイスに関する暗号化情報を取得します。

    cryptsetup luksDump /dev/sdb
  5. デバイスのLUKS UUIDを取得します。 UUID値は、/etc/crypttabを構成するために使用されます。

    cryptsetup luksUUID /dev/sdb
  6. デバイス名がdev_nameのLUKSコンテナを作成します。 これにより、デバイス・ノード/dev/mapper/<dev_name>も作成されます。

    cryptsetup luksOpen /dev/sdb <dev_name>
  7. マップされたデバイスに関する情報を取得します。

    dmsetup info <dev_name>
  8. デバイス・ノードをext4ファイルシステムとしてフォーマットします。

    sudo mkfs -t ext4 /dev/sdb 
  9. デバイス・ノードをマウントします。

    mount /dev/mapper/<dev_name> /home/encrypt_fs
  10. /etc/crypttabにエントリを追加します。

    <dev_name> UUID=<LUKS UUID of /dev/sdb> none

    /home/encrypt_fsにコピーされたすべてのファイルはLUKSによって暗号化されています。

  11. 暗号化されたボリュームの利用可能なキー・スロットにキー・ファイルを追加します。 このキー・ファイルを使用して、暗号化されたボリュームにアクセスできます。

    dd if=/dev/urandom of=$HOME/keyfile bs=32 count=1
    chmod 600 $HOME/keyfile
    cryptsetup luksAddKey /dev/sdb ~/keyfile
  12. ファイルの暗号化ステータスを確認します。

    cryptsetup status /home/encrypt_fs
  13. 終了後にアンマウントします。

    umount /home/encrypt_fs
    cryptsetup luksClose <dev_name>

暗号化されたボリュームにアクセスするには:

cryptsetup luksOpen /dev/sdb <dev_name> --key-file=/home/opc/keyfile
mount /dev/mapper/<dev_name> /home/encrypt_fs

キー・ファイルを紛失した場合、またはキー・ファイルまたはパスフレーズが破損した場合、暗号化されたボリュームを復号化することはできません。 その結果、データが永久に失われます。 オンプレミス・ホストには、キー・ファイルの永続コピーを格納することをお薦めします。

dm-crypt暗号化データ・ボリュームのリモート・マウント

次のステップでは、キー・ファイルがオンプレミスのホスト(SRC_IP)にあり、<OCI_SSH_KEY>がインスタンスのSSH秘密キーであることを前提としています。

  1. オンプレミス・ホストからインスタンスにキー・ファイルをコピーします。

    scp -i <OCI_SSH_KEY> keyfile opc@SRC_IP:/home/opc
  2. 暗号化されたボリュームを開きます。

    ssh i <OCI_SSH_KEY> opc@SRC_IP "cryptsetup luksOpen /dev/sdb <dev_name> --key-file=/home/opc/keyfile"
  3. ボリュームをマウントします。

    ssh -i <OCI_SSH_KEY> opc@SRC_IP "mount /dev/mapper/<dev_name> /home/encrypt_fs"
  4. マウントされたボリューム内のデータに対して操作を実行します。

  5. 暗号化されたボリュームをアンマウントします。

    ssh -i <OCI_SSH_KEY> opc@SRC_IP "umount /home/encrypt_fs"
    ssh -i <OCI_SSH_KEY> opc@SRC_IP "cryptsetup luksClose <dev_name>"
  6. インスタンスからキー・ファイルを削除します。

    ssh -i <OCI_SSH_KEY> opc@SRC_IP "\rm -f /home/opc/keyfile"