인터페이스 엔드포인트(AWS PrivateLink)를 사용하여 Amazon Cognito에 액세스 - Amazon Cognito

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

인터페이스 엔드포인트(AWS PrivateLink)를 사용하여 Amazon Cognito에 액세스

AWS PrivateLink 를 사용하여 VPC와 Amazon Cognito 간에 프라이빗 연결을 생성할 수 있습니다. 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 Direct Connect 연결을 사용하지 않고 VPC에 있는 것처럼 Amazon Cognito에 액세스할 수 있습니다. VPC의 인스턴스는 Amazon Cognito에 액세스하는 데 퍼블릭 IP 주소가 필요하지 않습니다.

AWS PrivateLink에서 제공되는 인터페이스 엔드포인트를 생성하여 이 프라이빗 연결을 설정합니다. 인터페이스 엔드포인트에 대해 사용 설정하는 각 서브넷에서 엔드포인트 네트워크 인터페이스를 생성합니다. 이는 Amazon Cognito로 향하는 트래픽의 진입점 역할을 하는 요청자 관리형 네트워크 인터페이스입니다.

자세한 내용은 AWS PrivateLink 안내서AWS PrivateLink를 통해 AWS 서비스 에 액세스를 참조하세요.

중요

다음 인증 유형은 현재를 통해 지원되지 않습니다. AWS PrivateLink

  1. OAuth 2.0 클라이언트 자격 증명 흐름을 사용한 Machine to Machine(M2M) 권한 부여

  2. 관리형 로그인 및 클래식 호스팅 UI를 사용하여 로그인합니다.

다음 표에서는 VPCs의 클라이언트가 사용할 수 있는 인증 흐름과 이를 관리하는 데 적용할 수 있는 IAM 정책을 설명합니다. 사용자 풀에 대한 요청에서 평가할 수 있는 정책은 리소스 제어 정책(RCPs), VPC 엔드포인트 정책 및 자격 증명 기반 정책입니다.

Resource 인증 흐름 클라이언트가 VPC 엔드포인트를 전송할 때 평가되는 정책 클라이언트 오리진이 퍼블릭일 때 평가되는 정책
사용자 풀 관리형 로그인 및 클래식 호스팅 UI 로그인 없음(액세스 없음)1 없음2
사용자 풀 Machine-to-machine 권한 부여 없음(액세스 없음)1 없음2
사용자 풀 SDK 및 REST API 인증되지 않은 요청 RCPs, VPC 엔드포인트 정책3 RCPs
사용자 풀 SDK 및 REST API SigV4 인증 요청 RCPs, VPC 엔드포인트 정책, 자격 증명 기반 정책3 RCPs, 자격 증명 기반 정책
자격 증명 풀 SDK 및 REST API 인증되지 않은 요청(기본향상된 흐름) RCPs, VPC 엔드포인트 정책 RCPs
자격 증명 풀 SDK 및 REST API SigV4 인증 요청(개발자 인증 흐름) RCPs, 자격 증명 기반 정책 RCPs, 자격 증명 기반 정책

1 VPC 엔드포인트는 사용자 풀 도메인에 대한 요청을 수락하지 않습니다. 클라이언트에 인터넷에 대한 경로가 있는 경우 NAT가 적용되어 오리진이 공개됩니다.

2 사용자 풀 도메인이 존재하면 VPC 엔드포인트를 전송하는 사용자 풀 요청이 완료되지 않습니다. 모든 클라이언트는 사용자 풀 도메인 및 API 서비스 엔드포인트로 퍼블릭 전송 경로를 가져올 수 있으므로 사용자 풀에 VPC 엔드포인트를 사용할 수 없습니다. 도메인이 할당된 사용자 풀은와 호환되지 않습니다 AWS PrivateLink.

3 사용자 풀에는 도메인이 할당되어 있지 않아야 합니다.

다음 예제 구현 모델은 AWS PrivateLink 및 Amazon Cognito에서 지원됩니다.

Resource 구현 작업
사용자 풀 완전 프라이빗 SDK 또는 REST API 애플리케이션
  1. 도메인 삭제

  2. VPC 엔드포인트 생성

  3. VPC를 제외한 Deny 모든 cognito-idp 작업으로 RCP 구성

사용자 풀 프라이빗 및 퍼블릭
  1. 도메인 삭제

  2. VPC 엔드포인트 생성

사용자 풀 프라이빗 또는 퍼블릭 OAuth 2.0 권한 부여 서버
  1. VPC에서 사용할 수 없음

자격 증명 풀 완전 프라이빗
  1. VPC 엔드포인트 생성

  2. VPC를 제외한 Deny 모든 cognito-identity 작업으로 RCP 구성

