2017-10-20 5 views
2

s3 버킷을 간단한 웹 호스트로 사용하려고하지만 필요한 보안 컨트롤을 레이어링 할 수있는 리버스 프록시 뒤에 배치하려고합니다.AWS 리버스 프록시 용 버킷 정책

s3 웹 액세스를 제한하고자하는 역방향 프록시와 관련된 IP 주소가 있습니다. 버킷 정책에서 IP 기반 제한을 적용 할 경우 계정에서 관리 상호 작용을 차단하는 것이 매우 어려워 보입니다.

콘솔/IAM 사용자/페더레이션 역할을 통해 계정 내에서 액세스를 방해하지 않고 리버스 프록시와 관련된 IP에 대해서만 s3 사이트에 대한 http 액세스를 허용하고 싶습니다.

웹 액세스를 활성화하는 데 필요한 AWS 설명서에이 정책 설명이 필요하다는 것을 보여주기 때문에 시작에 포함 시켰습니다.

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     } 
    ] 
} 

그런 다음 웹 트래픽을 특정 IP 집합으로 제한하여이 문을 추가했습니다.

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     }, 
     { 
      "Sid": "DenyNonProxyWebAccess", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::mybucket" 
       ], 
      "Condition": { 
       "NotIpAddress": { 
        "aws:SourceIp": [ 
         "99.99.99.1/32", 
         "99.99.99.2/32", 
         "99.99.99.3/32", 
         "99.99.99.4/32", 
         "99.99.99.5/32" 
        ] 
       } 
      } 
     } 
    ] 
} 

이 거부 정책은 IAM 사용자와 내 계정 내부에서 액세스 할 수있는 나의 능력을 차단 의도하지 않은 결과를 가지고 또는 연합의 역할을 가정, 그래서 명시 적으로 그 자원을 허용 추가했습니다. 가능하다면 담요에 "계좌"를 허용하고 싶습니다. 그로 인해이 정책이 나에게 남을뿐입니다. 그리고 나는 그것을 어떻게하면 좋을지 모르는 것처럼 보입니다. 내 사용자로 관리하거나 프록시에서 웹 콘텐츠에 액세스 할 수없는 것 같습니다.

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     }, 
     { 
      "Sid": "DenyNonProxyWebAccess", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::mybucket" 
       ], 
      "Condition": { 
       "NotIpAddress": { 
        "aws:SourceIp": [ 
         "99.99.99.1/32", 
         "99.99.99.2/32", 
         "99.99.99.3/32", 
         "99.99.99.4/32", 
         "99.99.99.5/32" 
        ] 
       } 
      } 
     }, 
     { 
      "Sid": "AllowAccountUsersAccess", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": [ 
        "arn:aws:IAM::999999999999:user/[email protected]", 
        "arn:aws:IAM::999999999999:user/[email protected]", 
        "999999999999" 
       ] 
      }, 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::my bucket" 
      ] 
     } 
    ] 
} 

S3 버킷 계정에서 버킷 자체를 관리 할 수있는 기능을 방해하지 않고 IP는 웹 액세스 범위 만 선택할 수 제한 정적 웹 호스트가 될이 할 수있는 방법이 있나요?

답변

1

아마존 S3 버킷의 리소스에 부여 할 수있는 액세스 여러 가지 방법이 있습니다 : 액세스하면

  • IAM 권한
  • 버킷 정책
  • 사전 서명 된 URL

은 요청이 과 일치하면이되며 액세스 권한이 부여됩니다 (Deny가이를 무시할 수도 있음).

IAM 권한사용자 또는 그룹에 권한을 할당하는 데 사용됩니다. 예를 들어 버킷에 액세스하려는 경우 정책을 만들고 정책에 추가하여 을 IAM 사용자으로 할당 할 수 있습니다. 모든 관리자가 버킷에 액세스하게하려면 IAM 그룹에 넣고 그룹에 정책을 할당하십시오. 이 방법으로 이루어진 모든 액세스는 AWS 자격 증명 (익명 액세스 없음)을 사용하여 수행해야합니다.

