📝

Amazon Connect インスタンス作成時に自動的に作成されるリソースを確認してみた

2025/02/27に公開

デフォルト設定でインスタンスを作成した場合、以下のリソースが作成されます。

  • 「amazon-connect」から始まる S3 バケット
  • IAM ポリシー
    • 「AmazonConnectLexServiceRolePolicy」から始まるポリシー
    • 「AmazonLexV2KmsPolicy」から始まるポリシー
    • 「AmazonLexV2KmsPolicyForS3Download」から始まるポリシー
    • 「AmazonLexV2ComprehendPolicy」から始まるポリシー
  • IAM ロール
    • 「AWSServiceRoleForProfile」から始まるロール
    • 「AWSServiceRoleForConnectCampaigns」から始まるロール
    • 「AmazonLexTestWorkbenchServiceRole-IAD」から始まるロール
    • 「AWSServiceRoleForAmazonConnect」から始まるロール
  • 「aws/connect」というエイリアスの KMS マネージドキー
  • 「/aws/connect/」から始まる CloudWatch Logs ロググループ

S3 バケット

Create an Amazon Connect instance - Amazon Connect

When you create an instance, by default we create an Amazon S3 bucket. Data, such as reports and recordings of conversations, is encrypted using AWS Key Management Service, and then stored in the Amazon S3 bucket.

デフォルトでは以下のデータが保存されます。

  • 通話録音
  • チャットのトランスクリプト
  • エクスポートされたレポート
  • フローログ
  • 電子メールメッセージ

どの S3 バケットが Amazon Connect インスタンスと紐づいているかは Amazon Connect コンソールのデータストレージから確認可能です。

IAM ポリシー

Add an Amazon Lex bot to Amazon Connect - Amazon Connect

Amazon Lex との連携に必要な IAM ポリシーであると思われましたが、ドキュメントに詳細な説明はありませんでした。
コンソールには以下の通り Lex Bot マネジメント用の IAM ロールである旨の説明が表示されていました。

Amazon Connect needs to create a service role and a service-linked role for Lex Bot Management

4 つの IAM ポリシーがアタッチされている IAM ロールは「AmazonLexTestWorkbenchServiceRole-IAD」から始まる IAM ロールでした。
各種ポリシーの定義は以下の通りです。