자격 증명 풀 프라이빗 및 퍼블릭
  1. VPC 엔드포인트 생성

Amazon Cognito 고려 사항

Amazon Cognito에 대한 인터페이스 엔드포인트를 설정하기 전에 AWS PrivateLink 가이드고려 사항을 검토하세요. Amazon Cognito는 인터페이스 엔드포인트를 통해 모든 Amazon Cognito API 작업을 호출할 수 있도록 지원합니다. 이러한 작업에 대한 자세한 내용은 Amazon Cognito 사용자 풀 API 참조Amazon Cognito 연동 자격 증명 API 참조를 참조하세요.

AWS PrivateLink Amazon Cognito용는 상용 AWS 리전에서만 사용할 수 있습니다.

사용자 풀 및 AWS PrivateLink

인터페이스 엔드포인트를 통해 모든 사용자 풀 API 작업에 요청할 수 있지만, 클라이언트 자격 증명 부여 및 관리형 로그인과 같은 사용자 풀 OAuth 2.0 권한 부여 서버에서 애플리케이션이 요청하는 작업은 요청할 수 없습니다.

cognito-idp 사용자 풀 API에 인증되지 않은 인증 및 토큰 권한 부여 API 작업이 있습니다. VPC 엔드포인트 및 리소스 제어 정책에서 인증된 작업에 대한 권한을 부여할 수 있습니다. 자격 증명 기반 정책과 달리 인증되지 않은 작업 및 토큰 인증 작업에 대한 권한을 부여할 수도 있습니다. VPC 엔드포인트 및 리소스 제어 정책 유형은 다른 퍼블릭 작업에 대한 요청을 평가 및 거부하거나 허용할 수 있습니다.

도메인 엔드포인트에 대한 요청도 퍼블릭이지만 정책에서는 평가할 수 없습니다. VPC 프라이빗 DNS는 사용자 풀 도메인에 대한 요청을 VPC 엔드포인트로 라우팅하지 않습니다. 퍼블릭-인터넷 경로를 통해서만 도메인 서비스를 요청할 수 있습니다. 자세한 내용은 정책이 사용자 풀 작업에 미치는 영향 단원을 참조하십시오.

지원되는 연산자

VPC의 시스템은 사용자 풀 API 작업에는 요청을 보낼 수 있지만 사용자 풀 도메인 엔드포인트에는 보낼 수 없습니다. 머신 투 머신(M2M), 페더레이션 로그인권한 부여 코드 부여와 같은 도메인 엔드포인트를 사용하는 OpenID Connect(OIDC) 및 OAuth 2.0 워크플로는 VPC 엔드포인트를 통해 액세스할 수 없습니다. machine-to-machine VPC 엔드포인트 정책은 이러한 HTTP 워크플로에 영향을 주지 않으며 처리할 수 없습니다. VPC 내에서 도메인 엔드포인트에 대한 요청은 항상 인터페이스 엔드포인트에서 실패하지만 사용자 풀에 대해 VPC 엔드포인트를 설정할 때 퍼블릭 DNS 및 라우팅을 통해 계속 사용할 수 있습니다.

VPC의 시스템에서 도메인이 할당되지 않도록 Amazon Cognito는 인터페이스 엔드포인트에서 CreateUserPoolDomain 요청을 차단합니다. 이렇게 하면 VPC에 있는 시스템에서 사용자 풀에 도메인이 추가되지 않습니다. 모든 시스템에서 도메인이 추가되지 않도록 하려면 다음 예제와 같은 리소스 제어 정책(RCP)을에 적용합니다 AWS 계정. 이 정책은 지정된 사용자 풀에 대한 CreateUserPoolDomain 작업을 차단합니다.