일반적으로 버킷 정책은 익명 액세스 (자격 증명 필요 없음)를 부여하는 데 사용되지만 IP 주소 범위, SSL 전용 및 시간대와 같은 제한 사항을 포함 할 수 있습니다. 리버스 프록시는 요청의 일부로 자격 증명을 보내지 않으므로 역방향 프록시에 대한 액세스 권한을 부여하는 방법입니다.

은 특정 개체에 대해 임시 액세스를 허용하도록 응용 프로그램에서 생성 할 수 있습니다. URL에는 액세스를 인증하는 계산 된 서명이 포함됩니다. 이것은 일반적으로 HTML 페이지에 링크를 생성 할 때 사용됩니다 (예 : 비공개 이미지에 링크).

상황

그래서, 첫째로, 당신은 유사한 정책을 사용하여 자신과 관리자에 대한 액세스 권한을 부여해야이 적용되기 때문에 더 Principal이 없음을

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "AllowWebAccess", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*" 
      ] 
     } 
    ] 
} 

주를 어떤 사용자/그룹에이 정책이 할당되었습니다.

다음으로 역방향 프록시에 대한 액세스를 허용하려고합니다. 이 정책은 지정된 버킷 (Allow) 액세스를 허용한다

{ 
    "Id": "S3_Policy", 
    "Statement": [ 
     { 
      "Sid": "DenyNonProxyWebAccess", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::mybucket/*", 
       "arn:aws:s3:::mybucket" 
       ], 
      "Condition": { 
       "IpAddress": { 
        "aws:SourceIp": [ 
         "99.99.99.1/32", 
         "99.99.99.2/32", 
         "99.99.99.3/32", 
         "99.99.99.4/32", 
         "99.99.99.5/32" 
        ] 
       } 
      } 
     } 
    ] 
} 

하지만 경우에만 요청이 명시된 IP 주소 중 하나에서 오는 : 이것은 버킷 정책를 통해 수행 할 수 있습니다.

을 통한 액세스 허용은 항상 DenyAllow을 항상 덮어 쓰기 때문에 액세스를 거부하는 것이 좋습니다. 따라서 일단 무언가가 거부되면 허용 할 수 없기 때문에 Deny을 사용하십시오 (예 : Deny가 관리 액세스를 차단하면 액세스를 허용 할 수 없음). 거부는 주로 뭔가를 차단하고 싶을 때 주로 사용됩니다 (예 : 알려진 나쁜 배우). VPC 엔드 포인트가

마지막 옵션은 가치가 고려

는 S3에 대한 VPC 엔드 포인트의 사용이다. 이렇게하면 인터넷 게이트웨이를 거치지 않고도 VPC와 S3 사이에 직접 통신 할 수 있습니다. 사설 서브넷의 리소스가 NAT 게이트웨이를 사용하지 않고 S3와 통신하기를 원하는 상황에 적합합니다.

추가 정책을 VPC 끝점에 추가하여 VPC 끝점 (예 : 역방향 프록시 범위)에 액세스 할 수있는 리소스를 정의 할 수 있습니다. 버킷 정책은 VPC 끝점을 구체적으로 나타낼 수 있으며 해당 액세스 방법의 요청을 허용합니다. 예를 들어, 특정 VPC에서만 액세스를 허용하는 버킷 정책을 구성 할 수 있습니다. 이는 버킷에 대한 Dev/Test/Prod 액세스를 분리하는 데 유용합니다.

역방향 프록시 외부에서도 VPC 끝점을 통해 S3 트래픽이 이동하게되므로 주어진 사용 사례에는 적합하지 않을 수 있습니다. 아키텍처에 바람직한 동작이 아닐 수도 있습니다.

결론 : IAM 정책은 사용자에게 액세스 권한을 부여합니다. 버킷 정책은 익명 액세스를 허용합니다.

당신은 확실히 당신이 열거 한 첫 번째 정책을 "필요로하지 않습니다."그리고 실제로는 그 정책을 거의 사용해서는 안되기 때문에 버킷에 대한 완전한 액세스 권한을 부여합니다.