

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Chime SDK メッセージング用のエンドユーザークライアントアプリケーションの認証
<a name="auth-client-apps"></a>

Amazon Chime SDK メッセージングをエンドユーザークライアントアプリケーションから実行することもできます。[Amazon Chime SDK メッセージングのバックエンドサービスから SDK 呼び出しを行う](call-from-backend.md) は create-channel、send-channel-message、list-channel-messages などの API コールを行う方法を説明します。ブラウザおよびモバイルアプリケーションなどのエンドユーザークライアントアプリケーションがこれらの同じ API コールを行います。クライアントアプリケーションは WebSocket 経由で接続して、自分がメンバーになっているチャネルへのメッセージおよびイベントに関するリアルタイムの更新を受信することもできます。このセクションでは、特定のアプリケーションインスタンスユーザーを対象とするクライアントアプリケーションに IAM 認証情報を付与する方法について説明します。エンドユーザーがこれらの認証情報を取得すると、[Amazon Chime SDK メッセージングのバックエンドサービスから SDK 呼び出しを行う](call-from-backend.md) に示す API コールを行うことができます。クライアントアプリケーションの完全なデモを見るには、[https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat) を参照してください。クライアントアプリケーションが属するチャネルからリアルタイムメッセージを受信する方法について詳しくは、「[WebSockets を使用して Amazon Chime SDK メッセージングでメッセージを受信する](websockets.md)」を参照してください。

## エンドユーザーへの IAM 認証情報の付与
<a name="connect-id-provider"></a>

Amazon Chime SDK メッセージングは、 AWS Identity and Access Management (IAM) ポリシーとネイティブに統合され、受信リクエストを認証します。IAM ポリシーは、個々のユーザーができることを定義します。IAM ポリシーは、ユースケースに合わせてスコープダウンされ限定された認証情報を提供するように作成できます。Amazon Chime SDK メッセージングユーザーに対するポリシー作成の詳細については、「[Amazon Chime SDK メッセージングの IAM ロールの例](iam-roles.md)」を参照してください。

既存のアイデンティティプロバイダーをお持ちの場合、既存のアイデンティティを Amazon Chime SDK メッセージングと統合するための以下のオプションがあります。
+ 既存の ID プロバイダーを使用してユーザーを認証し、認証サービスを AWS Security Token Service (STS) と統合して、クライアント用に独自の認証情報供給サービスを作成できます。STS には IAM ロールを引き受けるための API が用意されています。
+ SAML または OpenID と互換性のあるアイデンティティプロバイダーを既にお持ちの場合は、Amazon [Cognito アイデンティティプール](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)を使用することをお勧めします。これにより、 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) および [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) への呼び出しが抽象化され取り除かれます。Amazon Cognito は、OpenID や SAML のほか、Facebook、Login with Amazon、Google、Sign in with Apple などのパブリックアイデンティティプロバイダーと統合します。