「AmazonConnectLexServiceRolePolicy」から始まるポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LexPolly",
            "Effect": "Allow",
            "Action": [
                "polly:SynthesizeSpeech"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "TestSetDataUploadWithEncryptionOnly",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::amazon-connect-*/*/lex_testworkbench/test_set/*",
                "arn:aws:s3:::amazon-connect-*/*/lex_testworkbench/test_execution/*",
                "arn:aws:s3:::amazon-connect-*/*/lex_testworkbench/test_set_discrepancy_report/*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-server-side-encryption": "aws:kms",
                    "aws:ResourceAccount": "012345678901"
                }
            }
        },
        {
            "Sid": "TestSetDataRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amazon-connect-*/*/lex_testworkbench/test_set/*",
                "arn:aws:s3:::amazon-connect-*/*/lex_testworkbench/test_execution/*",
                "arn:aws:s3:::amazon-connect-*/*/lex_testworkbench/test_set_discrepancy_report/*",
                "arn:aws:s3:::amazon-connect-*/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "012345678901"
                }
            }
        },
        {
            "Sid": "TestSetListS3Objects",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amazon-connect-*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "012345678901"
                }
            }
        },
        {
            "Sid": "LexS3ReadWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObjectVersion",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amazon-connect-*/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "012345678901"
                }
            }
        },
        {
            "Sid": "LexWorkBenchRuntime",
            "Effect": "Allow",
            "Action": [
                "lex:RecognizeText",
                "lex:RecognizeUtterance",
                "lex:StartConversation"
            ],
            "Resource": "arn:aws:lex:us-east-1:012345678901:bot-alias*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AmazonConnectEnabled": "True"
                }
            }
        },
        {
            "Sid": "CloudWatchPolicyID",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:012345678901:log-group:/aws/connect/*:*"
            ]
        },
        {
            "Sid": "CloudWatchFilterEventsID",
            "Effect": "Allow",
            "Action": [
                "logs:FilterLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:012345678901:log-group:/aws/connect/*:*"
            ]
        }
    ]
}
「AmazonLexV2KmsPolicy」から始まるポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AmazonLexV2KmsPolicy",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:*:012345678901:key/67703265-2a37-478e-8104-bae6d84a76bf"
            ]
        }
    ]
}
「AmazonLexV2KmsPolicyForS3Download」から始まるポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AmazonLexV2KmsPolicyForS3Download",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:*:012345678901:key/67703265-2a37-478e-8104-bae6d84a76bf"
            ],
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "s3.*.amazonaws.com"
                    ]
                },
                "StringEquals": {
                    "aws:ResourceAccount": [
                        "012345678901"
                    ]
                }
            }
        }
    ]
}
「AmazonLexV2ComprehendPolicy」から始まるポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "comprehend:DetectSentiment"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

IAM ロール

「AWSServiceRoleForProfile」から始まるロール

AWS managed policies for Amazon Connect - Amazon Connect

The CustomerProfilesServiceLinkedRolePolicy role permissions policy allows Amazon Connect to complete the following actions on the specified resources. As you enable additional features in Amazon Connect, additional permissions are added for the AWSServiceRoleForProfile service-linked role to access the resources associated with those features:

CustomerProfilesServiceLinkedRolePolicy というマネージドポリシーがアタッチされていました。
信頼されたエンティティは以下であったため、Customer Profiles 関連で使用する IAM ロールであると思われました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "profile.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Customer Profiles については以下のドキュメントをご参照ください。
Enable Customer Profiles for your Amazon Connect instance - Amazon Connect

「AWSServiceRoleForConnectCampaigns」から始まるロール

Use service-linked roles for outbound campaigns in Amazon Connect - Amazon Connect

Outbound campaigns uses the service-linked role prefixed AWSServiceRoleForConnectCampaigns—Grants outbound campaigns permission to access AWS resources on your behalf.

アウトバウンドキャンペーンで使用する IAM ロールで、以下のポリシーがアタッチされていました。

  • マネージドポリシー「AmazonConnectCampaignsServiceLinkedRolePolicy」
  • カスタマーインラインポリシー「ConnectCampaignsServiceConnectIntegrationAccess」
  • 「ConnectCampaignsServiceCustomerProfilesIntegrationAccess」から始まるカスタマーインラインポリシー

各種ポリシーの詳細については上記ドキュメントをご参照ください。
また、アウトバウンドキャンペーンについては以下の公式サイトをご参照ください。
Amazon Connect アウトバウンドキャンペーン | Amazon Web Services

「AmazonLexTestWorkbenchServiceRole-IAD」から始まるロール

How Amazon Lex V2 works with IAM - Amazon Lex

A service role is an IAM role that a service assumes to perform actions on your behalf. An IAM administrator can create, modify, and delete a service role from within IAM.

上述の 4 つの IAM ポリシーがアタッチされた IAM ロールで、Amazon Lex のサービスロールです。
Amazon Lex が Comprehend などのサービスを呼び出す際に使用されます。

「AWSServiceRoleForAmazonConnect」から始まるロール

Use service-linked roles and role permissions for Amazon Connect - Amazon Connect

Amazon Connect uses the service-linked role with the prefix AWSServiceRoleForAmazonConnect_unique-id – Grants Amazon Connect permission to access AWS resources on your behalf.

Amazon Connect のサービスリンクロールです。
Amazon Connect が各サービスと連携するときに使用されます。

KMS キー

Key management in Amazon Connect - Amazon Connect

S3 バケットでの暗号化に使用されます。
デフォルトでは「aws/connect」というエイリアスの KMS マネージドキーが作成されますが、CMK の指定も可能です。
Encryption at rest in Amazon Connect - Amazon Connect

CloudWatch Logs ロググループ

Flow logs stored in an Amazon CloudWatch log group - Amazon Connect

Flow logs are stored in an Amazon CloudWatch log group, in the same AWS Region as your Amazon Connect instance.

フローログが配信されるロググループです。
インスタンス作成時や作成後に設定を確認しましたところ、有効/無効の設定はできましたがロググループのカスタマイズはできないようでした。

ちなみにロググループを削除後にインスタンスの設定でフローログを「無効 → 有効」にすることでロググループが再度自動的に作成されることも確認できました。

リソース削除について

Amazon Connect インスタンスを削除しても上記リソースのほとんどは自動的に削除されません。
検証した限りでは以下のリソースは自動的に削除されました。

  • 「AWSServiceRoleForConnectCampaigns」から始まるロール
  • 「AWSServiceRoleForAmazonConnect」から始まるロール

各種リソースが不要な場合には手動で削除する必要があります。
なお、KMS の AWS マネージドキーを削除することはできません。
Delete an AWS KMS key - AWS Key Management Service

You cannot delete AWS managed keys or AWS owned keys.

各種リソースを自動的に作成しない方法

インスタンス作成時に各種リソースの設定をカスタマイズすれば自動的に作成されるリソースを減らせます。

上記設定で検証したところ、自動的に作成されたリソースは以下の IAM ロールのみでした。

  • 「AWSServiceRoleForAmazonConnect」から始まるロール

まとめ

今回は Amazon Connect インスタンス作成時に自動的に作成されるリソースを確認してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion