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

セキュリティの推奨事項

  • ブロック・ボリュームとブート・ボリュームという2つのタイプのボリュームがあります。ブロック・ボリュームを使用すると、インスタンス・ストレージ容量を動的に拡張できます。ブート・ボリュームには、コンピュート・インスタンスの起動に使用されるイメージが含まれます。IAMサービスによって、関連するボリューム・リソース・タイプがグループ化され、volume-familyと呼ばれる結合リソース・タイプになります。
  • IAMユーザーおよびグループの最小限のアクセス権限を、volume-familyのリソース・タイプに割り当てます。volume-familyのリソース・タイプは、volumesvolume-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 crypto 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"