Amazon Connect データストレージ用のS3バケットポリシーを必要最小限に設定する

2024.06.11

はじめに

Amazon Connect のレポートや通話録音が保存されているデータストレージ用のS3バケットポリシーを、セキュリティ強化のために必要最小限のアクセス権限に設定してみました。

Amazon Connect のレポートや通話録音は、指定したS3バケットに保存されます。通話の録音内容には個人情報が含まれている可能性があるため、S3バケットポリシーで適切なアクセス制御を行うことが推奨されます。

必要最小限のアクセス権限を設定することで、セキュリティを強化しつつ、適切な関係者のみがデータにアクセスできるようになります。

本記事では、Amazon Connectのデータストレージ用S3バケットのセキュリティを高めるために、必要最小限のアクセス権限を設定する具体的な方法を解説します。

S3バケットポリシーを変更する場合

誤ったバケットポリシーを設定してしまうと、意図しないアクセス制限が発生し、誰もアクセスできない状態や、Amazon ConnectからS3バケットにレポートや通話録音が保存しないなど、正常に動作しなくなる恐れがあります。

設定変更前に、ステージング環境のS3バケットポリシーで検証することを強くお勧めします。本番環境への適用は、十分なテストの後に行うようにしましょう。

また、バックアップとして元のバケットポリシーをコピーしておき、問題が発生した場合にすぐに戻せるようにしておくことも重要です。

前提条件

  • Amazon Connectインスタンスは作成済み
  • データストレージ用バケットも作成済み

流れ

Connectインスタンスを作成すると、インスタンスごとに固有のサービスリンクロールが作成されます。

このロールは、ConnectインスタンスがS3に音声ファイルを保存するなど、他のAWSサービスを呼び出す際に利用されますので、バケットポリシーで許可する必要があります。

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-slr.html

また、バケットポリシーを修正する必要があるため、管理者もバケットポリシーで許可します。

よって、以下の2つのIAMを許可し、他は禁止するバケットポリシーを作成します。

  • Connectインスタンスのサービスリンクロール
  • 管理者のIAMロールもしくはIAMユーザー
    • 今回、管理者はIAMロールを利用してアカウントにログインするとします。

本記事での流れは以下の通りです。

  1. Connectインスタンスに使用されているIAMロールとS3バケットを確認
  2. IAMロールIDを特定
  3. S3バケットポリシーを作成
  4. S3バケットへのアクセスを確認

Connectインスタンスに使用されているIAMロールとS3バケットを確認

Connectインスタンスのサービスリンクロール名とS3バケット名を確認します。

サービスリンクロール名は、AWSServiceRoleForAmazonConnect_ユニークIDで、Connectのコンソールの[概要]から確認できます。

Connectインスタンスに使用されているS3バケットは以下から確認できます。

IAMロールIDを特定

IAMロールIDは、バケットポリシーでIAMロールを指定するために利用します。

マネジメントコンソールでは確認できないため、CloudShellで以下のコマンドを実行します。

$ aws iam get-role --role-name [IAMロール名]

$ aws iam get-role --role-name AWSServiceRoleForAmazonConnect_KKz5ixYpEfL4nTnFmZKB
{
    "Role": {
        "Path": "/aws-service-role/connect.amazonaws.com/",
        "RoleName": "AWSServiceRoleForAmazonConnect_KKz5ixYpEfL4nTnFmZKB",
        "RoleId": "AROAX33CPAQ3A6H5V5IS5",
        "Arn": "arn:aws:iam::xxxxxxxxxxxx:role/aws-service-role/connect.amazonaws.com/AWSServiceRoleForAmazonConnect_KKz5ixYpEfL4nTnFmZKB",
        "CreateDate": "2020-12-07T03:19:36+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "connect.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        },
        "Description": "Enables access to AWS Services and Resources used or managed by Amazon Connect.",
        "MaxSessionDuration": 3600,
        "RoleLastUsed": {
            "LastUsedDate": "2024-06-03T00:15:29+00:00",
            "Region": "ap-northeast-1"
        }
    }
}

ConnectのサービスリンクロールのRoleIdは、AROAX33CPAQ3A6H5V5IS5であることが分かりました。

省略しますが、管理者のIAMロールも同様にRoleIdを確認しましょう。

S3バケットポリシーを作成

S3バケットポリシーを以下の通りに設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amazon-connect-02e5deef7527",
                "arn:aws:s3:::amazon-connect-02e5deef7527/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AROAX33CPAQ3A6H5V5IS5:*",
                        "AROAX33CPAQ3XXXXXXXXX:*"
                    ]
                }
            }
        }
    ]
}

各自以下の値を変えて下さい。

  • S3バケット名:amazon-connect-02e5deef7527
  • ConnectのサービスリンクロールのロールID:AROAX33CPAQ3A6H5V5IS5
  • 管理者のIAMロールのロールID:AROAX33CPAQ3XXXXXXXXX

S3バケットへのアクセスを確認

以下を確認しましょう

  • Connectインスタンスから録音ファイルが再生できるか
  • 管理者がS3バケット内のオブジェクトを閲覧やダウンロードできるか
  • 管理者以外のユーザーがS3バケット内のオブジェクトを閲覧やダウンロードできないこと

最後に

今回、Amazon Connect データストレージ用のS3バケットポリシーを必要最小限に設定してみました。

S3バケットには通話録音データなどの機密情報が含まれるため、適切なアクセス制御が重要です。一方で、不適切な設定によってAmazon Connectの機能に支障をきたす可能性もありますので、ステージング環境での確認は必須です。

必要最小権限の原則にもとづいて、バケットポリシーの設定が必要な場合、本記事が参考になれば幸いです。

参考

https://aws.amazon.com/jp/blogs/news/amazon-connect-s3%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E5%88%B6%E9%99%90%E3%81%99%E3%82%8B/