ECS:所有者以外のオブジェクト ユーザーの読み取り専用バケットACLがアップロードされたオブジェクトをダウンロードできない
摘要: このナレッジベースでは、S3ブラウザーの読み取り専用の観点から、所有者以外のオブジェクト ユーザーのバケット アクセス制御リスト(ACL)の概念について説明します。
症狀
バケットACLを使用して、所有者以外のオブジェクト ユーザーがバケットに読み取り専用として追加されました。
バケット以外の所有者であるオブジェクト ユーザーは、バケットACLの作成前にオブジェクト バケット所有者ユーザーによってアップロードされたオブジェクトをダウンロードできません。
問題の流れは次のとおりです。
- オブジェクト所有者ユーザーが割り当てられたバケットが作成されました。
- 一部のファイルは、オブジェクト所有者ユーザーによってバケットにアップロードされました。
- バケットACLを使用して、所有者以外のオブジェクト ユーザーがバケットに読み取り専用として追加されました。
- バケットにアクセスしようとすると、所有者以外のオブジェクト ユーザーは、新しくアップロードされたオブジェクトを一覧表示してダウンロードできますが、読み取り専用バケットACLの前にアップロードされたオブジェクトをダウンロードすることはできません。オブジェクトに対するユーザー権限が、ECS UIの構成に従ってS3ブラウザーに設定されていないことが分かります。
非所有者オブジェクト ユーザーがS3ブラウザーを使用してオブジェクトをクリックすると、次のようなエラーが発生します。(アクセス拒否: アクセスが拒否されました):
オブジェクト所有者ユーザー(a_s3user)と非所有者オブジェクト ユーザー(a_s3test)のバケットACL設定は次のとおりです。
原因
S3権限は、バケット レベルまたはオブジェクト レベルで設定できます。適用されるポリシーのタイプに応じて、ECSはAWS S3と同じ原則に従います。これにより、バケット レベルまたはオブジェクト レベルで許可される操作のタイプが決まります。
- ECSバケット レベルでREADおよびREAD ACLが付与されている場合、非バケット所有者はバケット内のオブジェクトの一覧表示のみを行います。非バケット所有者はバケットからデータをダウンロードできません
- バケットにオブジェクトを書き込む場合、オブジェクトを書き込んだユーザーのみが読み取り権限を持ちます。他のユーザーがオブジェクトを読み取るには、所有者がユーザーに明示的にアクセス許可を付与する必要があります。
- バケット以外の所有者に権限を付与するには、S3バケット ポリシーを使用する必要があります
次の表に、割り当て可能なACL権限を示します。適用可能な権限は、バケットのタイプによって異なります。
| ACLの | アクセス権 | ||
|---|---|---|---|
| 読み取り | ユーザーはバケット内のオブジェクトを一覧表示できます | ||
| ACLの読み取り | ユーザーはバケットACLを読み取ることができます | ||
| 書き込み | ユーザーはバケット内の任意のオブジェクトを作成またはアップデートできます | ||
| ACLを書き込みます。 | ユーザーはバケットのACLを書き込むことができます | ||
| [Execute] | ファイル システムとしてアクセスされた場合の実行権限を設定します。この権限は、ECSオブジェクト プロトコルを使用してオブジェクトにアクセスする場合には無効です。 | ||
| フル コントロール | ユーザーに読み取り、書き込み、ACLの読み取り、ACLの書き込みを許可します。
|
||
| 特権書き込み | ユーザーが通常の書き込み権限を持っていない場合に、ユーザーがバケットまたはオブジェクトへの書き込みを実行できるようにします(CASバケットに必要) | ||
| 削除 | ユーザーはバケットとオブジェクトを削除できます - CASバケットに必要です | ||
| なし | ユーザーにはバケットに対する権限がありません。 |
AWSは 複数のポリシー タイプをサポートしています。
次の表に、Amazon S3 が ACL でサポートするアクセス許可のセットを示します。ACL権限のセットは、オブジェクトACLとバケットACLで同じです。ただし、コンテキスト(バケットACLまたはオブジェクトACL)に応じて、これらのACL権限は特定のバケットまたはオブジェクト操作の権限を付与します。次の表に、権限のリストと、オブジェクトとバケットのコンテキストにおけるその意味を示します。
| アクセス権 | バケットに対して付与された場合 | オブジェクトに対して付与された場合 |
|---|---|---|
READ |
権限付与対象ユーザーがバケット内のオブジェクトを一覧表示できるようにします | 権限付与対象ユーザーがオブジェクト データとそのメタデータを読み取ることを許可 |
WRITE |
権限付与対象者は、バケット内のすべてのオブジェクトの作成、上書き、削除を行えます | 該当なし |
READ_ACP |
権限付与対象者にバケットACLの読み取りを許可します | 権限付与対象者にオブジェクトACLの読み取りを許可 |
WRITE_ACP |
権限付与対象者は、該当するバケットのACLを書き込むことができます | 権限付与対象ユーザーが該当オブジェクトのACLを書き込める |
FULL_CONTROL |
バケットに対する読み取り、書き込み、READ_ACP、WRITE_ACP権限を受領者に許可します | オブジェクトに対する読み取り、READ_ACP、WRITE_ACP権限を受取人に許可します。 |
Amazon S3ドキュメント
次の表は、各ACL権限が対応するアクセスポリシー権限にどのようにマッピングされるかを示しています。ご覧のとおり、アクセス ポリシーでは、ACLよりも多くの権限が許可されます。ACLは主に、ファイル システムの権限と同様に、基本的な読み取り/書き込み権限を付与するために使用します。ACL を使用するタイミングの詳細については、「使用可能なアクセス ポリシー オプションの使用に関するガイドライン」を参照してください。
| ACL権限 | バケットに対してACL権限が付与されている場合の対応するアクセス ポリシー権限 | オブジェクトに対してACL権限が付与されている場合に対応するアクセス ポリシー権限 |
|---|---|---|
READ |
s3:ListBucket、 s3:ListBucketVersionsと s3:ListBucketMultipartUploads |
s3:GetObject、 s3:GetObjectVersionと s3:GetObjectTorrent |
WRITE |
また、被付与者がバケット所有者の場合、 |
該当なし |
READ_ACP |
s3:GetBucketAcl |
s3:GetObjectAcl と s3:GetObjectVersionAcl |
WRITE_ACP |
s3:PutBucketAcl |
s3:PutObjectAcl と s3:PutObjectVersionAcl |
FULL_CONTROL |
付与と同等 READ、 WRITE、 READ_ACPと WRITE_ACP ACL権限:このACL権限は、対応するアクセス ポリシー権限の組み合わせにマッピングされます。 |
付与と同等 READ、 READ_ACPと WRITE_ACP ACL権限。したがって、このACL権限は、対応するアクセス ポリシー権限の組み合わせにマッピングされます。 |
解析度
オプション1:
『 ECSデータ アクセス ガイド』バケット ポリシーの使用方法を参照してください。すべてのアクションを許可するかまったく許可しないACLとは異なり、アクセス ポリシーは、特定のユーザーまたはすべてのユーザーに、特定のアクションに対する条件付きで詳細な権限を提供します。ポリシー条件を使用して、条件に一致するオブジェクトの範囲に権限を割り当てることができます。これを使用して、新しくアップロードされたオブジェクトに権限を自動的に割り当てることができます。
リファレンスAWS S3:
https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html
https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html
https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations.html
UI-> Manage->Bucket-> Edit bucket policyで、ポリシー エディターに次のように入力します。
{
"Version": "2012-10-17",
"Id": "Policy1593674317613",
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Resource": "bucket_name/*",
"Effect": "Allow",
"Principal": "read-only_user",
"Sid": "Stmt1593673962638"
}
]
} ここで 、アクション: 「S3:GetObject」は、オブジェクトのダウンロードを許可するアクションです。
ここで 、効果: "Allow"
Where Resource": 「bucket_name/*」はバケット名です。
Where Principal": 「read-only_user」は、バケット所有者以外のユーザーです。
オプション2:
オブジェクト所有者でS3ブラウザーを使用して、読み取り専用バケットACLの前にアップロードされたオブジェクトの認証済みユーザーの権限を変更し、所有者以外のオブジェクト ユーザーがオブジェクトをダウンロードできるようにします。
其他資訊
オブジェクト所有者を介してオブジェクトをアップロードする際に問題が発生し、書き込みアクセス権を持つ認証済みユーザーに権限が適用されない場合は、ナレッジベース記事520711