アイデンティティプロバイダーをお持ちでない場合は、Amazon Cognito ユーザープールの使用を開始できます。Amazon Cognito を Amazon Chime SDK メッセージング機能と共に使用する方法の例については、「[Build chat features into your application with Amazon Chime SDK messaging](https://aws.amazon.com/blogs/business-productivity/build-chat-features-into-your-application-with-amazon-chime-sdk-messaging/)」を参照してください。

あるいは、[AWS STS](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) を使用して独自の認証情報供給サービスを作成したり、独自のアイデンティティプロバイダーを構築したりすることもできます。

**STS を使用して認証情報を供給する**  
ActiveDirectory LDAP などの IDP を既にお持ちで、カスタムの認証情報供給サービスを実装したり、認証されていない会議参加者にチャットへのアクセス許可を付与したりする場合は、[AWS STS AssumeRole API](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) を使用できます。これを行うには、まず Amazon Chime SDK メッセージング SDK ロールを作成します。このロールの作成の詳細については、「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

IAM ロールには、アプリケーションが使用する Amazon Chime SDK メッセージングアクションに対する以下のようなアクセス許可があります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "chime:GetMessagingSessionEndpoint"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "chime:SendChannelMessage",
                "chime:ListChannelMessages",
                "chime:CreateChannelMembership",
                "chime:ListChannelMemberships",
                "chime:DeleteChannelMembership",
                "chime:CreateChannelModerator",
                "chime:ListChannelModerators",
                "chime:DescribeChannelModerator",
                "chime:CreateChannel",
                "chime:DescribeChannel",
                "chime:ListChannels",
                "chime:DeleteChannel",
                "chime:RedactChannelMessage",
                "chime:UpdateChannelMessage",
                "chime:Connect",
                "chime:ListChannelBans",
                "chime:CreateChannelBan",
                "chime:DeleteChannelBan",
                "chime:ListChannelMembershipsForAppInstanceUser",
                "chime:AssociateChannelFlow",
                "chime:DisassociateChannelFlow",
                "chime:GetChannelMessageStatus"
            ],
            "Resource": [
            "arn:aws:chime:{{us-east-1}}:{{123456789012}}:app-instance/{{app_instance_id}}/user/my_applications_user_id",
            "arn:aws:chime:{{us-east-1}}:{{123456789012}}:app-instance/{{app_instance_id}}/channel/*"
    ]
        }
    ]
}
```

------

この例では、このロールを *ChimeMessagingSampleAppUserRole* と呼びます。

ユーザー ARN リソースの *ChimeMessagingSampleAppUserRole* ポリシー `${my_application_user_id}` のセッションタグに注意してください。このセッションタグは [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API コールでパラメータ化され、単一ユーザーのアクセス許可に返される認証情報を制限します。

[https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) および [https://docs.aws.amazon.com/STS/latest/APIReference/API_TagSesstion.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_TagSesstion.html) API は、IAM ユーザーなど既に認証されている IAM エンティティを使用して呼び出されます。API は [AWS Lambda 実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)など、別の IAM ロールから呼び出すこともできます。その IAM アイデンティティには *ChimeMessagingSampleAppUserRole* で `AssumeRole` および `TagSession` を呼び出すためのアクセス許可が必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
         {
            "Effect": "Allow",
            "Action": [ 
                "sts:AssumeRole",
                "sts:TagSession"
                ],
            "Resource": "arn:aws:iam::{{123456789012}}:role/{{ChimeMessagingSampleAppUserRole}}"
        }
    ]
}
```

------

 この例では、このロールを *ChimeSampleAppServerRole* と呼びます。

`ChimeMessagingSampleAppServerRole` で [STS AssumeRole API](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) を呼び出すことを許可する信頼ポリシーを使用して `ChimeMessagingSampleAppUserRole` を設定する必要があります。IAM ロールでの信頼ポリシーの使用の詳細については、「[How to use trust policies with IAM roles](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)」を参照してください。 AWS IAM ロールコンソールを使用して、このポリシーを に追加できます`ChimeMessagingSampleAppUserRole`。以下の例は、標準的な信頼関係を示しています。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:role/{{ChimeMessagingSampleAppServerRole}}"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

 サンプルデプロイでは、[Amazon EC2](https://aws.amazon.com/ec2/) インスタンス、または AWS Lambda が で起動されます`ChimeMessagingSampleAppServerRole`。その後、サーバーは以下を実行します。

1. クライアントの認証情報受信リクエストに対して、アプリケーション固有の認可を実行します。

1. `${aws:PrincipalTag/my_applications_user_id}` をパラメータ化するタグを使用して、`ChimeMessagingSampleAppUserRole` で STS `AssumeRole` を呼び出します。

1. `AssumeRole` 呼び出しで返された認証情報をユーザーに転送します。

以下の例は、ステップ 2 のロールを引き受けるための CLI コマンドを示しています。

`aws sts assume-role --role-arn arn:aws:iam::{{my_aws_account_id}}:role/{{ChimeMessagingSampleAppUserRole}} --role-session-name demo --tags Key={{my_applications_user_id}},Value={{123456789}} ` 