翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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/*" } ] }