💡

AWS S3をKMSで暗号化した場合のアクセス設定

2023/03/28に公開

1. はじめに

AWS S3バケットをKMSで暗号化した場合に、同一アカウント内や別アカウントからアクセスするには何を設定すべきか調べる機会があったので、ここにまとめてみます。
なお、調査対象は同一リージョン内のEC2からS3バケットへアクセスするケースのみとします。クロスリージョンでのアクセスは対象外です。
また、EC2からS3バケットへのアクセス経路は特に記載しませんが、S3バケットへの操作のリクエストが通過できる経路が確立されていることとします。

2. 調査方法・結果

KMSには、AWSマネージド型キーとカスタマー管理型キーの2種類のキーがあります。この2種類のキーと、同一アカウント/別アカウントの2種類を組み合わせた4パターンで、アクセス設定を確認します。
カスタマー管理型キーは単一リージョンキーとマルチリージョンキーのどちらかを選択できますが、今回は同一リージョン内のアクセスのみが対象のため、単一リージョンキーを使用します。

2.1. AWSマネージド型キー × 同一アカウント内アクセス

EC2から同一リージョン・同一アカウントにあるAWSマネージド型キーで暗号化したS3バケットへアクセスするケースです。

アカウント リソース 設定
アカウントA EC2 EC2へ割り当てるIAMロールに、対象のS3バケットに対して許可する操作を設定。KMSキーに対する許可設定は不要
S3バケット S3のバケットポリシーの設定は不要
KMSキー AWSマネージド型キーのため設定不可

このケースでは、AWSマネージド型キーを使用するための特別な権限付与は不要で、S3のデフォルトの暗号化キー(S3マネージドキー(SSE-S3))を使用する場合と違いはありません。

2.2. カスタマー管理型キー × 同一アカウント内アクセス

EC2から同一リージョン・同一アカウントにあるカスタマー管理型キーで暗号化したS3バケットへアクセスするケースです。

アカウント リソース 設定
アカウントA EC2 EC2へ割り当てるIAMロールに、対象のS3バケットに対して許可する操作を設定。また、使用しているカスタマー管理型キーに対して許可する操作の設定(*)が必要。
S3バケット S3のバケットポリシーの設定は不要
KMSキー カスタマー管理型キーのキーユーザとして、EC2に割り当てたIAMロールを設定(*)

(*)で示した、EC2のIAMロールへの設定とカスタマー管理型キーのキーユーザ設定は両方の設定が必須ではなく、どちらか一方を設定すればよいです。

2.3. AWSマネージド型キー × クロスアカウントアクセス

EC2から同一リージョン・異なるアカウントにあるAWSマネージド型キーで暗号化したS3バケットへアクセスするケースですが、このケースではアクセスはできません。
AWSマネージド型キーは同一アカウント内でしか使用することはできません。別アカウントからアクセスする必要がある場合には、次に記載するようにカスタマー管理型キーを使用しましょう。

2.4. カスタマー管理型キー × クロスアカウントアクセス

EC2から同一リージョン・異なるアカウントにあるカスタマー管理型キーで暗号化したS3バケットへアクセスするケースです。

アカウント リソース 設定
アカウントA EC2 EC2へ割り当てるIAMロールに、対象のアカウントBのS3バケットに対して許可する操作を設定。また、使用しているアカウントBのカスタマー管理型キーに対して許可する操作の設定が必要。
アカウントB S3バケット S3のバケットポリシーで、アカウントAのEC2に割り当てたIAMロールによって許可する操作を設定
KMSキー カスタマー管理型キーに別アカウントとしてアカウントAを登録

3. まとめ

KMSで暗号化したS3バケットに対してアクセスを許可するための設定をまとめました。
ただ、実際に行いたい操作に対して設定すべきActionなど、詳細な設定方法までは記載していないので、実際に設定する際はAWSのドキュメントなどを参照してください。

また、今回はKMSで暗号化したS3バケットへのアクセスについて記載しましたが、KMSで暗号化した他のリソースについても設定の考え方は同じかと思いますので、参考にしていただければと思います。

Discussion