{ "Version": "2012-10-17", "Statement": [ { "Principal": "*", "Effect": "Deny", "Action": [ "cognito-idp:CreateUserPoolDomain" ], "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } ] }

사용자 풀에 도메인이 있을 수 있으며, 모든 경우 도메인을 사용할 수 없습니다 AWS PrivateLink. cognito-idp 서비스 엔드포인트에 대한 모든 SDK 기반 사용자 풀 API 요청은를 AWS PrivateLink제외하고를 통한 요청을 수락합니다CreateUserPoolDomain. 사용자 풀 API 서비스 엔드포인트 및 도메인 엔드포인트는 퍼블릭-인터넷 경로를 통해 항상 액세스할 수 있습니다. 퍼블릭 소스의 액세스를 해결하려면 AWS WAF 웹 ACLs.

정책이 사용자 풀 작업에 미치는 영향

일반적으로 퍼블릭 및 미인증 사용자 풀 API 작업을 비롯한 모든 사용자 풀 API 작업은 VPC 엔드포인트 정책 및 리소스 제어 정책(RCPs. VPC 조건 키를 사용하여 자격 증명 기반 정책에서 사용자 풀 액세스에 제한을 적용할 수도 있습니다. SigV4 형식의 인증 정보가 포함된 요청만 자격 증명 기반 정책에서 제어할 수 있습니다. 관리형 로그인 및 클래식 호스팅 UI 작업은 별도의 범주이며 VPC 전송 또는 작업에 어떤 유형의 정책도 적용할 수 없습니다.

인증되지 않은 작업

클라이언트 측 애플리케이션에 대한 Amazon Cognito 작업은 SigV4로 인증되지 않습니다. 예제 작업은의 예제 정책에 있습니다엔드포인트의 엔드포인트 정책 생성. 인증되지 않은 작업의 추가 예는 GetUser 및 입니다AssociateSoftwareToken. 이러한 작업을 자격 증명 기반 정책에 추가해도 아무런 효과가 없습니다. 그러나 VPC 엔드포인트 정책 및 RCPs.

인증되지 않은 작업은 IAM 보안 주체와 연결되지 않습니다. VPC 엔드포인트 정책 또는 RCP는 이러한 작업에 대한 모든 보안 주체를 허용해야 합니다.

인증된 작업

사용자 풀 관리 및 서버 측 인증을 위한 API 작업은 SigV4로 인증됩니다. 인증된 작업의 경우 VPC 엔드포인트에 적용하는 엔드포인트 정책, 조직의 리소스 제어 정책 및 보안 주체에 적용하는 자격 증명 기반 정책으로 보안 주체를 제한할 수 있습니다. 자격 증명 기반 및 리소스 제어 정책은 aws:SourceVpc 및와 같은 네트워크 기반 조건 키가 있는 VPC 인식 정책입니다aws:SourceVpce.

사용자 풀에 대한 API 작업의 서버 측, 클라이언트 측 및 관리 클래스에 대한 자세한 내용은 섹션을 참조하세요API 및 SDK 인증을 위한 권한 부여 모델.

자격 증명 풀 및 AWS PrivateLink

Amazon Cognito 자격 증명 풀은를 통한 모든 API 작업을 지원합니다 AWS PrivateLink.

지원되는 연산자

모든 자격 증명 풀 API 작업은 인터페이스 엔드포인트를 통해 지원됩니다. 자격 증명 풀에는 도메인 엔드포인트가 없으며 동일한 제한이 적용되지 않습니다. 그러나 ID 풀에는 와의 통합으로 인해 네트워크 기반 액세스 제어에 대한 특정 고려 사항이 있습니다 AWS STS.

AWS STS 통합을 통한 네트워크 컨텍스트 제한

자격 증명 풀은 작업을 사용하여 AWS STS AssumeRoleWithWebIdentity 임시 AWS 자격 증명을 제공합니다. 자격 증명 풀이 향상된 인증 흐름 AWS PrivateLink 에서를 AWS STS 호출할 때 , aws:SourceIp aws:SourceVpc및와 같은 네트워크 컨텍스트 키aws:SourceVpce에는 애플리케이션의 네트워크 컨텍스트가 아닌 자격 증명 풀 서비스 인프라의 값이 포함됩니다.

IAM 역할 신뢰 정책 또는 리소스 제어 정책(RCPs 네트워크 기반 조건 키를 사용하여 액세스를 제한하는 경우 자격 증명 풀 작업이 예기치 않게 거부될 수 있습니다. 이 제한을 해결하기 위해 다음 방법 중 하나를 사용할 수 있습니다.

서비스 식별을 위한 보안 주체 태그

자격 증명 풀에 사용되는 IAM 역할에 태그를 지정하고 보안 주체에 적절한 태그가 있는 경우 작업을 허용하도록 정책을 수정합니다. 먼저 자격 증명 풀 역할에 태그를 추가합니다.

aws iam tag-role \ -\-role-name MyIdentityPoolRole \ -\-tags Key=CognitoServiceCall,Value=true

그런 다음 태그가 지정된 보안 주체를 허용하도록 네트워크 기반 정책을 수정합니다. 예를 들어 RCP에서는 다음과 같습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "sts:AssumeRoleWithWebIdentity", "Resource": "*", "Condition": { "NotIpAddress": { "aws:SourceIp": ["allowed-ip-ranges"] }, "StringNotEqualsIfExists": { "aws:ResourceTag/CognitoServiceCall": "true" } } } ] }

서비스별 컨텍스트 키

자격 증명 풀은 VPC 엔드포인트 정책 및 RCPs에서 리소스 수준 권한 부여를 위한 서비스별 컨텍스트 키를 제공합니다. 이러한 컨텍스트 키를 사용하면 세분화된 액세스 제어를 활성화하고 정책에서 인증된 사용자와 인증되지 않은 사용자를 구별할 수 있습니다.

GetId, GetCredentialsForIdentity, GetOpenIdTokenGetOpenIdToken, UnlinkIdentity와 같은 non-SigV4 작업에 사용할 수 있는 서비스별 컨텍스트 키
  • cognito-identity-unauth:IdentityPoolArn - 인증되지 않은 사용자의 자격 증명 풀 ARN을 기준으로 액세스를 필터링합니다.

  • cognito-identity-unauth:AccountId - 인증되지 않은 사용자의 AWS 계정 ID를 기준으로 액세스를 필터링합니다.

  • cognito-identity-auth:IdentityPoolArn - 인증된 사용자의 자격 증명 풀 ARN을 기준으로 액세스를 필터링합니다.

  • cognito-identity-auth:AccountId - 인증된 사용자의 AWS 계정 ID를 기준으로 액세스를 필터링합니다.

DeleteIdentitiesDescribeIdentity와 같은 SigV4 작업에 사용할 수 있는 서비스별 컨텍스트 키
  • cognito-identity:IdentityPoolArn - 자격 증명 풀 ARN을 기준으로 액세스를 필터링합니다.

다음 예제와 같이 VPC 엔드포인트 정책에서 이러한 컨텍스트 키를 사용하여 인증 상태에 따라 액세스를 제한할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "cognito-identity:GetId", "cognito-identity:GetCredentialsForIdentity" ], "Resource": "*", "Condition": { "StringEquals": { "cognito-identity-unauth:IdentityPoolArn": "arn:aws:cognito-identity:us-east-1:123456789012:identitypool/us-east-1:12345678-ffff-ffff-ffff-123456" } } } ] }

