Amazon AppStream 2.0 のサービス間の混乱した代理の防止 - Amazon AppStream 2.0

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

Amazon AppStream 2.0 のサービス間の混乱した代理の防止

混乱した代理問題とは、アクションを実行する許可を持たないエンティティが、より高い特権を持つエンティティにそのアクションの実行を強制するというセキュリティ問題です。AWS では、サービス間でのなりすましにより、混乱した代理問題に対してアカウントリソースが脆弱になることがあります。サービス間でのなりすましは、1 つのサービス (呼び出し元サービス) が、別のサービス (呼び出されたサービス) を呼び出すときに発生します。呼び出し元サービスが呼び出されたサービスを操作し、そのアクセス許可を使用して、呼び出し元サービスが自身で実行するアクセス許可を持っていない方法で、顧客のリソースに対して処理を実行する可能性があります。これを防ぐため、AWS では、アカウント内のリソースへのアクセス権を持っているサービスプリンシパルですべてのサービスのデータを保護するために役立つツールを提供しています。

リソースポリシーで aws:SourceArn および aws:SourceAccount のグローバル条件コンテキストキーを使用して、それらのリソースにアクセスするときにアクセス許可を制限することをお勧めします。以下のガイドラインでは、これらのキーを使用してリソースを保護する場合の推奨事項と要件を詳しく説明しています。

  • クロスサービスのアクセスにリソースを 1 つだけ関連付けたい場合は、aws:SourceArn を使用します。

  • 指定されたアカウント内の任意のリソースを、クロスサービスによる使用に関連付ける場合は、aws:SourceAccount を使用します。

  • aws:SourceArn キーにアカウント ID が含まれていない場合、アクセス許可を制限するためには、これら両方のグローバル条件コンテキストキー (aws:SourceArn および aws:SourceAccount) を使用する必要があります。

  • 両方のグローバル条件コンテキストキーを使用しており、aws:SourceArn の値にアカウント ID が含まれる場合、それらが同じポリシーステートメントで使用されるときは、aws:SourceAccount キーは同じアカウント ID を使用する必要があります。

混乱した代理問題を回避するための最も効果的な方法は、許可するリソースに正確な Amazon リソースネーム (ARN) を使用することです。リソースの完全な ARN が不明な場合は、グローバルコンテキスト条件キー aws:SourceArn で、ARN の不明な部分を示すためにワイルドカード (* など) を使用します。複数のリソースを指定する場合は、ARN でワイルドカードを使用することもできます。例えば、ARN を arn:aws:servicename::region-name::your AWS アカウント ID:* のようにフォーマットできます。

例: AppStream 2.0 サービスロールにおけるサービス間の混乱した代理の防止

AppStream 2.0 では、さまざまなリソース ARN を使用するサービスロールを想定しているため、複雑な条件文になります。AppStream 2.0 リソースの予期しない障害を防ぐため、ワイルドカードリソースタイプを使用することをお勧めします。

aws:SourceAccount 条件付き:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "your AWS アカウント ID" } } } ] }
aws:SourceArn 条件付き:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your AWS アカウント ID}:*" } } } ] }

例: AppStream 2.0 フリートマシンロールにおけるサービス間の混乱した代理の防止

aws:SourceAccount 条件付き:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "your AWS アカウント ID" } } } ] }
aws:SourceArn 条件付き:
注記

複数のフリートで 1 つの IAM ロールを使用する場合は、ワイルドカード (*) 付きの aws:SourceArn グローバルコンテキスト条件キーを使用して、複数の AppStream 2.0 フリートリソースと一致させることをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your AWS アカウント ID}:fleet/{your fleet name}" } } } ] }

例: AppStream 2.0 Elastic Fleets セッションスクリプトの Amazon S3 バケットポリシーにおけるサービス間の混乱した代理の防止

aws:SourceAccount 条件付き:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "s3:GetObject", "Resource": "your session script S3 path", "Condition": { "StringEquals": { "aws:SourceAccount": "your AWS アカウント ID" } } } ] }
aws:SourceArn 条件付き:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "s3:GetObject", "Resource": "your session script S3 path", "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your AWS アカウント ID}:fleet/{your fleet name}" } } } ] }

例: AppStream 2.0 Application の Amazon S3 バケットポリシーにおけるサービス間の混乱した代理の防止

Amazon S3 バケットにデータを保存すると、バケットで混乱した代理問題が発生する可能性があります。これにより、Elastic フリート、App Block、セットアップスクリプト、アプリケーションアイコン、セッションスクリプトなどのデータが悪意のある攻撃者に対して脆弱になる可能性があります。

混乱した代理問題を防ぐため、ELASTIC-FLEET-EXAMPLE-BUCKET の Amazon S3 バケットポリシーで、aws:SourceAccount 条件または aws:SourceArn 条件を指定できます。

以下のリソースポリシーは、以下のいずれかの問題に関する混乱した代理問題を防止する方法を説明しています。

  • AWS アカウント ID の aws:SourceAccount

  • グローバル条件コンテキストキー aws:SourceArn

AppStream 2.0 は現在、アプリケーションアイコンの混乱した代理の防止をサポートしていません。このサービスは VHD ファイルとセットアップスクリプトのみをサポートします。アプリケーションアイコンに条件を追加しようとしても、アイコンはエンドユーザーに表示されません。

次の例では、バケットポリシーは、所有者のアカウントの AppStream 2.0 Elastic フリートリソースにのみ、ELASTIC_FLEET_EXAMPLE_BUCKET へのアクセスを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/vhd-folder/*", "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/scripts/*" ], "Condition": { "StringEquals": { "aws:SourceAccount": "your AWS アカウント ID" } } }, { "Sid": "AllowRetrievalPermissionsToS3AppIconsForAppStream", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/app-icons/*" } ] }

また、aws:SourceArn 条件を使用して、特定リソースへのリソースアクセスを制限できます。

注記

リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合には、グローバルコンテキスト条件キー aws:SourceArn で、ARN の不明な部分を示すためにワイルドカード (*) を使用します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/vhd-folder/*", "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/scripts/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws-partition}:appstream:{your region name}:{your AWS account ID}:app-block/*" } } }, { "Sid": "AllowRetrievalPermissionsToS3AppIconsForAppStream", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/app-icons/*" } ] }

aws:SourceArn および aws:SourceAccount 条件を使用して、特定のリソースおよびアカウントへのリソースアクセスを制限できます。

注記

リソースの完全な ARN が不明な場合や、複数のリソースを指定する場合には、グローバル条件コンテキストキー aws:SourceArn で、ARN の不明な部分を示すためにワイルドカード (*) を使用します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConfusedDeputyPreventionExamplePolicy", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/vhd-folder/*", "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/scripts/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:{aws partition}:appstream:{your region name}:{your AWS account ID}:app-block/*" }, "StringEquals": { "aws:SourceAccount": "your AWS account ID" } } }, { "Sid": "AllowRetrievalPermissionsToS3AppIconsForAppStream", "Effect": "Allow", "Principal": { "Service": "appstream.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ELASTIC-FLEET-EXAMPLE-BUCKET/app-icons/*" } ] }