Closed3

AWS CDK issue 33978 の検討メモ

hassaku63hassaku63

grantReplicationPermission を追加するのであれば、IBucket にも対応できる必要がある。

つまり、Bucket クラスのメンバーにはアクセスできない。

多分 grant のパラメータでそのへん指定して、import した IBucket でも明示的な prop 指定によって機能するように作ってあげる感じがよさげ。現時点で他の方法は出てこない。

import したやつであるなら Custom Resource で必要な権限取ってくるように実装する案も一応あるが、正直オーバースペックな気もするのでとりあえず今考える路線としては却下。考慮したソリューションのひとつとして、PR コメントにでも書いておくことにする。

IBucket の場合に使えなくなるのが主に Bucket のプロパティアクセス・プライベートメソッドの機能なので、今の実装でそれに依存しているものを洗い出していく必要がある。


まずはこのへんのベーシックな権限

https://github.com/aws/aws-cdk/blob/f2c5f26e134ee32aaf2653e217de56289fcf11f1/packages/aws-cdk-lib/aws-s3/lib/bucket.ts#L2809-L2827

fromXXX 系で共通する実装である Import クラスは BucketBase の継承で、bucketArn への参照は使えることがわかる。

https://github.com/aws/aws-cdk/blob/f2c5f26e134ee32aaf2653e217de56289fcf11f1/packages/aws-cdk-lib/aws-s3/lib/bucket.ts#L2009-L2032

このへんのパーミッションは BucketBase のパブリックメソッドで grant を実装し直しても問題なく動くはず。

次がレプリケーション先への Put 時に使う KMS Encription 関係。

https://github.com/aws/aws-cdk/blob/f2c5f26e134ee32aaf2653e217de56289fcf11f1/packages/aws-cdk-lib/aws-s3/lib/bucket.ts#L2829-L2831

この値は replicationRule ごとに Bucket 初期化時に参照できるもので、BcuketBase では定義されていないし、import リソースでは使えない。この実装をそのまま使うことは不可能。grant のオプションに入れる必要がある。

次が、ソース側のオブジェクトを取得するのに使う KMS Decrypt 関係。

https://github.com/aws/aws-cdk/blob/f2c5f26e134ee32aaf2653e217de56289fcf11f1/packages/aws-cdk-lib/aws-s3/lib/bucket.ts#L2833-L2834

これはソースバケットに 1:1 対応する設定で、Base にも IBucket にも定義されている。が、fromCfn 以外(具体的には fromArn, fromName)の from メソッドでここの値が入ることはないので、Base クラスのプロパティとして参照する方法は完全ではない。つまり、fromArn, fromName 経由で KMS 暗号化しているバケットの IBucket を扱うユーザーの実装では、オプションとして KMS キーを明示しないと意図通りの許可がセットされない可能性があり、コメント等でケアする必要がある。

このスクラップは3ヶ月前にクローズされました