暗号化オブジェクトのS3レプリケーション設定

GuardDutyの検出結果をS3に出力し、さらにその内容を
集約用のアカウントにレプリケーションする仕組みを構築したのだが、
その時にかなりハマった内容を備忘録として記録する。
やりたいこと
①送信元アカウントのGuardDutyの検出結果をS3に出力する設定をしたい。
②①の結果を集約用の別AWSアカウント上のS3バケットにレプリケーションしたい。
必要なもの
(A) 送信元アカウント S3バケット
(B) 送信元アカウント IAMロール(レプリケーション用)
(C) 送信元アカウント KMSキー
(D) 送信先アカウント S3バケット
(E) 送信先アカウント KMSキー
当初、(A)と(D)は別要件にてレプリケーション設定は施されていた。
SecurityHubの結果やVPCフローログなどを(A)に出力していて、
その内容は(D)に伝播されている事は確認できていた。
なので、GuardDutyの検出結果も(A)に出力できさえすれば、勝手に(D)に伝播されるもんだと
タカをくくっていたのが大きな間違いであった。
GuardDutyの検出結果は、出力設定の際にKMSキーのARNを求められる。
つまり、暗号化された形で(A)に出力されるのであった。
暗号化されているオブジェクトは待てど暮らせど(D)にレプリケーションされない。
原因①
S3バケットのレプリケーション設定の「暗号化」設定。
KMSで暗号化されたオブジェクトは、この設定が「ON」になっていないと
レプリケーションされない。
ところが、この設定をONにしただけでは、暗号化オブジェクトはレプリケーションされない。
原因②
送信元アカウントのKMSキーだけではなく、送信先アカウントにもKMSキーが必要。
さらに、(B)のIAMロールのカスタムポリシーに、
・送信元KMSのDecryptアクションの許可
・送信先KMSのEncryptアクションの許可
の両方が必要との事。これがなかなか想像できずにハマった。
原因③
送信先のKMSのキーポリシーには
・送信元のAWSアカウントIDからのアクセス許可
が必要
まとめ
上記を施し、ようやくGuardDutyの検出結果がレプリケーションできるようになった。
ここに至るまで、AWSサポートを利用したのだが、クロスアカウント案件なので、
どちらのアカウントに質問すべきかが不明瞭で、かなり手こずった。
結果的には送信元アカウント側にて回答を頂けたのだが、
暗号化オブジェクトのレプリケーション、なかなか手強い。