Amazon S3 버킷 정책에서 NotPrincipal 요소 대신, Principal 요소를 사용하여 명시적 거부에 와일드카드를 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 5월 8일

Amazon Simple Storage Service(Amazon S3) 버킷 정책에서 NotPrincipal 요소 대신, Principal 요소를 사용하여 명시적 거부에 와일드카드를 사용하려면 어떻게 해야 합니까?

간략한 설명

NotPrincipal 요소 및 명시적 거부를 사용하는 버킷 정책에서 권한을 지정하여 AWS Identity and Access Management(IAM) 엔터티가 Amazon S3 버킷에 액세스하지 못하도록 할 수 있습니다. 그러나 NotPrincipal은 와일드카드를 지원하지 않습니다.

다음 정책 예제에서는 다음 역할을 위임하는 모든 사용자 및 모든 인스턴스 ID의 역할 세션 이름을 표시해야 합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "NotPrincipal": {
        "AWS": [
          "arn:aws:sts::444455556666:assumed-role/cross-account-read-only-role/cross-account-audit-app",
          "arn:aws:sts::444455556666:assumed-role/cross-account-read-only-role/instanceID",
          "arn:aws:iam::444455556666:role/cross-account-read-only-role",
          "arn:aws:iam::444455556666:root"
        ]
      }
    }
  ]
}

이러한 모든 사용자 및 인스턴스를 포함하려면 위임된 역할을 나타내도록 명령문에서 와일드카드를 사용해야 합니다.

"arn:aws:sts::444455556666:assumed-role/cross-account-read-only-role/*"

그러나 NotPrincipal 요소에서는 와일드카드가 지원되지 않습니다.

​해결 방법

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

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

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

참고: 예제 이름을 사용자의 역할 ID 및 버킷 이름으로 대체해야 합니다.

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

거부 블록의 StringNotLike입니다.

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

다음은 전체 정책입니다.

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

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?