하나의 버킷 만보고 액세스하도록 액세스를 제한하는 S3 정책이 있습니까?


123

images.mysite.com내 S3 및 백업 등이 포함 된 다른 버킷 처럼 보이는 간단한 버킷이 있습니다.

images.mysite.com이미지를 업로드하기 위해 특정 사용자가 버킷에 액세스 할 수 있도록 허용하고 싶습니다 . 그러나 나는 그가 다른 버킷을 보지 않기를 바랍니다. 존재한다는 사실조차도.

나는 이것을하는 정책을 만들 수 없었다. 제한적인 것을 시도 할 때마다 버킷 목록이 차단됩니다.


이 질문은 수퍼 유저에 있어야하기 때문에 주제에서 벗어난 질문으로 종료하는 데 투표합니다
Tonny Madsen

여기에서 정책을 생성 할 수 있습니다. awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta


1
버킷의 URL을 공유하지 않는 이유- https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. 이렇게하면 전체 목록을 보지 못하게하고 현재 정책에서 아무것도 변경하지 않습니다.
treecoder

답변:


119

나는 이것을 한동안 시도해 왔고 마침내 작동하는 해결책을 찾았습니다. 수행하는 작업의 종류에 따라 다른 "리소스"를 사용해야합니다. 또한 이전 답변에 누락 된 작업 (예 :)을 포함하고 일부를 DeleteObject제한 (예 PutBucketAcl:)했습니다.

다음 IAM 정책이 현재 저에게 효과적입니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

버킷과 객체에 관한 작업은 서로 다른 arn을 가져야합니다.


9
훌륭한 답변입니다. 감사합니다. s3 : ListAllMyBuckets 권한의 의미는이 정책의 수신자가 모든 (루트) 버킷을 볼 수 있다는 점에 주목할 가치가 있습니다. 직접적인 데이터 공개는 없지만 버킷 이름에 대한 민감도 / 혼란이있을 수 있습니다. 이 특정 권한을 제거하는 것이 가능하며 모든 것이 계속 작동해야합니다 ( "s3cmd ls"등은 대상 버킷을 반환하지 않음).
Mike Repass 2012 년

91
이것은 사용자가 다른 버킷 이름을 보는 것을 방지하지 않습니다!
metdos

2
@metdos 마지막 정책을 제거하여 사용자가 다른 버킷 이름을 보지 못하게 할 수 있습니다.
Hendra Uzia 2014

20
콘솔에서 버킷의 목록을 보려면 (따라서 버킷 액세스를 위해 콘솔을 사용)하기 위해 있어야 부여 ListAllMyBucketsGetBucketLocation대한 모든 (S3 버킷 "arn:aws:s3:::*"보다는 작동 "*"자원에 대한). 이 AWS 블로그 게시물에 언급 된 것처럼 "제외로 현재 특정 버킷을 선택적으로 필터링 할 수 없으므로 사용자는 콘솔 액세스를 위해 모든 버킷을 나열 할 권한이 있어야합니다."
jwadsack 2014-06-25

10
이것은 끔찍한 조언입니다. 위험하고 특히 OP가 원하지 않는 것입니다. 가능한 해결 방법 은 Andreas StankewitzBFar 의 답변을 참조하십시오 .
AndreKR

37

사용 사례 : 클라이언트가 공통 S3 도구를 사용하여 직접 액세스 할 수있는 클라우드 애플리케이션의 클라이언트를위한 백업 공간을 제공합니다. 물론 어떤 클라이언트도 다른 클라이언트가 가지고있는 것을 볼 수 없습니다.

cloudberryman은 "모든 버킷을 나열하거나 나열하지 않을 수 있습니다."라고 설명 했으므로 해결 방법을 찾아야합니다. 배경:

AWS S3 콘솔 또는 S3Fox가 오류 메시지없이 연결되도록 사용자에게 ListAllMyBuckets 권한을 부여해야합니다. 그러나 ListAllMyBuckets는 할당 된 리소스와 관련하여 모든 버킷을 나열합니다 (실제로는 arn : ... ::: * 만 작동 함). 저에게 물어 보면 심각한 버그입니다. Btw. ListBucket은 버킷의 콘텐츠를 나열 할 수있는 권한을 부여하므로 모든 버킷에 대해 ListBucket을 거부해도 나열되지 않습니다.

해결 방법으로 고려한 세 가지 가능성이 있습니다. 마지막을 선택했습니다.

