AWS CLI를 사용하여 Amazon S3에서 다운로드 할 때 액세스 거부가 발생하는 원인은 무엇입니까?


57

나는 여기서 내가 잃어버린 것을 알아 내려고 시도하는 AWS에서 정말로 불타고 있습니다. IAM 사용자가 파일을 완전히 공개하지 않고도 S3 버킷에서 파일을 다운로드 할 수 있도록 만들고 싶지만 액세스가 거부되었습니다. 누군가가 벗어난 것을 발견 할 수 있다면 나는 스토킹됩니다.

내가 지금까지 한 일 :

  • 예를 들어 my-user라는 사용자를 작성했습니다.
  • 사용자를 위해 생성 된 액세스 키를 EC2 인스턴스의 ~ / .aws에 넣습니다.
  • 내 사용자에게 액세스 권한을 부여 할 버킷 정책을 만들었습니다.
  • 명령을 실행 aws s3 cp --profile my-user s3://my-bucket/thing.zip .

버킷 정책 :

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

결과는 A client error (AccessDenied) occurred: Access Denied동일한 명령과 기본 (루트 계정?) 액세스 키를 사용하여 다운로드 할 수 있습니다.

사용자 정책을 추가하려고했습니다. 왜 필요한지 모르겠지만 아프지 않을 것이라고 생각했기 때문에 이것을 내 사용자에게 첨부했습니다.

