AWS: AWS Data Exchange를 제외하고 계정 밖의 Amazon S3 리소스 액세스 거부하기

AWS: AWS Data Exchange를 제외하고 계정 밖의 Amazon S3 리소스 액세스 거부하기

이 예시는 AWS Data Exchange가 정상 동작하는 데 필요한 리소스를 제외하고, 본인 계정에 속하지 않는 AWS의 모든 리소스에 대한 액세스를 거부하는 자격 증명 기반 정책을 만드는 방법을 보여드려요.

출처: 문서

본문

예시 정책에서 이탤릭체로 표시된 자리표시자 텍스트를 본인 정보로 바꾼 뒤, create a policy 또는 edit a policy의 지침을 따라 적용하면 돼요.

조직이나 조직 단위(OU) 안의 리소스로 액세스를 제한하는 비슷한 정책을 만들 수도 있어요. 이때 aws:ResourceOrgPaths와 aws:ResourceOrgID 조건 키를 사용해서 AWS Data Exchange 소유 리소스를 고려하면 돼요.

환경에서 AWS Data Exchange를 사용한다면, 이 서비스는 서비스 계정이 소유한 Amazon S3 버킷 같은 리소스를 만들고 상호작용해요. 예를 들어 AWS Data Exchange는 AWS Data Exchange API를 호출하는 IAM 프린시펄(사용자 또는 역할)을 대신해, AWS Data Exchange 서비스가 소유한 Amazon S3 버킷으로 요청을 보내요. 이런 경우 aws:ResourceAccount, aws:ResourceOrgPaths, 또는 aws:ResourceOrgID를 AWS Data Exchange 소유 리소스를 고려하지 않고 정책에 사용하면, 서비스 계정이 소유한 버킷에 대한 액세스가 거부돼요.

이 정책이 하는 일

DenyAllAwsResourcesOutsideAccountExceptS3 스테이트먼트는 Deny 효과와 NotAction 요소를 사용해서, 스테이트먼트에 나열되지 않은 액션 중 나열된 계정에 속하지 않는 모든 액션에 대한 액세스를 명시적으로 거부해요. NotAction 요소는 이 스테이트먼트의 예외를 나타내요. 이 액션들이 AWS Data Exchange가 만든 리소스에서 수행되면 정책이 거부하기 때문에, 이 액션들은 이 스테이트먼트의 예외예요.

DenyAllS3ResourcesOutsideAccountExceptDataExchange 스테이트먼트는 ResourceAccount와 CalledVia 조건을 조합해서, 이전 스테이트먼트에서 제외한 세 가지 Amazon S3 액션에 대한 액세스를 거부해요. 리소스가 나열된 계정에 속하지 않고 호출 서비스가 AWS Data Exchange가 아닐 때 이 스테이트먼트는 이 액션들을 거부해요. 리소스가 나열된 계정에 속하거나 나열된 서비스 프린시펄(dataexchange.amazonaws.com)이 작업을 수행하면 이 스테이트먼트는 액션을 거부하지 않아요.

중요

이 정책은 어떤 액션도 허용하지 않아요. Deny 효과를 사용해서 나열된 계정에 속하지 않는 스테이트먼트의 모든 리소스에 대한 액세스를 명시적으로 거부해요. 특정 리소스에 대한 액세스를 허용하는 다른 정책과 함께 사용하세요.

다음 예시는 필요한 Amazon S3 버킷에 대한 액세스를 허용하도록 정책을 구성하는 방법이에요.

{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Sid": "DenyAllAwsReourcesOutsideAccountExceptAmazonS3",
      "Effect": "Deny",
      "NotAction": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceAccount": [
            "111122223333"
          ]
        }
      }
    },
    {
      "Sid": "DenyAllS3ResourcesOutsideAccountExceptDataExchange",
      "Effect": "Deny",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceAccount": [
            "111122223333"
          ]
        },
        "ForAllValues:StringNotEquals": {
          "aws:CalledVia": [
            "dataexchange.amazonaws.com"
          ]
        }
      }
    }
  ]
}

더 알아보기 (Learn more)