AWS KMS を使用したカスタマーキーの管理
項目一覧
注意
2021 年 1 月 26 日のリリース以降、カスタマー キー管理のために AWS KMS 暗号化のキーへのアクセスを管理するには、IAM ユーザーではなく AWS IAM ロールを使用する必要があります。
AWS IAMユーザーからロールに移行するときは、新しいロールが古い AWS CMK にアクセスできることを確認します。
AWS IAM ロール を使用して AWS KMS キー(保管時の暗号化用)にアクセスできるよう、Atlas プロジェクトを構成できます。保管時の暗号化をプロジェクトで有効にするときに、既存のロールを使用するか、新しいロールを作成できます。
このページでは、役割ベースのアクセス用に MongoDB Atlas プロジェクトでカスタマー キー管理を設定する方法について説明します。
新規または既存の Atlas プロジェクトで保管時の暗号化をまだ有効にしていない場合は、「 プロジェクトの暗号化のキーへのロールベース アクセスの有効化 」の手順に従って、Atlas プロジェクトの保管時の暗号化を有効にします。保管時の暗号化をすでに有効にし、暗号化のキーへの資格情報ベースのアクセスを構成している Atlas プロジェクトがある場合は、「プロジェクトの暗号化のキーへのロールベース アクセスへの切り替え」手順に従って、暗号化のキーへのロールベース アクセスに切り替えます。
Atlas プロジェクトのカスタマー キー マネジメントを構成してから、そのプロジェクトのクラスターで有効にします。
必要なアクセス権
カスタマー キー マネジメントを設定するには、プロジェクトへの Project Owner
アクセス権が必要です。
Organization Owner
アクセス権を持つユーザーは、自分自身を Project Owner
としてプロジェクトに追加する必要があります。
AWS KMS を使用したカスタマー マネージド キーの有効化
Atlas では、エンベロープ暗号化というプロセスに沿ってカスタマー キーを管理します。このプロセスでは、あるキーを別のキーで暗号化することによって複数の暗号化レイヤーが作成されます。カスタマー キー管理を有効にするために、MongoDB Atlas では以下の暗号化キーが使用されます。
Customer-Managed Key (CMK)
カスタマー管理キーは、ユーザーが AWS KMS で作成、所有、管理する暗号化キーです。AWS KMS でCMK を作成し、プロジェクトレベルで Atlas に接続します。AWS KMS で使用される CMK について詳しくは、AWS KMS ドキュメントを参照してください。
Atlas はこのキーを MongoDB マスター キーの暗号化にのみ使用します。
MongoDB Master Key
Atlasマスター キーを作成しMongoDB 。 MongoDB マスターキーは、MongoDB Server がデータベースごとに暗号化されたキーを暗号化するために使用する暗号化キーです。 Atlas は、キーの暗号化されたコピーをローカルに保存します。
このキーは CMK で暗号化され、データベースごとに暗号化されたキーを暗号化します。
Per-Database Encryption Key
MongoDB Atlas の各ノードは、クラスター内のデータベースごとに暗号化のキーも作成します。Atlas はこれらのキーを使用して、WiredTiger を介してデータの読み取りと書き込みを行い、WiredTiger はこれらのキーを暗号化して保存します。
このキーは、MongoDB マスターキーで暗号化されます。
例
ノードが 3 つのレプリカ セットの次の暗号化階層を検討してみましょう。Atlas は、AWS KMS のCMKを使用して、クラスター内の各ノードのユニークな MongoDB マスターキーを暗号化します。また、各ノードには 3 つのデータベースが含まれており、それぞれがデータベースごとに固有の暗号化キーで暗号化されています。クラスターが起動すると、Atlas は Amazon Web Services の KMS のCMKを使用して MongoDB マスターキーを復号化し、これをMongoDB Serverに提供します。
注意
Atlas の CMK へのアクセスを取り消すと、Atlas はクラスター内のノードをシャットダウンし、 CMK へのアクセスを復元するまでデータにアクセスできなくなります。
前提条件
MongoDB プロジェクトでAWS KMS を使用してカスタマー マネージド キーを有効にするには、次の手順を実行する必要があります。
M10 以上のクラスターを使用します。
対称 AWS KMS キーを用意します。キーの作成方法について詳しくは、AWS ドキュメントで「キーの作成」を参照してください。
注意
地域的な障害の発生に備えて回復力を確保するには、KMS キーを マルチリージョン キーとして構成します。
詳細については、「停止時のAmazon Web Services KMS リージョンの再設定」を参照してください。
十分な権限を持つ AWS IAM ロールを持っているようにします。Atlas には、キーを使用して次のアクションを実行する権限が必要です。
注意
AWS KMS キーを作成した IAM ロールではなく、別の AWS アカウントの AWS IAM ロールで AWS KMS キーを使用する場合は、十分な権限があることを確認してください。
外部 AWS アカウントを含めるには、 AWS KMS キーの下にキー ポリシー ステートメントを追加します。
外部 AWS アカウントの IAM ロールに IAM インライン ポリシーを追加します。
IAM ロールと CMK について詳しくは、AWS ドキュメントを参照してください。
上記の権限を確認したら、通常の手順に従って Atlas で KMS 設定を構成できますが、次の例外があります。
AWS KMS キーの完全な ARN を指定する必要があります(例:
arn:aws:kms:eu-west-2:111122223333:key/12345678-1234-1234-1234-12345678
)を入力します。マスター キー ID(例:12345678-1234-1234-1234-12345678
を AWS KMS キー ID フィールドに入力しないでください。
IAM ロールの作成方法について詳しくは、 AWS ドキュメントで「IAMロール」を参照してください。
Atlas は、保存時の暗号化が有効になっているプロジェクト内のすべてのクラスターに対して同じ IAM ロールと Amazon Web Services KMS キー設定を使用します。
AWS KMS の設定で必要な場合、KMS と通信できるように、Atlas の IP アドレスおよびパブリック IP アドレス、またはクラスターノードの DNS ホスト名からのアクセスを許可します。マネージドIAMロールポリシー にIPアドレスを含める必要があります IPアドレス条件演算子 を設定することによって ポリシー文書に記載されています。ノードの IP アドレスが変更された場合は、接続の中断を回避するために構成を更新する必要があります。
プロジェクトの暗号化のキーへのロールベース アクセスの有効化
Atlas Atlasで、プロジェクトの {0 ページにGoします。GoAdvanced
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Security見出しの下のAdvancedをクリックします。
詳細ページが表示されます。
Authorize a new IAM role のリンクをクリックして、 AWS IAM ロールを許可し、保管時の暗号化に使用する AWS KMS キーにアクセスできるようにします。
保存時の暗号化に使用する Amazon Web Services KMS キーにアクセスするための新しいAmazon Web Services IAM ロールを作成するには、「Amazon Web Services CLI を使用した新しいロールの作成 」の手順に従います。承認する既存の Amazon Web Services IAM ロールがある場合は、「既存のロールへの信頼関係の追加」手順に従ってください。
AWS コンソールまたは CLI を使用して、AWS IAM ロールにアクセス ポリシーを追加します。詳細については、「 IAM ポリシーの管理 」を参照してください。
注意
このポリシーステートメントにより、 MongoDBのAmazon Web Services Principal は、暗号化および復号化操作にカスタマーのKMSキーを使用できるようになります。 Atlas Principal は秘密ではなく、すべての Atlas カスタマー間で使用されます。 これは、高度に制限された、目的限定のAmazon Web Servicesアカウントであり、IAM ユーザー以外のリソースは含まれません。 ポリシー ステートメント内のExternalId
は Atlas プロジェクトごとに一意ですが、秘密ではありません。 ExternalId
は、クロスコンテキスト(混乱した代理)への脆弱性の可能性を軽減するために使用されます。 こちら で説明されているように、Atlas が共通のプリンシパルを使用してすべてのカスタマーのキーにアクセスする方法を、アクセス パターンとして Amazon は推奨して います。
保管時の暗号化のアクセス ポリシーは次のようになります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:us-east-1:123456789012:key/12x345y6-7z89-0a12-3456-xyz123456789" ] } ] }
cloudProviderAccess
エンドポイントに POST リクエストを送信します。
API エンドポイントを使用して、新しいAmazon Web Services IAM ロールを作成します。Atlas は、Amazon Web Services アカウントの認証にこのロールを使用します。
返されたフィールド値 atlasAWSAccountArn
と atlasAssumedRoleExternalId
を、次の手順で使用するために保存しておきます。
Amazon Web Services IAM ロールの信頼ポリシーを変更します。
Amazon Web Servicesマネジメント コンソールにログインします。
Identity and Access Management (IAM)サービスに移動します。
左側のナビゲーションからRolesを選択します。
ロールのリストから Atlas アクセスに使用する既存の IAM ロールをクリックします。
Trust Relationships タブを選択します。
Edit trust relationshipボタンをクリックします。
Policy Documentを編集します。 次のコンテンツを持つ新しい
Statement
オブジェクトを追加します。注意
このポリシーステートメントにより、 MongoDBのAmazon Web Services Principal は、暗号化および復号化操作にカスタマーのKMSキーを使用できるようになります。 Atlas Principal は秘密ではなく、すべての Atlas カスタマー間で使用されます。 これは、高度に制限された、目的限定のAmazon Web Servicesアカウントであり、IAM ユーザー以外のリソースは含まれません。 ポリシー ステートメント内の
ExternalId
は Atlas プロジェクトごとに一意ですが、秘密ではありません。ExternalId
は、クロスコンテキスト(混乱した代理)への脆弱性の可能性を軽減するために使用されます。 こちら で説明されているように、Atlas が共通のプリンシパルを使用してすべてのカスタマーのキーにアクセスする方法を、アクセス パターンとして Amazon は推奨して います。注意
強調表示された行を、ステップ 1 の API 呼び出しから返された値に置き換えます。
{ "Version": "2020-03-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "<atlasAWSAccountArn>" }, "Action:" "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<atlasAssumedRoleExternalId>" } } } ] } Update Trust Policyボタンをクリックします。
新しく作成した IAM ロールを承認します。
APIエンドポイントを使用して、新しい IAM 引き受けロール ARN を承認および構成します。API 呼び出しに成功した場合は、 Amazon Web Services を使用する Atlas サービスを構成するときに roleId
値を使用できます。
ロール認証を用いたプロジェクトでの Amazon Web Services KMS の有効化
承認された Amazon Web Services IAM ロール ID を使用して awsKms.roleId
フィールドを更新するには、encryptionAtRest API エンドポイントに PATCH
リクエストを送信します。
例
curl --user "{public key}:{private key}" --digest \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --include \ --request PATCH \ "https://cloud.mongodb.com/api/atlas/v1.0/groups/{groupId}/encryptionAtRest?pretty=true&envelope=true" \ --data ' { "awsKms": { "enabled": true, "roleId": "<roleId>", "customerMasterKeyID": "<master-key-id>", "region": "<aws-region>" } }'
プロジェクトの暗号化のキーへのロールベース アクセスへの切り替え
重要
暗号化キーをロールベースのアクセスに切り替えた場合、そのプロジェクトでは、ロールベースのアクセス構成を取り消して、暗号化のキーの認証情報ベースのアクセスに戻すことはできません。
AtlasGoAdvancedAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Security見出しの下のAdvancedをクリックします。
詳細ページが表示されます。
保管時の暗号化に使用する AWS KMS キーにアクセスするための AWS IAM ロールを、Atlas に承認して割り当てます。
保存時の暗号化に使用する Amazon Web Services KMS キーにアクセスするための新しいAmazon Web Services IAM ロールを作成するには、「Amazon Web Services CLI を使用した新しいロールの作成 」の手順に従います。承認する既存の Amazon Web Services IAM ロールがある場合は、「既存のロールへの信頼関係の追加」手順に従ってください。
Atlas 管理 API を使用して暗号化のキー マネジメントを更新するには、上記の手順と同じ手順を使用します。
Atlas クラスターのカスタマー キー管理の有効化
プロジェクトの暗号化のキーへのロールベース アクセスを有効にした後、暗号化するデータを含む各 Atlas クラスターに対してカスタマー キー マネジメントを有効にする必要があります。
注意
該当プロジェクト内のクラスターのカスタマー キー管理を有効にするには、Project Owner
ロールが必要です。
新しいクラスターの場合は、クラスターを作成するときに 独自の暗号化キーの管理設定を [Yes] に切り替えます。
既存クラスターの場合:
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
AWS CMK のローテーション
注意
MongoDB マスターキー - MongoDB の責任
独自のクラウドプロバイダーKMS Bluetooth を使用する場合、Atlas はMongoDBマスター キーを少なくとも90 日ごとに自動的にローテーションします。メンテナンスウィンドウ中にキー ローテーションが開始されます(構成されている場合)。メンテナンス(手動または自動)を延期すると、キーが 90 日を超えてローテーションされる可能性があります。キーは順次ローテーションされるため、プロセスでデータを書き換える必要はありません。
AWS CMK - お客様の責任
Atlas は、Amazon Web Services が提供する保存時の暗号化に使用される Amazon Web Services CMK を自動的にローテーションしません。
Atlasalert
Amazon Web Servicesベストプラクティスとして、 90Atlasプロジェクトで 保管時の 暗号化を有効 にする 場合、 CMK のローテーションを促すため、 はデフォルトで 日ごとに作成します。このアラートの期間は構成により変更できます。
AWS CMK のローテーションを手動で、または AWS KMS インスタンスの構成により自動的に行えます。AWS CMK の自動ローテーションを構成する場合、デフォルトのローテーション期間は約 365 日です。
Amazon Web Services で自動 CMK ローテーションをすでに設定していて、90 日ごとに CMK をローテーションするための Atlas アラートを受信したくない場合は、デフォルトのアラート期間を 365 日より長く変更するか、アラートを無効にできます。
このページでは、Atlas で新しいキーを作成し、CMK ID を更新して Atlas プロジェクト CMK をローテーションする方法について説明します。このキーローテーションの方法は、 Amazon Web Services KMSの自動 CMK ローテーションと比較して、ローテーション期間のより細かい制御をサポートします。
重要
保管時の暗号化によるクラウドバックアップ
Atlas では、保管時の暗号化とクラスターのバックアップを使用するクラスターの場合、スナップショットの取得時点でプロジェクトの CMK と AWS IAM ユーザー認証情報を使用し、スナップショットのデータファイルを自動的に暗号化します。これにより、すべての Atlas ストレージおよびスナップショットのボリュームに適用されている既存の暗号化に暗号化レイヤーが追加されます。
Atlas は、ローテーション後に新しい CMK を使用してスナップショットを再暗号化しません 。プロジェクト内のすべてのバックアップ対応クラスターで、その CMK をまだ使用しているスナップショットがあるかどうかを確認するまでは、古い CMK を削除しないでください。Atlas は、バックアップの予定、保持、オンデマンド スナップショットに従ってバックアップを削除します。Atlas が特定の CMKに依存するすべてのスナップショットを削除した後、その CMK を安全に削除できます。
手順
AtlasGoAdvancedAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Security見出しの下のAdvancedをクリックします。
詳細ページが表示されます。
AWS CMK の詳細を更新します。
次の情報を入力します。
フィールドアクションAWS IAM role
KMS キーへのアクセス権をすでに持っている既存の Amazon Web Services IAM ロールを選択するか、新しいロールを承認して、次の権限でこのロールに KMS キーへのアクセス権を付与します。
詳細については、「 プロジェクトの暗号化キーへのロールベースのアクセス 」を参照してください。
Customer Master Key ID
Amazon Web Services カスタマー マスター キー ID を入力します。
Customer Master Key Region
Amazon Web Services CMK を作成した Amazon Web Services リージョンを選択します。
AtlasAmazon Web Servicesには、 Amazon Web Services KMSをサポートする Amazon リージョンのみがリストされます。
[Save] をクリックします。
Atlas は、 CMK ローテーション プロセス中に Atlas コンソールにバナーを表示します。変更がデプロイされるまで、 CMK を削除したり無効にしたりしないでください。
停止時の AWS KMS リージョンの再設定
リージョン停止時は、Amazon Web Services KMS リージョンが利用できなくなる可能性があります。カスタマー キー マネジメントを使用した保管時の暗号化を有効にした場合、少なくとも 1 つのノードが使用可能な状態であれば暗号化および復号化操作を実行できます。しかし、すべてのノードが利用できなくなると、暗号操作を実行できなくなります。停止時にノードが再起動すると、そのノードは利用できなくなります。
使用できないノードを正常な状態に戻すには、現在の AWS KMS リージョンを使用可能なリージョンに再構成します。KMS リージョンを変更するには、AWS KMSキーがマルチリージョン キーである必要があります。マルチリージョン キーを作成するには、AWS ドキュメントを参照してください。
注意
単一リージョン キーを複数リージョン キーに変換することはできません。
手順
Amazon Web Services KMS リージョンを再設定するには、Atlas で次の手順を実行します。
AtlasGoAdvancedAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。
まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。
サイドバーで、 Security見出しの下のAdvancedをクリックします。
詳細ページが表示されます。
関連トピック
MongoDB の保存時の暗号化の詳細については、MongoDB サーバーのドキュメントの「保存時の暗号化」を参照してください。
クラウドバックアップによる保管時の暗号化について詳しくは、「ストレージ エンジンとクラウドバックアップの暗号化」を参照してください。