AWS CDK issue 33978 の検討メモ

Replication source のための IAM Role の権限を設定している場所がこれ

grantReplicationPermission を追加するのであれば、IBucket にも対応できる必要がある。
つまり、Bucket クラスのメンバーにはアクセスできない。
多分 grant のパラメータでそのへん指定して、import した IBucket でも明示的な prop 指定によって機能するように作ってあげる感じがよさげ。現時点で他の方法は出てこない。
import したやつであるなら Custom Resource で必要な権限取ってくるように実装する案も一応あるが、正直オーバースペックな気もするのでとりあえず今考える路線としては却下。考慮したソリューションのひとつとして、PR コメントにでも書いておくことにする。
IBucket の場合に使えなくなるのが主に Bucket のプロパティアクセス・プライベートメソッドの機能なので、今の実装でそれに依存しているものを洗い出していく必要がある。
まずはこのへんのベーシックな権限
fromXXX 系で共通する実装である Import クラスは BucketBase の継承で、bucketArn への参照は使えることがわかる。
このへんのパーミッションは BucketBase のパブリックメソッドで grant を実装し直しても問題なく動くはず。
次がレプリケーション先への Put 時に使う KMS Encription 関係。
この値は replicationRule ごとに Bucket 初期化時に参照できるもので、BcuketBase では定義されていないし、import リソースでは使えない。この実装をそのまま使うことは不可能。grant のオプションに入れる必要がある。
次が、ソース側のオブジェクトを取得するのに使う KMS Decrypt 関係。
これはソースバケットに 1:1 対応する設定で、Base にも IBucket にも定義されている。が、fromCfn 以外(具体的には fromArn, fromName)の from メソッドでここの値が入ることはないので、Base クラスのプロパティとして参照する方法は完全ではない。つまり、fromArn, fromName 経由で KMS 暗号化しているバケットの IBucket を扱うユーザーの実装では、オプションとして KMS キーを明示しないと意図通りの許可がセットされない可能性があり、コメント等でケアする必要がある。