ECS: 소유자가 아닌 오브젝트 사용자에 대한 읽기 전용 버킷 ACL이 업로드된 오브젝트를 다운로드할 수 없음
摘要: 이 기술 자료는 S3 브라우저의 읽기 전용 관점에서 소유자가 아닌 오브젝트 사용자에 대한 버킷 ACL(Access Control List)의 개념을 설명합니다.
症狀
소유자가 아닌 오브젝트 사용자가 버킷 ACL을 사용하여 버킷에 읽기 전용으로 추가되었습니다.
버킷 소유자가 아닌 오브젝트 사용자는 버킷 ACL 생성 전에 오브젝트 버킷 소유자 사용자가 업로드한 오브젝트를 다운로드할 수 없습니다.
문제 흐름은 다음과 같습니다.
- 오브젝트 소유자 사용자가 할당된 상태에서 버킷이 생성되었습니다.
- 일부 파일은 오브젝트 소유자 사용자가 버킷에 업로드했습니다.
- 소유자가 아닌 오브젝트 사용자가 버킷 ACL을 사용하여 버킷에 읽기 전용으로 추가되었습니다.
- 소유자가 아닌 오브젝트 사용자는 버킷에 액세스하려고 시도할 때 새로 업로드된 오브젝트를 나열하고 다운로드할 수 있지만 읽기 전용 버킷 ACL 이전에 업로드된 오브젝트는 다운로드할 수 없습니다. 오브젝트에 대한 사용자 권한이 ECS UI의 구성에 따라 S3 브라우저를 통해 설정되지 않았음을 확인할 수 있습니다.
소유자가 아닌 오브젝트 사용자가 S3 브라우저를 사용하여 오브젝트를 클릭할 때 발생하는 오류는 다음과 같습니다. (액세스 거부: 액세스 거부됨):
다음은 오브젝트 소유자 사용자(a_s3user)와 비소유자 오브젝트 사용자(a_s3test)에 대한 버킷 ACL 설정입니다.
原因
S3 사용 권한은 버킷 또는 오브젝트 수준에서 설정할 수 있습니다. ECS는 적용된 정책 유형에 따라 AWS S3와 동일한 보안 주체를 준수합니다. 버킷 수준 또는 오브젝트 수준에서 허용되는 작업 유형을 결정합니다.
- ECS 버킷 수준에서 READ 및 READ ACL이 부여되면 비버킷 소유자는 버킷의 오브젝트만 나열할 수 있으며 비버킷 소유자는 버킷에서 데이터를 다운로드할 수 없습니다
- 버킷에 오브젝트를 쓸 때는 오브젝트를 쓰는 사용자만 읽기 권한을 갖습니다. 다른 사용자가 오브젝트를 읽을 수 있으려면 소유자가 사용자에게 명시적으로 사용 권한을 부여해야 합니다.
- 비 버킷 소유자에게 권한을 부여하려면 S3 버킷 정책을 사용해야 합니다
할당할 수 있는 ACL 사용 권한은 다음 표에 나와 있습니다. 적용 가능한 권한은 버킷 유형에 따라 다릅니다.
| 증권 시세 표시기 | 사용 권한 | ||
|---|---|---|---|
| 읽기 | 사용자가 버킷의 오브젝트를 나열할 수 있습니다. | ||
| Read ACL | 사용자가 버킷 ACL을 읽을 수 있습니다. | ||
| 쓰기 | 사용자가 버킷에서 모든 오브젝트를 생성하거나 업데이트할 수 있습니다. | ||
| ACL을 씁니다. | 사용자가 버킷에 대한 ACL을 쓸 수 있습니다. | ||
| 실행 | 파일 시스템으로 액세스할 때 실행 권한 설정 - 이 사용 권한은 ECS 오브젝트 프로토콜을 사용하여 오브젝트에 액세스할 때 아무런 영향을 주지 않습니다. | ||
| Full Control | 사용자가 Read, Write, Read ACL 및 Write ACL을 수행할 수 있습니다.
|
||
| Privileged Write | 사용자에게 정상적인 쓰기 권한이 없을 때 사용자가 버킷 또는 오브젝트에 대한 쓰기를 수행할 수 있도록 허용 - CAS 버킷에 필요 | ||
| 삭제 | 사용자가 버킷 및 오브젝트를 삭제할 수 있도록 허용 - CAS 버킷에 필요합니다. | ||
| 없음 | 사용자에게 버킷에 대한 권한이 없습니다. |
AWS는 여러 정책 유형을 지원합니다.
다음 표에는 ACL에서 Amazon S3가 지원하는 권한 집합이 나와 있습니다. 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.htmlUI-> 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