AWS CLI를 사용하여 Amazon S3에서 다운로드 할 때 액세스 거부가 발생하는 원인은 무엇입니까? 만들고 싶지만 액세스가 거부되었습니다. 누군가가

나는 여기서 내가 잃어버린 것을 알아 내려고 시도하는 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/*"
    }
  ]
}

같은 결과입니다.



답변

나는 이것으로도 어려움을 겪고 있었지만 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


답변

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

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

답변

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

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

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


답변

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

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


답변

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

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

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


답변

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

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

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

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

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


답변

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

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

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