리소스 제어 정책을 사용한 액세스 제어

Amazon Cognito는 리소스 제어 정책(RCP)을 사용하여 리소스에 대한 액세스 제어를 지원합니다.RCPs 네트워크 기반 조건 키를 사용하여 RCPs는 사용자 풀 및 자격 증명 풀에 AWS PrivateLink 액세스할 수 있는 네트워크와 작업을 정의할 수 있습니다. RCPs의 Action 문은 인증된 사용자 풀 API 작업과 인증되지 않은 사용자 풀 API 작업 모두에 대한 액세스를 제어할 수 있습니다.

예를 들어, 다음 예제 정책은 특정 VPC의 모든 사용자 풀에 대한 액세스를 금지합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCognitoAccessOutsideVPC", "Effect": "Deny", "Principal": "*", "Action": "cognito-idp:*", "Resource": "*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-02d6770f46ef1653b" } } } ] }

Amazon Cognito용 인터페이스 엔드포인트 생성

Amazon VPC 콘솔 또는 ()를 사용하여 Amazon Cognito에 대한 인터페이스 엔드포인트를 생성할 수 있습니다AWS CLI. AWS Command Line Interface 자세한 내용은 AWS PrivateLink 안내서인터페이스 엔드포인트 생성을 참조하세요.

다음 서비스 이름을 사용하여 Amazon Cognito 사용자 풀에 대한 인터페이스 엔드포인트를 생성합니다.

com.amazonaws.region.cognito-idp

다음 서비스 이름을 사용하여 Amazon Cognito 자격 증명 풀에 대한 인터페이스 엔드포인트를 생성합니다.

com.amazonaws.region.cognito-identity

인터페이스 엔드포인트에 대해 프라이빗 DNS를 활성화하면 기본 리전 DNS 이름을 사용하여 Amazon Cognito에 API 요청을 할 수 있습니다. 예를 들어 사용자 풀의 cognito-idp.us-east-1.amazonaws.com 경우 , 자격 증명 풀의 cognito-identity.us-east-1.amazonaws.com 경우 입니다.

엔드포인트의 엔드포인트 정책 생성

엔드포인트 정책은 인터페이스 엔드포인트에 연결할 수 있는 IAM 리소스입니다. 기본 엔드포인트 정책은 인터페이스 엔드포인트를 통해 Amazon Cognito에 대한 전체 액세스를 허용합니다. VPC에서 Amazon Cognito에 허용되는 액세스를 제어하려면 인터페이스 엔드포인트에 사용자 지정 엔드포인트 정책을 연결합니다.

