Amazon S3 버킷 정책에서 Principal 요소 및 명시적 거부가 포함된 와일드카드를 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 16일

Amazon Simple Storage Service(Amazon S3) 버킷 정책에서 Principal 요소 및 명시적 거부가 포함된 와일드카드를 사용하고 싶습니다. 어떻게 해야 하나요?

간략한 설명

특정 AWS Identity and Access Management(IAM) 엔터티가 Amazon S3 버킷에 액세스하지 못하도록 하려면 버킷 정책에서 특정 권한을 지정합니다. 버킷 정책은 NotPrincipal 요소와 명시적 거부를 사용해야 합니다. 자세한 내용은 NotPrincipal with Deny 사용을 참조하세요.

그러나 NotPrincipal 요소에서는 와일드카드가 지원되지 않으므로 각 명령문 블록의 대상 엔터티로 Principal을 사용해야 합니다. 각 명령문 블록에는 각 허용 블록에 대한 조건도 포함되어야 합니다.

해결 방법

NotPrincipal을 사용하는 대신, 각 명령문 블록에서 Principal을 대상 엔터티로 사용합니다. 이때 각 허용 블록에 대한 조건을 포함합니다.

시작하기 전에 다음 리소스가 있어야 합니다.

이 예에서 와일드카드는 aws:userid에서 호출 프로세스에 의해 전달되는 모든 이름을 포함하도록 사용됩니다. 예를 들어 와일드카드는 임시 자격 증명을 얻기 위해 호출될 때 애플리케이션, 서비스 또는 인스턴스 ID에 사용됩니다. 자세한 내용은 모든 요청에 사용할 수 있는 정보를 참조하세요. 잠금을 방지하기 위해 AWS 계정 루트 사용자가 포함됩니다.

참고: 예시의 이름을 역할 ID 및 버킷 이름으로 바꿨는지 확인하세요.

거부 목록의 StringNotLike:

"Condition": {
        "StringNotLike": {
          "aws:userid": [
            "AROAID2GEXAMPLEROLEID:*",
            "444455556666"
          ]
        }
      }

다음은 전체 정책입니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::444455556666:role/s3-access-role"
        ]
      },
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::awsexamplebucket1"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::444455556666:role/s3-access-role"
        ]
      },
      "Action": [
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::awsexamplebucket1/*"
    },
    {
      "Sid": "",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:ListBucket",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::awsexamplebucket1/*",
        "arn:aws:s3:::awsexamplebucket1"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userid": [
            "AROAID2GEXAMPLEROLEID:*",
            "444455556666"
          ]
        }
      }
    }
  ]
}