2013-07-19 3 views
13

모든 것을 시도한 후에 특정 버킷에만 액세스 할 수있는 사용자 정책을 생성 할 수있었습니다 (이 게시물을 포함하여 : Is there an S3 policy for limiting access to only see/access one bucket?).특정 사용자에 대한 버킷 목록 제한

문제 : 난 그냥 하나의 버킷까지 버킷의 목록을 제한 할 수 없습니다입니다. 여러 가지 이유로 목록에 지정된 버킷 이외의 버킷을 표시하고 싶지 않습니다.

저는 다양한 정책을 시도했지만 아무 소용이 없습니다. 다음은 작업을 제한하는 것으로까지 작업하고있는 최신 정책 인 JSON입니다. 목록은 표시되지 않습니다.

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:ListAllMyBuckets", 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource": "arn:aws:s3:::*" 
    }, 
    { 
     "Effect": "Deny", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "NotResource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    } 
] 
} 

도움이 될만한 자료가 있습니다. 가능한지 궁금해지기 시작했습니다.

+0

관련 항목 : [한 버킷보기/액세스 전용 액세스를 제한하는 S3 정책이 있습니까?] (https://stackoverflow.com/q/6615168/55075) & [AWS S3의 특정 버킷에만 액세스하도록 사용자에게 제공하는 방법] (https://devops.stackexchange.com/q/1626/3) – kenorb

답변

29

현재 버켓 목록을 제한하여 버킷 하나만 표시하도록 제한 할 수 없습니다.

AWS 콘솔은 사용자가 소유 한 버킷리스트를 얻기 위해 ListAllMyBuckets 행동에 의존하지만, 반환 된리스트는 아마존 자원 이름을 사용하여 (또는 ARN에 의해 ​​제한 될 수 없다 ListAllMyBuckets 허용있어 유일한 ARN은 arn:aws:s3:::*입니다).

이 제한 사항은 공식 AWS 문서에 명확하게 설명되어 있지 않지만 ListAllMyBuckets은 IAM에서 버킷 수준 API 호출 및 관련 ARN이 아닌 서비스 수준 API 호출 (REST API에서 GET 서비스라고도 함)입니다. 정책은 특정 버킷이 아닌 S3 서비스를 나타냅니다. 가능한 해결 방법에 대한

,에 StackOverflow에 this answer를 참조하십시오

+0

답변 해 주셔서 감사합니다. 저는 그 포스트를 보았습니다 - 저는이 부분을 정말로 파고 들었습니다. 우리는 고객의 선택권이 자신의 양동이를 볼 수 없기 때문에 갔다. 그것은 수치 스럽지만 우리의 주된 관심사를 고려할 때 최선의 선택이다. –

+0

[이 답변] (https://stackoverflow.com/a/30961920)에도 매우 유용한 정보가 있습니다. – AndreKR

+0

우리는이 문제도 해결했습니다. 그것은 저에게 이것이 정상적인 것으로 받아 들여지지 않는 것으로 보입니다. 우리는 여러 프로젝트를 운영하고 직원이 S3 섹션으로 이동할 때 하나의 양동이 만보고 싶으면 가능해야합니다. – JeremyTM

3

무료 "S3 브라우저는"(이 내 버전 3-7-5에서 작동) 계정에 대해 "외부 버킷 추가"를 적절한 사용 권한을 사용자에게 허용 , 그들이 알아야 할 것은 양동이의 이름입니다. 이것은 그들로 하여금 그들의 양동이와 내용 (그리고 그 양동이 안에 주어진 능력)을 "볼"수있게하며, 다른 양동이를 보지 못하게합니다.

양동이가 S3 브라우저의 행동을 "좋은 플레이"하려면, 나는 사용자 또는 그룹에 대해 다음 IAM 정책 제안 :

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListBucket", 
     "s3:GetBucketLocation", 
     "s3:GetBucketAcl" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:PutObject", 
     "s3:GetObject", 
     "s3:GetObjectAcl", 
     "s3:DeleteObject" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg/*" 
    } 
    ] 
} 

그것은 작품은 주위의를, 사용자는 필요하면 괜찮아 한 번 해봐야 겠어. 그러나 사용자가 액세스하는 버킷이 많이 바뀌면이 작업은별로 실용적이지 않습니다.

+0

이 답변의 "Add External Bucket"부분은 "S3 Browser"의 진정한 해결책이었습니다. IAM Policy 부분을 복사하지 않도록 조심스럽게 작성하는 것이 좋습니다. 예를 들어 S3ReadOnly Action의 블록을 복사했습니다.) – ThorSummoner

0

내가 여기에 하나의 (또는 목록) 사용자에게 버킷에 대한 액세스를 제한하는 방법을 찾았습니다. 게시물 제목이 모호한 것일 수 있습니까?

어쨌든, 구글의 호의를 가지고, 그래서 그것을 조금 풍부 할 것으로 보인다 :
당신은 그 단계를 따르 일부 사용자 (들)에 양동이에 대한 액세스를 제한해야하는 경우 :


먼저 권한을 부여 할 사용자의 ID를 가져옵니다.
이것은 awscli aws iam list-users
그 ID를 다음과 같이 명령을 사용하여 달성 할 수있다 "AIDAIFKYAC9DNJXM2CRD"또는 "AIDAZ362UEKJCJMFFXCL을"
하십시오, 코멘트는 웹 콘솔에서 사용할 수 있는지.

액세스 권한이 주어져야하는 ID를 얻었 으면 보호 할 버켓에 정책을 지정하십시오. > "속성"탭을 선택 - -> "편집 버킷 정책"을 클릭

이 awscli 사용하여 정책을 적용하려면를 만들> 열기 S3 - -> 열기 버킷
:
은 웹 콘솔이 작업을 수행하려면 정책 내용이있는 파일을 다음 버킷에 넣으세요.
aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json
물론 YOUR_BUCKET_NAME과 파일 경로를 값으로 설정하지만 파일 앞에 // 파일명을 붙여서는 안됩니다. 이름


경고 :이 거부 정책은 사용자가 가질 수있는 "s3 액세스"기본값보다 우선합니다. 즉,이를 통해 자신의 OWN 사용자에 대한 액세스를 거부 할 수 있습니다. 주의해서 사용하십시오!
양동이를 완전히 접근 할 수 없게 만들 수도 있습니다.
호기심에서 벗어났습니다. 액세스 권한을 부여하지 않았고 실제로 액세스 할 수 없었던 루트 사용자를 통해 액세스를 시도했습니다.
지원을 요청하고 희망적으로이 대답을 업데이트해야합니다.

어쨌든 충분히 신중할 것입니다. 여기 예제 정책이 있습니다.
버켓의 이름을 귀하의 것으로, userId를 액세스 권한이있는 것으로 대체하십시오.

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::your-bucket-name", 
     "arn:aws:s3:::your-bucket-name/*" 
     ], 
     "Condition": { 
     "StringNotLike": { 
      "aws:userId": [ 
      "AIDAXAXAXAXAXAXAXAXAX", 
      "AIDAOXOXOXOXOXOOXOXOX", 
      "AIDAXIXIXIXIXIXIXIXIX" 
      ] 
     } 
     } 
    } 
    ] 
} 
더 구체적인 뭔가를

, 또는 대신 사용자의 역할을 사용하려는 경우, 원래 포스터가 사용자 정책에 대해 질문했다

+0

논리가 거꾸로입니다. 선택한 사용자 외에 다른 모든 사용자를 제한합니다. –

+0

@Kevin 정확하게 말씀해 주시겠습니까? 허용 된 것을 제외한 모든 사람을 거부하는 것은 내게 보안을 적용하는 일반적인 방법 인 것 같습니다. 그리고 btw, 당신은 또한 여러 버킷에이 정책을 적용 할 수 있습니다. 나는이 오염 물질에 대해 훨씬 깊이 파고 들지 않았지만, 내가 잘못한 점을 더 자세히 설명해 주었다. – Balmipour

+0

원래의 포스터가 사용자 정책에 대해 질문하고있었습니다. 이것은 특정 사용자에게 부여되는 반면, 다른 사용자는 더 많은 특혜 정책 (또는 정책 없음)을 적용 할 수 있습니다. 일반적인 사용 사례는 가장 높은 신뢰 그룹 외부에서 자격 증명을 공유해야하는 한 명의 사용자 만 제한하려는 경우입니다. 사용자 정책은이를위한 방법입니다. –

0

이 도움이 AWS post explaining in detail how to restrict access to a buckets

희망을 참조하십시오. 이것은 특정 사용자에게 부여되는 반면, 다른 사용자는 더 많은 특혜 정책 (또는 정책 없음)을 적용 할 수 있습니다. 일반적인 사용 사례는 가장 높은 신뢰 그룹 외부에서 자격 증명을 공유해야하는 한 명의 사용자 만 제한하려는 경우입니다. 사용자 정책이이를위한 방법입니다.

+0

게시 주셔서 감사합니다. 어떻게 생겼는지의 예? –

+0

@cale_b 죄송합니다 - 내 의견을 대답으로 표시하지는 않았습니다. 마지막 답변에 대한 의견에 답을하고있었습니다. 따라서 그 맥락에서 더 이해할 수 있습니다. 나는 당신이 받아 들인 대답에 동의합니다, 당신은 볼 수있는 양동이의 목록을 제한 할 수 없다. 그것은 전부 또는 아닙니다. 그러나 버킷 내의 객체 목록을 특정 버킷으로 제한 할 수 있습니다. 그리고 그 예를 원하면 여기에서 그 것을 나눌 수 있습니다. –

관련 문제