{
  "Statement": [
    {
      "Sid": "Stmt1384889624746",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

같은 결과입니다.

답변:


39

나는 이것으로도 어려움을 겪고 있었지만 https://stackoverflow.com/a/17162973/1750869 에서이 문제를 해결하는 데 도움이 되는 답변을 찾았 습니다. 아래 답변을 다시 게시하십시오.


모든 사람에게 권한을 열 필요는 없습니다. IAM 사용자를 사용하여 한 계정의 버킷에서 다른 계정으로 버킷을 복사하려면 소스 및 대상에서 아래 버킷 정책을 사용하십시오.

복사 할 버킷 – SourceBucket

복사 할 버킷 – DestinationBucket

소스 AWS 계정 ID-XXXX–XXXX-XXXX

소스 IAM 사용자-src–iam-user

아래 정책은 – IAM 사용자-XXXX–XXXX-XXXX : src–iam-user는 SourceBucket / * 및 s3 : ListBucket 및 s3 : PutObject 권한에 DestinationBucket / *에 대한 s3 : ListBucket 및 s3 : GetObject 권한이 있음을 의미합니다.

SourceBucket에서 정책은 다음과 같아야합니다.

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

DestinationBucket에서 정책은 다음과 같아야합니다.

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

실행할 명령은 s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


1
오 마이 갓, 당신은 나의 영웅입니다. 버킷 수준에서 ListBucket 권한이 누락되었습니다. 나는 여전히 객체를 cp하기 위해 버킷을 ls 해야하는 이유를 모르겠지만 괜찮습니다. 어쩌면 aws 명령을 사용하는 것이 어색한 것일까 요?
Josh Gagnon

예, 꽤 이상합니다. s3 : * (단, 안전하지 않을 수도 있음)의 단일 정책을 갖는 것이 위생 테스트에 충분하다고 생각할 것입니다.
Sergio

fml, 해당 ListBucket 권한으로 2 일이 소요되었습니다. 좋은 캐치
chaqke

많은 시간을 보냈습니다. 이것은 필요한 답변이었습니다. ListBucket-버킷 이름, GetObject-버킷 이름 / *
rsmoorthy

12

같은 문제에 직면했을 때 AWS가 서버 측 암호화를 활성화해야한다는 것이 밝혀졌습니다. 따라서 다음 명령이 성공적으로 작동했습니다.

aws s3 cp test.txt s3://my-s3-bucket --sse AES256

3
감사! 제 경우 --sse aws:kms에는 버킷 "default"를 사용하는 것이 었 습니다.
Michael Yoo

기본이 아닌 KMS 키를 사용하는 경우이 키도 전달해야합니다. --sse-kms-key-id 0123-abc-etc 그러나 확실하지 않은 부분은 자체 KMS 키를 사용하려면 IAM 권한이 있어야합니다. 그렇지 않으면 kms:GenerateDataKey액세스가 거부됩니다.
digarok

문제는 다운로드에 관한 것입니다. 암호화 된 S3에 업로드하므로 키가 필요합니다.
Ilhicas

4

James가 언급 한 '인증 된 모든 AWS 사용자'옵션은 권장하지 않습니다.

이렇게하면 IAM 사용자뿐만 아니라 모든 AWS 계정이 해당 버킷에 대한 ACLS를 나열 / 삭제 / 수정할 수있는 버킷 수준 ACL이 추가됩니다.

즉, aws 계정을 가진 사람을위한 공개 읽기 / 쓰기입니다.


이것을 테스트 했습니까? AWS 계정은 실제로 내 조직에 속한 모든 조직, 즉 사용자, EC2 인스턴스, IAM 역할을 의미하지만 다른 계정의 사람은 아니라는 인상을 받았습니다. 내가 틀렸을 수 있으며, 기여한 내용을 편집하고 버킷 인 경우 신속하게 감사합니다. 감사.
제임스 던 모어

1
예. S3 ACL의 "인증 된 사용자"권한 부여자는 모든 AWS 계정을 의미합니다. 서명 된 요청을 시행하지만 더 이상은 없습니다. 참조 : link
Andrew

3

S3 콘솔 (web ui)에서 버킷을 선택하고 권한 탭에서 "Any Authenticated AWS User"를 선택하고 모든 상자를 발권했습니다.

업데이트 : 의견에서 지적했듯이 "인증 된 모든 AWS 사용자"는 계정의 사용자뿐만 아니라 모든 AWS 인증 사용자이므로 신중하게 사용하십시오.


나는 그것이 당신을위한 정책을 만들고 있다고 상상합니다. 모든 상자를 선택하면 ListBucket 등이 표시됩니다.
Josh Gagnon

나는 그것이 확실하다-나는 단지 정책을 작성하는 것이 고통 스러울 수 있다는 것을 알고있다. 그 진드기 상자는 당신에게 조금 더 그러나 좋은 빠른 해결책을 줄지도 모른다
James Dunmore

2

IAM 정책이 올바르게 설정되어 있어도 An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied자격 증명의 MFA (Multi-Factor Authentication) 요구 사항으로 인한 오류가 계속 발생할 수 있습니다 . AWS 콘솔에 이미 로그인 한 경우 자격 증명이 제대로 작동하고 aws cli의 권한 거부 오류 메시지가 특히 도움이되지 않기 때문에 이러한 기능을 사용할 수 있습니다.

aws cli로 MFA를 설정하는 방법에 대한 지침이 이미 있습니다.

기본적으로 MFA 장치의 주소를 가져와 장치에서 코드와 함께 보내 임시 토큰을 가져와야합니다.


내 하루를 구했어!
shintaroid

야스, 그 이유야! AWS가 출력에이 이유를 표시하지 않은 이유는 무엇입니까?
tommy.qichang

0

방금 webUI로 이동하여 버킷을 클릭 한 다음 권한으로 이동 한 다음 정책으로 이동했습니다. 열었을 때 삭제를 클릭했습니다. 나는 그것이 구성이라고 생각하기 때문에 이것을했다.

메인 s3 페이지로 돌아가서 버킷을 클릭하고 삭제하려고 시도했지만 작동했습니다.

내가 aws-cli로 그것을했을 때조차도

$ aws s3 rb s3://bucket-name --force  

어쨌든, 그것은 나를 위해 일한 것입니다. 권한 정책으로 인해 버킷을 삭제하지 못했습니다.


0

일단 실행하려고하면이 오류가 발생합니다.

aws s3 cp s3://[bucketName]/[fileName] .

권한이없는 폴더에 어리석은 일이지만 이동하기 전에 폴더의 소유자인지 확인하십시오!


0

u가 유효하지 않은 리소스 또는 객체 이름을 삽입 할 때 문제가 발생합니다 .boto3과 동일한 문제가 발생했습니다 (제 경우에는 버킷 이름이 잘못되었습니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.