(1) 암호 버킷 이름 (예 : GUID) 사용

장점 : 간편한 설치

단점 : 특히 클라이언트의 경우 관리가 어렵습니다. (수천 명에 달하는 특정 GUID를 찾는다고 상상해보십시오.) 또한 버킷 수 = 백업 서비스를 사용하는 클라이언트 수를 보여줍니다.

(2) 클라이언트 별 폴더와 함께 하나의 버킷 사용

이것이 Amazon이 S3 / IAM 예제에서 특정 사용자 또는 사용자 그룹 만 액세스 할 수있는 공간을 제공하도록 제안하는 방법입니다. 참조 : AWS 예제 IAM 정책

장점 : 설정이 매우 쉬우 며 AWS 아이디어와 함께 사용

단점 : 모든 버킷의 존재를 공개해야하므로 클라이언트가 "홈"버킷을 찾을 수 있습니다. AWS 계정은 버킷 사용 통계를 제공하지만 폴더 사용 통계는 제공하지 않으므로 클라이언트별로 비용을 계산하기가 어렵습니다.

(3) ListAllMyBuckets에 대한 액세스 권한을 부여하지 마십시오.

장점 : 원하는 것을 얻을 수 있습니다. 클라이언트는 다른 클라이언트의 버킷을 볼 수 없습니다.

단점 : 클라이언트는 자신의 버킷을 볼 수 없습니다. S3Browser는 멋진 "cannot do"메시지와 함께 제공되며 버킷 이름을 입력하도록 요청합니다. S3Fox는 루트에 연결할 때 오류 메시지를 표시하지만 버킷 이름이 알려진 경우 클라이언트의 버킷에 대한 직접 탐색을 허용합니다. Amazon S3 콘솔이 전혀 작동하지 않습니다.

이것이 필요에 따라 S3 IAM을 처리하는 데 도움이 되었기를 바랍니다.


1
또한 솔루션 (1)의 경우 버킷과 함께 웹 호스팅을 사용하려면 버킷 이름이 도메인 이름과 일치해야합니다.
Andy Fusniak

31

ListAllMyBuckets권한 을 부여하지 않으면 S3 콘솔에 대한 액세스를 제공 할 수 없습니다.

필자의 경우 (그리고 아마도 미래의 독자 인 여러분도) 수용 가능한 대안은 로그인시 사용자를보고 싶은 버킷으로 직접 리디렉션하는 것입니다.

이를 수행하려면 IAM 로그인 URL에 다음을 추가하십시오. /s3/?bucket=bucket-name

전체 로그인 URL ( your-aliasbucket-name 대체 ) :

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

IAM 정책 ( 버킷 이름 교체 ) :

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

사용자에 대한 버킷 별 권한을 생성하는 방법에 대한 자세한 내용은 다음 블로그를 참조하십시오. http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /


1
이것은 잘 작동합니다. 사용자가 버킷 뷰 외부를 탐색 할 수 없다면 최적 일 것입니다 ....하지만 제가 가져갈 것입니다. 감사합니다 @BFar.
Jamie Popkin

이것은 하나의 정확한 답변이며, 다른 모든 답변은 모든 버킷을 나열합니다. 원래 요청에 따라 숨겨져 야합니다.
Steve Horvath 2019

정확히 내가 필요한 것. 감사.
Di Zhang

20

이 정책을 시도하십시오. 또한 사용자가 선택한 버킷 만 나열 할 수있는 방법이 없음을 고려하십시오. 모든 버킷을 나열하거나 나열하지 않을 수 있습니다.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}

2
잘 작동합니다! 나는 s3:*그것이 나를 위해 작동 하도록 하기 위해 변화 행동을해야 했다. 나도 "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]했지만 필요하지 않을 수도 있습니다.
Michael Yagudaev 2013 년

3
s3 : *는 버킷 삭제를 포함한 모든 작업에 대한 액세스 권한을 부여합니다. 확실히 원하십니까?
Dave Gregory

10

이 질문을 "다른 버킷에 액세스 할 수 없어 보이지 않는 한 버킷에 대한 액세스를 허용 할 수 있습니까?"라고 해석하고 있습니다. 액세스 권한이 부여되지 않은 버킷의 이름을 표시하는 것은 여전히 ​​정보 유출과 동일하기 때문입니다.

