

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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 호출을 수행합니다. 또한 클라이언트 애플리케이션은 웹소켓을 통해 연결하여 자신이 멤버로 있는 채널의 메시지 및 이벤트에 대한 실시간 업데이트를 받을 수도 있습니다. 이 섹션에서는 특정 앱 인스턴스 사용자 범위가 지정된 클라이언트 애플리케이션에 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) 섹션을 참조하세요.

기존 ID 공급자가 있는 경우 다음과 같은 옵션을 사용하여 기존 ID를 Amazon Chime SDK 메시징과 통합할 수 있습니다.
+ 기존 자격 증명 공급자를 사용하여 사용자를 인증한 다음 인증 서비스를 AWS Security Token Service(STS)와 통합하여 클라이언트에 대한 자체 자격 증명 벤딩 서비스를 생성할 수 있습니다. STS는 IAM 역할을 맡기 위한 API를 제공합니다.
+ 이미 SAML 또는 OpenID 호환 자격 증명 공급자가 있는 경우, 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 ID 풀](https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)을 사용하는 것이 좋습니다. Amazon Cognito는 OpenID, SAML, Sign with Amazon, Sign with Apple과 같은 퍼블릭 자격 증명 공급자를 통합합니다.

자격 증명 공급자가 없는 경우 Amazon Cognito 사용자 풀을 시작할 수 있습니다. Amazon Chime SDK 메시징 기능과 함께 Amazon Cognito를 사용하는 방법에 대한 예는 [Amazon Chime SDK 메시징을 사용하여 애플리케이션에 채팅 기능 구축](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)를 사용하여 자체 보안 인증 벤딩 서비스를 만들거나 자체 ID 공급자를 구축할 수 있습니다.

**보안 인증 벤딩을 위해 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 엔티티를 사용하여 호출됩니다. [AWS Lambda 실행 역할](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)과 같은 다른 IAM 역할로도 API를 직접 호출할 수 있습니다. 해당 IAM ID에는 *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 역할과 함께 신뢰 정책을 사용하는 방법에 대한 자세한 내용은 [IAM 역할로 신뢰 정책을 사용하는 방법](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 ` 