엔드포인트 정책은 다음 정보를 지정합니다.

  • 작업을 수행할 수 있는 위탁자(AWS 계정, IAM 사용자, IAM 역할)

  • 수행할 수 있는 작업

  • 작업을 수행할 수 있는 리소스.

  • 요청이 허용되거나 거부되기 전에 충족되어야 하는 조건입니다.

자세한 내용은 AWS PrivateLink 안내서엔드포인트 정책을 사용하여 서비스에 대한 액세스 제어를 참조하세요.

예: 사용자 풀 작업에 대한 VPC 엔드포인트 정책

다음은 사용자 풀에 대한 사용자 지정 엔드포인트 정책의 예입니다. 이 정책을 인터페이스 엔드포인트에 연결하면 모든 리소스의 모든 보안 주체에 대해 나열된 사용자 풀 작업에 대한 액세스 권한이 부여됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::123456789012:assumed-role/MyWebAppRole/MyWebAppSession" }, "Effect": "Allow", "Action": [ "cognito-idp:AdminInitiateAuth", "cognito-idp:AdminRespondToAuthChallenge", "cognito-idp:AdminSetUserPassword" ], "Resource":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" }, { "Effect": "Allow", "Action": [ "cognito-idp:InitiateAuth", "cognito-idp:RespondToAuthChallenge", "cognito-idp:ForgotPassword", "cognito-idp:ConfirmForgotPassword" ], "Resource":"arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } ] }
예: 자격 증명 풀 작업에 대한 VPC 엔드포인트 정책

다음은 자격 증명 풀에 대한 사용자 지정 엔드포인트 정책의 예입니다. 이 정책은 서비스별 컨텍스트 키를 사용하여 특정 자격 증명 풀의 인증된 사용자에 대한 액세스를 제한합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "cognito-identity:GetId", "cognito-identity:GetCredentialsForIdentity", "cognito-identity:GetOpenIdToken" ], "Resource": "*", "Condition": { "StringEquals": { "cognito-identity-auth:IdentityPoolArn": "arn:aws:cognito-identity:us-east-1:123456789012:identitypool/us-east-1:12345678-ffff-ffff-ffff-123456" } } } ] }

AWS PrivateLink 작업에 대한 자격 증명 기반 정책 생성

자격 증명 기반 정책은 AWS 보안 주체에 연결할 수 있는 IAM 리소스입니다. IAM 인증 작업에 대한 자격 증명 기반 정책을 사용하여 VPC 엔드포인트를 통해 Amazon Cognito에 대한 액세스를 제어할 수 있습니다. 엔드포인트 정책과 달리 자격 증명 기반 정책에서는 인증되지 않은 작업에 대한 권한을 구성할 수 없습니다. 인증된 작업 또는 관리 작업에는 서명 버전 4 인증이 필요합니다. 사용자 풀의 경우 인증된 작업에는 AdminInitiateAuth와 같은 서버 측 인증 요청과 UpdateUserPool과 같은 관리 요청이 포함됩니다. 자격 증명 풀의 경우 인증된 작업에는 DeleteIdentitiesDescribeIdentity와 같은 관리 요청이 포함됩니다.

자격 증명 기반 정책은 다음 정보를 지정합니다.

  • 수행할 수 있는 작업

  • 작업을 수행할 수 있는 리소스.

  • 요청이 허용되거나 거부되기 전에 충족되어야 하는 조건입니다.

예: 사용자 풀 서버 측 인증을 위한 자격 증명 기반 정책

다음 예제 정책은 지정된 엔드포인트에서 지정된 사용자 풀의 나열된 사용자 풀 작업에 대한 액세스 권한을 부여합니다. 웹 애플리케이션의 수임된 IAM 역할에이 정책을 적용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-idp:AdminInitiateAuth", "cognito-idp:AdminRespondToAuthChallenge", "cognito-idp:AdminSetUserPassword" ], "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE", "Condition": { "StringEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" } } } ] }
예: 자격 증명 풀 관리 작업에 대한 자격 증명 기반 정책

다음 예제 정책은 지정된 VPC 엔드포인트에서 자격 증명 풀 관리 작업에 대한 액세스 권한을 부여합니다. 자격 증명 풀 관리를 수행해야 하는 IAM 보안 주체에이 정책을 적용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-identity:DeleteIdentities", "cognito-identity:DescribeIdentity" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" }, "StringEquals": { "cognito-identity:IdentityPoolArn": "arn:aws:cognito-identity:us-east-1:123456789012:identitypool/us-east-1:12345678-ffff-ffff-ffff-123456" } } } ] }