Amazon S3: 버킷 액세스는 허용하되, 최근 MFA 없이는 프로덕션 버킷 접근 거부하기

Amazon S3: 버킷 액세스는 허용하되, 최근 MFA 없이는 프로덕션 버킷 접근 거부하기

이 예시는 Amazon S3 관리자가 객체 업데이트·추가·삭제를 포함해 어떤 버킷에도 접근할 수 있게 허용하는 자격 증명 기반 정책을 만드는 방법을 보여드려요. 다만 사용자가 지난 30분 안에 다중 인증(MFA)으로 로그인하지 않았다면 amzn-s3-demo-bucket-production 버킷에 대한 액세스를 명시적으로 거부해요.

출처: 문서

본문

이 정책은 콘솔이나 AWS CLI 또는 AWS API로 작업을 수행하는 데 필요한 권한을 부여해요. 예시 정책에서 이탤릭체로 표시된 자리표시자 텍스트를 본인 정보로 바꾼 뒤, create a policy 또는 edit a policy의 지침을 따라 적용하면 돼요.

이 정책은 장기 사용자 액세스 키를 사용한 amzn-s3-demo-bucket 버킷에 대한 프로그래매틱 액세스를 절대 허용하지 않아요. 이는 aws:MultiFactorAuthAge 조건 키와 NumericGreaterThanIfExists 조건 연산자로 구현돼요. 이 정책 조건은 MFA가 없거나 MFA 경과 시간이 30분보다 크면 true를 반환해요. 이런 상황에서는 액세스가 거부돼요. amzn-s3-demo-bucket-production 버킷에 프로그래매틱하게 접근하려면 S3 관리자가 GetSessionToken API 작업으로 지난 30분 안에 생성된 임시 자격 증명을 사용해야 해요.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid": "ListAllS3Buckets",
            "Effect": "Allow",
            "Action": ["s3:ListAllMyBuckets"],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowBucketLevelActions",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowBucketObjectActions",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::*/*"
        },
        {
            "Sid": "RequireMFAForProductionBucket",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-production/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-production"
            ],
            "Condition": {
                "NumericGreaterThanIfExists": {"aws:MultiFactorAuthAge": "1800"}
            }
        }
    ]
}

더 알아보기 (Learn more)