View a markdown version of this page

VPC 条件キーを使用してフェデレーティッドアクセスをコントロールする - AWS Identity and Access Management

VPC 条件キーを使用してフェデレーティッドアクセスをコントロールする

フェデレーションユーザーは、AssumeRoleWithSAML または AssumeRoleWithWebIdentity を使用して、VPC エンドポイント経由でロールを引き受けることができます。その場合は、ロールの信頼ポリシーまたはリソースコントロールポリシー (RCP) で VPC 固有の条件キーを使用して、これらのリクエストの発信元を制限できます。これにより、信頼ポリシーのアイデンティティレベルのコントロールに加えて、ネットワークレベルの境界が提供されます。

フェデレーティッドリクエストに対する VPC 条件キーの仕組み

リクエストコンテキストで使用できる条件キーは、フェデレーティッドリクエストのネットワークパスによって異なります。

ネットワークパス別の VPC 条件キーの可用性

条件キー

VPC エンドポイント経由

パブリックインターネット経由

[Description] (説明)

aws:SourceVpc

はい

いいえ

リクエストが通過する VPC ID

aws:SourceVpcArn

はい

いいえ

リクエストが通過する VPC の ARN

aws:SourceVpce

はい

いいえ

リクエストが通過する VPC エンドポイント ID

aws:VpcSourceIp

はい

いいえ

VPC 内の発信者のプライベート IP アドレス

aws:SourceIp

いいえ

はい

発信者のパブリック IP アドレス

信頼ポリシーが Allow ステートメントで aws:SourceVpcaws:SourceVpcArn、または aws:SourceVpce を使用していて、リクエストが VPC エンドポイントを通過してきていない場合、条件は一致せず、AWS はリクエストを黙示的に拒否します。これにより、フェデレーティッドリクエストが成功するためには、VPC エンドポイントを通過することが実質的に必要になります。

重要

VPC エンドポイントを介して行われたリクエストでは、aws:SourceIp は入力されません。代わりに、IP ベースの制限には aws:VpcSourceIp を使用します。

信頼ポリシーでは、aws:SourceVpc の代わりに aws:SourceVpcArn を使用することをお勧めします。VPC ID はリージョンごとに一意ですが、グローバルに一意ではありません。一方、aws:SourceVpcArn にはリージョンとアカウントが含まれており、VPC をグローバルに一意に識別できます。

注記

次の OIDC 例のオーディエンス (aud) 値は、Amazon EKS のデフォルトである sts.amazonaws.com を使用します。他の OIDC プロバイダーでは、これをアプリケーション用に設定されたオーディエンス値 (クライアント ID やアプリケーション URI など) に置き換えます。

例: OIDC フェデレーションを特定の VPC に制限する

次の信頼ポリシーは、リクエストが VPC エンドポイントを介して特定の VPC から発信された場合にのみ、OIDC プロバイダーがロールを引き受けることを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOIDCFromVpc", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/idp.example.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "idp.example.com:aud": "sts.amazonaws.com", "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" } } } ] }

AWS は、aws:SourceVpcArn 条件が一致しないため、指定された VPC の外部からのリクエストを黙示的に拒否します。明示的な拒否ステートメントは必要ありません。

例: SAML フェデレーションを特定の VPC エンドポイントに制限する

次の信頼ポリシーは、リクエストが特定の VPC エンドポイントを通過してくる場合にのみ、SAML プロバイダーがロールを引き受けることを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSAMLFromVpce", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:saml-provider/ExampleProvider" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml", "aws:SourceVpce": "vpce-0abcdef1234567890" } } } ] }

aws:SourceVpc の代わりに aws:SourceVpce を使用すると、同じ VPC に複数の VPC エンドポイントがあり、特定のエンドポイントへのアクセスを制限したい場合に、より詳細なコントロールが可能になります。

例: VPC 内のプライベート IP 範囲による OIDC フェデレーションの制限

次の信頼ポリシーは、フェデレーションを VPC 内の特定のサブネットから発信されるリクエストに制限します。VPC エンドポイントを介して行われたリクエストに対する IP ベースの制限には、aws:VpcSourceIp を使用します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOIDCFromSubnet", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/idp.example.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "idp.example.com:aud": "sts.amazonaws.com", "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" }, "IpAddress": { "aws:VpcSourceIp": "10.0.1.0/24" } } } ] }
重要

VPC エンドポイントを介したリクエストには、プライベート IP 範囲とともに aws:SourceIp を使用しないでください。aws:SourceIp キーは VPC エンドポイントリクエストでは使用できません。代わりに aws:VpcSourceIp を使用します。

例: SAML フェデレーションを複数の VPC に制限する

次の信頼ポリシーは、SAML プロバイダーが複数の VPC のいずれかからロールを引き受けることを許可します。これは、同じロールへのフェデレーティッドアクセスを必要とする異なる環境またはリージョン全体で複数の VPC がある場合に便利です。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSAMLFromMultipleVpcs", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:saml-provider/ExampleProvider" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml", "aws:SourceVpcArn": [ "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111aaa11", "arn:aws:ec2:us-east-1:111122223333:vpc/vpc-222bbb22" ] } } } ] }

例: VPC とプロバイダー固有の条件を組み合わせる

VPC 条件キーをオーディエンス (aud) やサブジェクト (sub) などのプロバイダー固有の条件と組み合わせて、きめ細かなアクセスコントロールを行うことができます。次の信頼ポリシーは、ロールの引き受けを特定のフェデレーションユーザーに制限し、リクエストが特定の VPC から発信されることを必要とします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOIDCUserFromVpc", "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/idp.example.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "idp.example.com:aud": "sts.amazonaws.com", "idp.example.com:sub": "user123", "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" } } } ] }

これは、アイデンティティレベルのコントロール (特定のフェデレーションユーザーに制限) とネットワークレベルのコントロール (特定の VPC に制限) を組み合わせて、多層防御を提供します。

例: RCP を使用して、特定の VPC へのフェデレーティッドアクセスを制限する

次のリソースコントロールポリシー (RCP) は、特定の VPC から発信されない限り、AssumeRoleWithSAML および AssumeRoleWithWebIdentity リクエストを拒否します。ロールごとに適用される信頼ポリシーとは異なり、リソースコントロールポリシー (RCP) はターゲットアカウントのすべてのロール全体に適用されます。これにより、一元化されたネットワーク境界が提供されます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyFederatedAccessOutsideVpc", "Effect": "Deny", "Principal": "*", "Action": [ "sts:AssumeRoleWithWebIdentity", "sts:AssumeRoleWithSAML" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:SourceVpcArn": "arn:aws:ec2:us-west-2:111122223333:vpc/vpc-111bbb22" }, "Null": { "aws:SourceVpcArn": "false" } } } ] }

Null 条件により、aws:SourceVpcArn がリクエストコンテキストに存在する (つまり、リクエストが VPC エンドポイントを通過してきたが、間違った VPC からであった) 場合にのみ拒否が適用されます。これがないと、パブリックインターネット経由のリクエスト (aws:SourceVpcArn が存在しない場合) も StringNotEquals によって拒否されます。Null チェックを削除すると、パブリックインターネット経由のリクエストを含め、VPC エンドポイントを経由しないリクエストにも拒否が適用されます。本番環境で Null チェックを削除する前に、徹底的にテストすることをお勧めします。