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

최종 업데이트 날짜: 2020년 9월 18일

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

간략한 설명

NotPrincipal 요소 및 명시적 거부를 사용하는 버킷 정책에서 권한을 지정하여 특정 AWS Identity and Access Management(IAM) 엔터티가 Amazon S3 버킷에 액세스하지 못하도록 할 수 있습니다. 자세한 내용은 NotPrincipal with Deny 사용을 참조하십시오.

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

해결 방법

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

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

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

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

거부 블록의 StringNotLike입니다.

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

다음은 전체 정책입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "arn:aws:iam::444455556666:role/cross-account-read-only-role"
            ],
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "arn:aws:iam::444455556666:role/cross-account-read-only-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"
                    ]
                }
            }
        }
    ]
}

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


결제 또는 기술 지원이 필요합니까?