インターフェイスエンドポイント (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 クライアント認証情報フローを使用したマシンツーマシン (M2M) 認可

  2. マネージドログインとクラシックホスト UI を使用してサインインします。

次の表は、VPCs 内のクライアントが使用できる認証フローと、それらを管理するために適用できる IAM ポリシーを示しています。ユーザープールへのリクエストで評価できるポリシーは、リソースコントロールポリシー (RCPs)、VPC エンドポイントポリシー、およびアイデンティティベースのポリシーです。

[リソース] 認証フロー クライアントが VPC エンドポイントを転送したときに評価されるポリシー クライアントオリジンがパブリックの場合に評価されるポリシー
ユーザープール マネージドログインとクラシックホスト UI サインイン なし (アクセスなし)1 なし2
ユーザープール Machine-to-machine認可 なし (アクセスなし)1 なし2
ユーザープール SDK および REST API の認証されていないリクエスト RCPs、VPC エンドポイントポリシー3 RCPs
ユーザープール SDK および REST API SigV4 認証リクエスト RCPs、VPC エンドポイントポリシー、アイデンティティベースのポリシー3 RCPs、アイデンティティベースのポリシー
ID プール SDK および REST API の認証されていないリクエスト (基本フローと拡張フロー) RCPs、VPC エンドポイントポリシー RCPs
ID プール SDK および REST API SigV4 認証リクエスト (開発者認証フロー) RCPs、アイデンティティベースのポリシー RCPs、アイデンティティベースのポリシー

1 VPC エンドポイントは、ユーザープールドメインのリクエストを受け入れません。クライアントにインターネットへのルートがある場合、NAT が適用され、オリジンがパブリックになります。

2 ユーザープールドメインが存在すると、VPC エンドポイントを通過するユーザープールリクエストが完了できなくなります。すべてのクライアントは、ユーザープールドメインと API サービスエンドポイントへのパブリックトランジットパスのみを取ることができ、VPC エンドポイントをユーザープールで使用できなくなります。ドメインが割り当てられているユーザープールは と互換性がありません AWS PrivateLink。

3 ユーザープールにはドメインを割り当てることはできません

次の実装モデルは、 AWS PrivateLink および Amazon Cognito でサポートされています。

[リソース] 実装 アクション
ユーザープール 完全プライベート SDK または REST API アプリケーション
  1. ドメインの削除

  2. VPC エンドポイントを作成する

  3. VPC を除くDenyすべての cognito-idp アクションに RCP を設定する

ユーザープール パブリックおよびプライベート IP
  1. ドメインの削除

  2. VPC エンドポイントを作成する

ユーザープール プライベートまたはパブリック OAuth 2.0 認可サーバー
  1. VPC では使用できません

ID プール 完全プライベート
  1. VPC エンドポイントを作成する

  2. VPC を除くDenyすべての cognito-identity アクションに RCP を設定する

ID プール パブリックおよびプライベート IP
  1. VPC エンドポイントを作成する

Amazon Cognito に関する考慮事項

Amazon Cognito のインターフェイスエンドポイントを設定する前に、「 AWS PrivateLink ガイド」の「考慮事項」を参照してください。Amazon Cognito は、インターフェイスエンドポイントを介したすべての Amazon Cognito API アクションの呼び出しをサポートしています。これらのオペレーションの詳細については、Amazon Cognito ユーザープール API リファレンス」およびAmazon Cognito フェデレーティッドアイデンティティ API リファレンス」を参照してください。

AWS PrivateLink for Amazon Cognito は商用 AWS リージョンでのみ使用できます。

ユーザープールと AWS PrivateLink

インターフェイスエンドポイントを介してすべてのユーザープール API オペレーションにリクエストを行うことができますが、クライアント認証情報の付与やマネージドログインなど、アプリケーションがユーザープール OAuth 2.0 認可サーバーにリクエストするオペレーションにはリクエストできません。

cognito-idp ユーザープール API には、認証されていない、認証された、トークンが認可された API オペレーションがあります。VPC エンドポイントとリソースコントロールポリシーで認証されたオペレーションのアクセス許可を付与できます。ID ベースのポリシーとは異なり、認証されていないオペレーションやトークン認証されたオペレーションのアクセス許可を付与することもできます。VPC エンドポイントとリソースコントロールポリシータイプは、それ以外のパブリックオペレーションのリクエストを評価、拒否、または許可できます。

ドメインエンドポイントへのリクエストもパブリックですが、ポリシーで評価することはできません。VPC プライベート DNS は、ユーザープールドメインのリクエストを VPC エンドポイントにルーティングしません。ドメインサービスのリクエストは、パブリックインターネットパスを介してのみ行うことができます。詳細については、「ユーザープールオペレーションに対するポリシーの影響」を参照してください。

サポートされているオペレーション

VPC 内のシステムは、ユーザープール API アクションにリクエストを送信できますが、ユーザープールドメインエンドポイントには送信できません。マシンツーマシン (M2M)、フェデレーティッドサインイン、認可コード付与などのドメインエンドポイントを使用する OpenID Connect (OIDC) および OAuth 2.0 ワークフローは、VPC エンドポイントからはアクセスできません。 machine-to-machine サードパーティーの ID プロバイダーを使用したユーザープールへのサインイン 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 オペレーションは、通常はパブリックおよび未認証であっても、VPC エンドポイントポリシーとリソースコントロールポリシー (RCPs) で制御できます。VPC 条件キーを使用して、アイデンティティベースのポリシーのユーザープールアクセスに制限を適用することもできます。SigV4 形式の認証情報を含むリクエストのみが、アイデンティティベースのポリシーで制御できます。マネージドログインとクラシックホスト UI オペレーションは別のカテゴリであり、VPC トランジットやアクションへのあらゆる種類のポリシーの適用の対象にはなりません。

認証されていないオペレーション

クライアント側のアプリケーションの Amazon Cognito オペレーションは SigV4 で認証されません。オペレーションの例は、 のポリシーの例にありますインターフェイスエンドポイントのエンドポイントポリシーを作成する。認証されていないオペレーションのその他の例は、 GetUserおよび ですAssociateSoftwareToken。これらのオペレーションをアイデンティティベースのポリシーに追加しても、効果はありません。ただし、VPC エンドポイントポリシーと RCPs では、これらのアクションへのアクセスを許可または制限できます。

認証されていないオペレーションは IAM プリンシパルに関連付けられません。VPC エンドポイントポリシーまたは RCP は、これらのアクションのすべてのプリンシパルを許可する必要があります。

認証されたオペレーション

ユーザープール管理とサーバー側の認証の API オペレーション、SigV4 で認証されます。認証されたオペレーションの場合、VPC エンドポイントに適用するエンドポイントポリシー、組織内のリソースコントロールポリシー、およびプリンシパルに適用するアイデンティティベースのポリシーを使用してプリンシパルを制限できます。ID ベースポリシーとリソースコントロールポリシーは、 aws:SourceVpc や などのネットワークベースの条件キーを使用して VPC 対応ですaws:SourceVpce

ユーザープールの API オペレーションのサーバー側、クライアント側、管理クラスの詳細については、「」を参照してくださいAPI 認証と SDK 認証の認可モデル

ID プールと AWS PrivateLink

Amazon Cognito ID プールは、 を介したすべての API オペレーションをサポートします AWS PrivateLink。

サポートされているオペレーション

すべての ID プール API オペレーションは、インターフェイスエンドポイントを介してサポートされます。ID プールにはドメインエンドポイントがなく、同じ制限の対象ではありません。ただし、ID プールには、 との統合により、ネットワークベースのアクセスコントロールに関する特定の考慮事項があります AWS STS。

AWS STS 統合によるネットワークコンテキストの制限

ID プールは オペレーションを使用して AWS STS AssumeRoleWithWebIdentity一時的な AWS 認証情報を提供します。拡張認証フロー AWS PrivateLink で ID プールが AWS STS を呼び出す場合、aws:SourceIp、、 などのネットワークコンテキストキーにはaws:SourceVpc、アプリケーションのネットワークコンテキストからではなく、ID プールサービスインフラストラクチャの値aws:SourceVpceが含まれます。

IAM ロールの信頼ポリシーまたはリソースコントロールポリシー (RCPs) がネットワークベースの条件キーを使用してアクセスを制限すると、ID プールオペレーションが予期せず拒否される可能性があります。この制限に対処するには、次のいずれかの方法を使用できます。

サービス識別のプリンシパルタグ

ID プールで使用される IAM ロールにタグを付け、プリンシパルに適切なタグがある場合にオペレーションを許可するようにポリシーを変更します。まず、ID プールロールにタグを追加します。

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" } } } ] }

サービス固有のコンテキストキー

ID プールは、VPC エンドポイントポリシーと RCPs。これらのコンテキストキーを使用すると、きめ細かなアクセスコントロールを有効にし、ポリシーで認証されたユーザーと認証されていないユーザーを区別できます。

GetIdGetCredentialsForIdentityGetOpenIdTokenUnlinkIdentity などのnon-SigV4 オペレーションで使用できるサービス固有のコンテキストキー
  • cognito-identity-unauth:IdentityPoolArn - 認証されていないユーザーの ID プール ARN でアクセスをフィルタリングします

  • cognito-identity-unauth:AccountId - 認証されていないユーザーの AWS アカウント ID でアクセスをフィルタリングします

  • cognito-identity-auth:IdentityPoolArn - 認証されたユーザーの ID プール ARN でアクセスをフィルタリングします

  • cognito-identity-auth:AccountId - 認証されたユーザーの AWS アカウント ID でアクセスをフィルタリングします

DeleteIdentitiesDescribeIdentity などの SigV4 オペレーションで使用できるサービス固有のコンテキストキー
  • cognito-identity:IdentityPoolArn - ID プール 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 はユーザープールと ID プール 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 Cognito のインターフェイスエンドポイントは、Amazon VPC コンソールまたは AWS Command Line Interface () を使用して作成できますAWS CLI。詳細については、「AWS PrivateLink ガイド」の「インターフェイスエンドポイントを作成」を参照してください。

次のサービス名を使用して、Amazon Cognito ユーザープールのインターフェイスエンドポイントを作成します。

com.amazonaws.region.cognito-idp

次のサービス名を使用して、Amazon Cognito ID プールのインターフェイスエンドポイントを作成します。

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 ガイド」の「Control access to services using endpoint policies」を参照してください。

例: ユーザープールアクションの 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" } ] }
例: ID プールアクションの VPC エンドポイントポリシー

ID プールのカスタムエンドポイントポリシーの例を次に示します。このポリシーは、サービス固有のコンテキストキーを使用して、特定の ID プールから認証されたユーザーへのアクセスを制限します。

{ "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 オペレーションのアイデンティティベースのポリシーを作成する

ID ベースのポリシーは、 AWS プリンシパルにアタッチできる IAM リソースです。IAM 認証オペレーションのアイデンティティベースのポリシーを使用して、VPC エンドポイントを介して Amazon Cognito へのアクセスを制御できます。エンドポイントポリシーとは異なり、アイデンティティベースのポリシーでは、認証されていないオペレーションのアクセス許可を設定することはできません。認証または管理オペレーションには、署名バージョン 4 の承認が必要です。ユーザープールの場合、認証されたオペレーションには、AdminInitiateAuth などのサーバー側の認証リクエストとUpdateUserPool などの管理リクエストが含まれます。ID プールの場合、認証されたオペレーションには 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" } } } ] }
例: ID プール管理オペレーションの ID ベースのポリシー

次のポリシー例では、指定された VPC エンドポイントから ID プール管理アクションへのアクセスを許可します。このポリシーを、ID プールの管理を実行する必要がある 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" } } } ] }