그리고 정답은 아니오입니다. 필요한 권한은 사용자가 모든 버킷을 볼 수 있도록 허용하는 ListAllMyBuckets입니다. 이 권한을 남겨두면 콘솔을 사용할 수 없게됩니다.


6

사용자가 다른 버킷에 대한 지식을 구성하지 않고도 특정 버킷에 액세스 할 수 있도록하는 좋은 방법이 있습니다. 아래와 같은 그룹 정책은 사용자가 "bucket a"만 볼 수 있도록 허용합니다. 유일한 문제는 사용자가 주어진 버킷 엔드 포인트에 연결하는 경우에만 버킷에 액세스 할 수 있다는 것입니다. 아래 예에서는 bucket-a.s3.amazonaws.com이됩니다. 버킷에 "인증 된 사용자"가 허용되어야 할 수도 있습니다.

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

이 방법은 Mac OS / X의 Cyberduck에서 s3cmd 패키지를 사용하여 테스트되었습니다.

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2

여전히 모든 버킷 목록을 볼 수 있습니다. 작동하지 않음 :(
Rishikesh Chandra

5

답변이 확인되지 않은 이유가 궁금하십니까?

위의 솔루션에서 각 정책 설명을 분석해 보겠습니다.

이 정책 성명 에서이 벅 자체 버킷의 내용에 적용하지만. 이것은 아마 하지 당신이 양동이에 무엇을 볼 수 없기 때문에 질문을 위해 무엇을 요구.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

에서 파생 된 이 두 문 정책 은 ( arn:aws:s3:::your_bucket_here/) readonly 에서 버킷에 대한 읽기 전용 액세스 권한을 부여 하지만 버킷 콘텐츠 ( arn:aws:s3:::your_bucket_here/*) 에 대한 CRUD 작업은 계속 허용 합니다.

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

그러나 정책에는 사용자가 엔드 포인트에서 모든 버킷을 볼 수 있도록 허용하는 아래 설명이 포함되어 있습니다. 이것은 아마도 질문이 요구 한 것이 아닐 것 입니다.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

그러나 위의 내용은 S3 스토어를 브라우저하는 클라이언트를 사용하는 경우 매우 유용합니다. 클라이언트가 버킷이 아닌 저장소에 직접 액세스하는 경우 루트의 버킷 목록에 액세스해야합니다.


3

아마도 가장 간단한 사용 사례 일 것입니다.

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

1
AWS 응답 :This policy contains the following error: The policy must contain a valid version string
MaximeBernard 2015

맞습니다-내 응답을 수정했습니다.-> <br/> 여기에 가능한 값은 <br/> * 2012-10-17 * 및 2008-10-17 두 가지뿐입니다 . <br/> 추가 참조는 여기에서 찾을 수 있습니다. <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn

(listing included)사용자가 들어갈 수있는 버킷 만 나열하는 방법에 대한 아이디어 가 있습니까? 지금까지 (그리고 다른 모든 답변에 따르면) AWS는 그렇게 할 수 없을 것 같습니다.
MaximeBernard 2015

3

AWS Organizations를 사용하여이 작업을 쉽게 수행 할 수있는 방법이나 해결 방법이 있습니다. AWS 조직에서는 여러 사용자 계정을 가질 수 있습니다. 기본 계정은 여러 개의 AWS 계정 (Sub)을 가질 수 있으며 해당 리소스 만 표시되는 AWS 계정에 추가되는 서비스 (s3 / EC2 / *)는 무엇입니까?

참조하시기 바랍니다 https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/을

내 계정 페이지의 조직


3

이 솔루션을 찾았습니다.
AWS FLOW :
AWS 흐름

버킷 정책 :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

IAM 정책 :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-user -–user-name USER-NAME --profile = ExampleProfile

aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile

출처 : https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

추신 : 버킷 정책에주의하십시오. 권한없이 외출 할 수 있습니다.


2

위에서 잘 논의했듯이 콘솔에 하나의 버킷 만 나열하는 것은 불가능합니다. 그러나 S3 버킷의 액세스 권한이 IAM에 연결되어있는 경우 버킷에 대한 URL을 사용할 수 있으면 IAM이 버킷에 직접 액세스 할 수 있습니다. S3 버킷 URL은 다음과 같습니다.

https://s3.console.aws.amazon.com/s3/buckets/BucketName

여기서 BucketName은 IAM이 액세스 할 수있는 버킷의 이름입니다.


1
2018 년에도 이것이 가능한 유일한 해결책이라고 생각합니다.
Saurabh

1

나는 다음과 같은 일을 할 수 있었다. 다른 버킷을 나열하면 액세스 거부 메시지가 나타납니다. 그러나 경로로 설정된 버킷 이름으로 연결하면 원하는 버킷을 여전히 볼 수 있습니다.

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

이 연결을 테스트하기 위해 Cyberduck을 사용하고있었습니다.


1

s3:ListAllMyBuckets특정 버킷 에 대한 작업 을 제한 할 수는 없지만 해결 방법은 특정 버킷에 대한 콘솔 URL을 보낼 수 있습니다.

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

출처 : S3 콘솔에서 S3 버킷 목록 제한

그렇게하려면 주어진 사용자 또는 그룹에 대해 다음 정책 문서를 지정해야합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

경우 my-bucket-1와는 my-bucket-2읽기 및 쓰기 액세스 권한을 부여하는 당신의 버킷입니다.

관련 :


1

이 정책을 시도하십시오. 사용자는 버킷을 나열 할 수 없으며 허용 된 버킷에 대한 직접 링크를 사용해야합니다.

예 : s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}

1

위에서 설명한 것과 유사합니다.

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

그러나 여기에 빠진 부분이 있습니다. S3-> Home을 통해 버킷에 액세스 할 수는 없지만 직접 링크를 통해 원하는 버킷에만 액세스 할 수 있습니다.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

다음 게시물에서 자세한 정보를 찾을 수 있습니다.

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/


0

솔루션은 저에게 효과적이었습니다. 특정 버킷 my-s3-bucket 의 특정 사용자 my_iam_user 에게 액세스 권한을 부여하는 정책이 필요했습니다 .

이 정책은 내 사용자가 특정 s3 버킷에 파일을 나열, 삭제, 가져올 수 있도록 허용합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}

0

나는 이것으로 해결 된 비슷한 요구를 추가합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}

0

다른 사용자로부터 버킷의 내용을 숨기기 위해 다음 항목을 사용합니다. 이렇게하면 다른 버킷 (ListAllMyBuckets 사용 안 함)을 숨기는 데 도움이 될뿐만 아니라 하나의 버킷을 만들 때 동일한 버킷의 폴더도 하위 폴더가 IAM 사용자 / 하위 폴더에 적절한 권한을 할당하도록 할 수 있습니다.

다음 정책이 IAM 그룹에 적용되고 모든 사용자가이 그룹에 있습니다. aws:userid버킷에서 동일한 이름의 하위 폴더 를 가져와 만들어야합니다.

UserID를 가져올 수 있습니다. aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}

0

우리가 생각 해낸 멋진 간단한 해결책은 사용자가 루트 디렉토리에 로그인하는 것을 차단하는 것입니다. 따라서 원하는 폴더로 설정된 원격 경로로 로그인해야합니다.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}

0

아니요, 현재는 사용자가 루트 또는 다른 곳에서 선택적 버킷을 보도록 제한 할 수 없습니다. 지금은 3 가지 옵션 만 있습니다.

클라이언트에게 버킷 이름을 명시 적으로 사용하도록 요청했습니다.



-1

이것은 나를 위해 완벽하게 작동했습니다. 사용자는 파일 목록을 업로드, 다운로드 및 가져올 수 있지만 다른 버킷의 파일은 볼 수 없습니다.

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      

-2

Deny액세스하지 않으려는 버킷에 대한 절을 추가하십시오 . 여전히 나열 될 수 있지만 그 안에있는 콘텐츠에 액세스 할 수 없습니다.

{
    "버전": "2012-10-17",
    "문": [
        {
            "효과": "허용",
            "액션": "s3 : *",
            "자원": "*"
        },
        {
            "효과": "거부",
            "액션": "s3 : *",
            "자원": [
                "arn : aws : s3 ::: bucket-name",
                "arn : aws : s3 ::: bucket-name / *"
            ]
        }
    ]
}

1
리소스에 대한 액세스 권한을 명시 적으로 부여해야합니다. 기본적으로 모든 리소스에 대한 액세스 권한을 부여하면 비공개로 유지하려는 리소스를 실수로 생략 할 수 있습니다. 또한 모든 S3 작업에 대한 액세스 권한을 부여하면 사용자가 리소스를 공개하거나 정적 호스팅을 설정하거나 기타 유해한 작업을 수행 할 수 있습니다.
Ondrej Galbavý
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.