【Amazon Connect】通話録音ファイルをクロスアカウントで取得してみた
はじめに
こんにちは、フニです。
本記事では、Amazon Connect の通話録音ファイルをクロスアカウントで取得する方法についてご紹介します。
結論
- 録音ファイルは、Amazon Connect インスタンスの「データストレージ - 通話記録」で設定した KMS キーにより S3 バケットに保存・暗号化されます。
- AWSマネージド型キー(AWS Managed Key) の場合、クロスアカウントで録音ファイルの取得はできません。(キーポリシ変更ができないため)
- カスタマーマネージド型キー(Customer Managed Key)の場合、クロスアカウントでも取得できますが、運用面・設定面・コストが発生いたします。
- 途中で KMS キーを変更した場合、新規録音ファイルにのみ適用されます。つまり、既存録音ファイルの暗号化キーは変更されません。設計段階からどちらにするか決めることを推奨いたします。
やってみた
今回は以下のシナリオで、暗号化設定によって結果がどう変わるかを解説します。
どちらも Admin 権限で操作することを前提とし、リソースの作成方法などは解説しません。
- A アカウントに S3 に保存された通話録音ファイルを保存する
- B アカウントで、その録音ファイルを取得する
AWSマネージド型キーの場合
Amazon Connect の通話記録設定で aws/connect デフォルト暗号化を設定し、通話録音ファイルを S3 バケットに用意しました。


録音ファイルの 暗号化キーARN を押下すると、aws/connect デフォルト暗号化キーで暗号化されたことが確認できます。


バケットポリシー側に、B アカウントへの許可を追加しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowConnectPlayPrompt",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<AWSアカウントID>:root",
"Service": "connect.amazonaws.com"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<S3バケット名>",
"arn:aws:s3:::<S3バケット名>/*"
]
}
]
}

B アカウントで CloudShell を開き、A アカウントの S3 の録音ファイルの取得を試しました。結果は失敗です。
理由は、KMS キーポリシーから許可設定がないからです。なお、aws/connect デフォルトキーはキーポリシーを変更できません。
$ aws s3 cp "<S3 URL>" .
download failed: <S3 URL> An error occurred (AccessDenied) when calling the GetObject operation: User: arn:aws:sts::<AWSアカウントID>:assumed-role/cm-hwang.byeonghun/cm-hwang.byeonghun is not authorized to perform: kms:Decrypt on the resource associated with this ciphertext because the resource does not exist in this Region, no resource-based policies allow access, or a resource-based policy explicitly denies access
カスタマーマネージド型キーの場合
Amazon Connect の通話記録設定でカスタマーマネージドキー (CMK) 暗号化を設定し、通話録音ファイルを S3 バケットに用意しました。


録音ファイルの 暗号化キーARN を押下すると、カスタマーマネージドキー (CMK) 暗号化キーで暗号化されたことが確認できます。


キーポリシーには、以下のように B アカウントの許可設定を追加します。
{
"Sid": "AllowCrossAccountDecrypt",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<AWSアカウントID>:root"
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
}

B アカウントで CloudShell を開き、A アカウントの S3 の録音ファイルの取得を試しました。結果は成功でした。
クロスアカウントから録音ファイルを取得したい場合、KMS キーポリシー側でも許可設定が必要になることがわかります。
$ aws s3 cp "<S3 URL>" .
download: <S3 URL> to ./<録音ファイル名>
比較表
以下は KMS キーの比較表です。
こちらを参考に、要件に適した KMS キーを選択してください。
| 項目 | AWSマネージド型キー | カスタマーマネージドキー (CMK) |
|---|---|---|
| キー管理 | AWS が自動管理 | ユーザーが管理 |
| キーローテーション | AWS が自動実行(年1回) | 手動 or 自動設定が必要 |
| キーポリシー編集 | 不可 | 可能 |
| クロスアカウントアクセス | 不可 | 可能 |
| キーのコスト | 無料 | KMSキー料金 + API リクエスト料金 |
| アクセス制御の粒度 | 低い(サービス単位) | 高い(ロール/ユーザー単位) |
| 運用負担 | 低い(ほぼゼロ) | 高い(ポリシー管理・ローテーション設定等) |
| キーの共有 | 同一アカウント内のみ | 複数アカウント間で共有可能 |
さいごに
今回は、Amazon Connect の通話録音ファイルをクロスアカウントで取得する方法についてご紹介しました。
途中で暗号化キーを変更したとしても、既存ファイルには適用されません。
もしクロスアカウントで録音ファイルを取得したいといった要件がある場合は設計段階から決めましょう。
この記事が、誰かの助けになれば幸いです。
参考







