사용자가 S3 버킷에 파일을 업로드하지만 덮어 쓰거나 삭제하지 않는 방법은 무엇입니까?


19

사용자에 대한 다음 IAM 정책이 있습니다

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1395161912000",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject",
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Sid": "list",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    }
  ]
}

사용자가 파일을 버킷에 업로드 할 수 있지만 덮어 쓰거나 삭제할 수 없도록하는 것이 목표입니다. 백업용입니다. 나는으로 시작 ListBucket하고 PutObject있지만 추가 *작동하지 않았다한다. *사용자가 파일을 업로드 할 수는 없으며 단지 가져옵니다 Access Denied.

내가 시뮬레이터를하려고하면, 그것은 반환 Denied - Implicitly denied (no matching statements found).을 위해 ListBucket내가 암시 것을 허용 한 이후 홀수 보인다.

Cyberduck과 3Hub를 S3 클라이언트로 사용해 보았습니다.

무슨 일이야?

답변:


25

Amazon S3에 대한 Amazon IAM 정책을 만들 때는 서비스 운영 (예 : ListAllMyBuckets ), 버킷 운영 (예 : ListBucket ) 및 객체 운영 (예 : GetObject ) 의 차이점을 알고 있어야합니다 .

특히, Resource정책 사양은 다음 패턴에 따라 적절한 대상 엔티티를 처리해야합니다 (예 : 다양한 Amazon S3 정책 예 참조 ).

  • 서비스 운영- arn:aws:s3:::*
  • 버킷 작업- arn:aws:s3:::<bucket>
  • 객체 조작- arn:aws:s3:::<bucket>/<object>

해결책

Access Denied대한 버킷 수준 리소스를 지정 했으므로 다음과 PutObject같은 객체 수준 리소스 사양이 필요합니다. arn:aws:s3:::<bucket>/*따라서 다음 정책이 샘플 사용 사례에 적용됩니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname/*"
      ]
    }
  ]
}

1
놀랍게도, 그것은 완벽하게 작동했습니다. 감사합니다! 따라서 sid필요하지 않습니까?
Znarkus

1
에 따르면 시드 , 그것은됩니다 당신이 정책 성명에 대한 제공하는 옵션 식별자 , 정책 내에서 고유해야합니다은 . / O (그러나 아래 참조), I는 간결 여기를 제거하는 경향이 W 및 정책을 versionizing 때,하지만, 예를 들어 자동으로 정책을 생성 할 때 귀찮게하지 않습니다 감안할 때 그것은 잘 작동 것 같다 - 그러나, 다음에 따라 : 일부 AWS 서비스 (예 : Amazon SQS 또는 Amazon SNS)에는이 요소 [...]가 필요할 수 있습니다 .
Steffen Opel

3
OP는 "사용자가 파일을 버킷에 업로드 할 수는 있지만 덮어 쓰거나 삭제할 수는 없다"고 말하지만이 정책 PutObject은 객체를 재정의 할 수 있도록 허용합니다. 나는 그것을 분리 할 수있는 방법이 없다고 생각합니다.
Xiong Chiamiov

2
@XiongChiamiov-S3 'PutObject'액션은 실제로 덮어 쓰기를 의미하며, 이는 기본적으로 S3가 작동하는 방식입니다. 실수로 삭제하는 것을 방지해야하는 경우 버전 관리 사용 하여 Amazon S3 버킷에 저장된 모든 객체의 모든 버전 을 보존, 검색 및 복원 할 수 있습니다. -이를 통해 의도하지 않은 사용자 작업과 응용 프로그램 오류쉽게 복구 할 수 있습니다 .
Steffen Opel

4
그렇습니다. 버전 관리를 사용하면 덮어 쓴 객체를 복구 할 수 있습니다 (그러나 객체가 있다는 것을 알아 낸 다음 계속해야합니다). 어쨌든 -1은 질문에 대한 정확한 답변을 제공하지 않기 때문입니다.
Xiong Chiamiov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.