tests/test.sh exit code (0 → resolved); the classification below is post-hoc and cannot change it.{
"command": "echo \"AWS_ENDPOINT_URL=$AWS_ENDPOINT_URL\"; echo \"ENFORCE_IAM=$ENFORCE_IAM\"; aws --version 2>&1 | head -1",
"description": "Check environment"
}AWS_ENDPOINT_URL=http://localstack:4566 ENFORCE_IAM= aws-cli/2.34.48 Python/3.14.4 Linux/6.12.76-linuxkit exe/aarch64.ubuntu.24 [stdout] AWS_ENDPOINT_URL=http://localstack:4566 ENFORCE_IAM= aws-cli/2.34.48 Python/3.14.4 Linux/6.12.76-linuxkit exe/aarch64.ubuntu.24
{
"command": "aws ssm get-parameters-by-path --path \"/harbor/boundary/\" --recursive --region us-east-1 --output json",
"description": "Read SSM manifest"
}{
"Parameters": [
{
"Name": "/harbor/boundary/policy-arn",
"Type": "String",
"Value": "arn:aws:iam::000000000000:policy/AnalystBoundaryPolicy",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:47.921000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/policy-arn",
"DataType": "text"
},
{
"Name": "/harbor/boundary/identity-arn",
"Type": "String",
"Value": "arn:aws:iam::000000000000:policy/AnalystIdentityPolicy",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:48.294000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/identity-arn",
"DataType": "text"
},
{
"Name": "/harbor/boundary/user-arn",
"Type": "String",
"Value": "arn:aws:iam::000000000000:user/analyst-user",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:48.645000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/user-arn",
"DataType": "text"
},
{
"Name": "/harbor/boundary/kms-key-arn",
"Type": "String",
"Value": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:49.010000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/kms-key-arn",
"DataType": "text"
},
{
"Name": "/harbor/boundary/bucket-name",
"Type": "String",
"Value": "vault-bucket",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:49.375000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/bucket-name",
"DataType": "text"
},
{
"Name": "/harbor/boundary/analyst-access-key-id",
"Type": "String",
"Value": "LKIAQAAAAAAANHRXNXRG",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:49.737000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/analyst-access-key-id",
"DataType": "text"
},
{
"Name": "/harbor/boundary/analyst-secret-key",
"Type": "SecureString",
"Value": "kms:alias/aws/ssm:RWCjiyV+s+jQdTQwen5M8JisCEnhnlWCNpT/jobE",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:50.090000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/analyst-secret-key",
"DataType": "text"
}
]
}
[stdout]
{
"Parameters": [
{
"Name": "/harbor/boundary/policy-arn",
"Type": "String",
"Value": "arn:aws:iam::000000000000:policy/AnalystBoundaryPolicy",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:47.921000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/policy-arn",
"DataType": "text"
},
{
"Name": "/harbor/boundary/identity-arn",
"Type": "String",
"Value": "arn:aws:iam::000000000000:policy/AnalystIdentityPolicy",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:48.294000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/identity-arn",
"DataType": "text"
},
{
"Name": "/harbor/boundary/user-arn",
"Type": "String",
"Value": "arn:aws:iam::000000000000:user/analyst-user",
"Version": 1,
"LastModifiedDate": "2026-05-17T07:48:48.645000+00:00",
"ARN": "arn:aws:ssm:us-east-1:000000000000:parameter/harbor/boundary/user-arn",
…[truncated]{
"command": "aws iam get-user --user-name analyst-user --region us-east-1 --output json",
"description": "Check analyst-user"
}{
"User": {
"Path": "/",
"UserName": "analyst-user",
"UserId": "AIDAQAAAAAAACIBMMHTQF",
"Arn": "arn:aws:iam::000000000000:user/analyst-user",
"CreateDate": "2026-05-17T07:48:45.276665+00:00"
}
}
[stdout]
{
"User": {
"Path": "/",
"UserName": "analyst-user",
"UserId": "AIDAQAAAAAAACIBMMHTQF",
"Arn": "arn:aws:iam::000000000000:user/analyst-user",
"CreateDate": "2026-05-17T07:48:45.276665+00:00"
}
}{
"command": "aws iam list-policies --scope Local --region us-east-1 --output json",
"description": "List local IAM policies"
}{
"Policies": [
{
"PolicyName": "AnalystBoundary",
"PolicyId": "AURZKG432E57Y55UW8ZGS",
"Arn": "arn:aws:iam::000000000000:policy/AnalystBoundary",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 0,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"CreateDate": "2026-05-17T07:48:44.526422+00:00",
"UpdateDate": "2026-05-17T07:48:44.526422+00:00"
},
{
"PolicyName": "AnalystIdentityPolicy",
"PolicyId": "A4U6H9CA6ZP5ZGSU678TC",
"Arn": "arn:aws:iam::000000000000:policy/AnalystIdentityPolicy",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 1,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"CreateDate": "2026-05-17T07:48:44.179109+00:00",
"UpdateDate": "2026-05-17T07:48:44.179109+00:00"
}
]
}
[stdout]
{
"Policies": [
{
"PolicyName": "AnalystBoundary",
"PolicyId": "AURZKG432E57Y55UW8ZGS",
"Arn": "arn:aws:iam::000000000000:policy/AnalystBoundary",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 0,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"CreateDate": "2026-05-17T07:48:44.526422+00:00",
"UpdateDate": "2026-05-17T07:48:44.526422+00:00"
},
{
"PolicyName": "AnalystIdentityPolicy",
"PolicyId": "A4U6H9CA6ZP5ZGSU678TC",
"Arn": "arn:aws:iam::000000000000:policy/AnalystIdentityPolicy",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 1,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"CreateDate": "2026-05-17T07:48:44.179109+00:00",
"UpdateDate": "2026-05-17T07:48:44.179109+00:00"
}
]
}{
"command": "aws iam get-policy-version --policy-arn arn:aws:iam::000000000000:policy/AnalystBoundary --version-id v1 --region us-east-1 --output json",
"description": "Get AnalystBoundary policy v1"
}{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketListing",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"NotResource": "arn:aws:s3:::vault-bucket/public/*"
},
{
"Sid": "ObjectOps",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::vault-bucket/Confidential/*"
},
{
"Sid": "PublicGuard",
"Effect": "Deny",
"Action": "s3:*",
"Resource": "arn:aws:s3:::vault-bucket/public/*"
},
{
"Sid": "KmsForVault",
"Effect": "Allow",
"Action": "kms:*",
"Resource": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48"
}
]
},
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.526422+00:00"
}
}
[stdout]
{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketListing",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"NotResource": "arn:aws:s3:::vault-bucket/public/*"
},
{
"Sid": "ObjectOps",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::vault-bucket/Confidential/*"
},
{
"Sid": "PublicGuard",
"Effect": "Deny",
"Action": "s3:*",
"Resource": "arn:aws:s3:::vault-bucket/public/*"
},
{
"Sid": "KmsForVault",
"Effect": "Allow",
"Action": "kms:*",
"Resource": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48"
}
]
},
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.526422+00:00"
}
}{
"command": "aws iam get-policy-version --policy-arn arn:aws:iam::000000000000:policy/AnalystIdentityPolicy --version-id v1 --region us-east-1 --output json",
"description": "Get AnalystIdentityPolicy v1"
}{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AnalystS3",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
},
{
"Sid": "AnalystKms",
"Effect": "Allow",
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "AnalystGuard",
"Effect": "Deny",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::vault-bucket/public/*"
}
]
},
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.179109+00:00"
}
}
[stdout]
{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AnalystS3",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
},
{
"Sid": "AnalystKms",
"Effect": "Allow",
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "AnalystGuard",
"Effect": "Deny",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::vault-bucket/public/*"
}
]
},
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.179109+00:00"
}
}{
"command": "aws iam list-attached-user-policies --user-name analyst-user --region us-east-1 --output json",
"description": "List user policies"
}{
"AttachedPolicies": [
{
"PolicyName": "AnalystIdentityPolicy",
"PolicyArn": "arn:aws:iam::000000000000:policy/AnalystIdentityPolicy"
}
]
}
[stdout]
{
"AttachedPolicies": [
{
"PolicyName": "AnalystIdentityPolicy",
"PolicyArn": "arn:aws:iam::000000000000:policy/AnalystIdentityPolicy"
}
]
}{
"command": "aws iam list-policy-versions --policy-arn arn:aws:iam::000000000000:policy/AnalystBoundary --region us-east-1 --output json; aws iam list-policy-versions --policy-arn arn:aws:iam::000000000000:policy/AnalystIdentityPolicy --region us-east-1 --output json",
"description": "List policy versions"
}{
"Versions": [
{
"VersionId": "v2",
"IsDefaultVersion": false,
"CreateDate": "2026-05-17T07:48:44.884667+00:00"
},
{
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.526422+00:00"
}
]
}
{
"Versions": [
{
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.179109+00:00"
}
]
}
[stdout]
{
"Versions": [
{
"VersionId": "v2",
"IsDefaultVersion": false,
"CreateDate": "2026-05-17T07:48:44.884667+00:00"
},
{
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.526422+00:00"
}
]
}
{
"Versions": [
{
"VersionId": "v1",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:48:44.179109+00:00"
}
]
}{
"command": "aws iam get-policy-version --policy-arn arn:aws:iam::000000000000:policy/AnalystBoundary --version-id v2 --region us-east-1 --output json",
"description": "Check v2 of boundary"
}{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketListing",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::vault-bucket",
"Condition": {
"StringLike": {
"s3:prefix": [
"confidential/*"
]
}
}
},
{
"Sid": "ObjectOps",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::vault-bucket/confidential/*"
},
{
"Sid": "KmsForVault",
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48"
}
]
},
"VersionId": "v2",
"IsDefaultVersion": false,
"CreateDate": "2026-05-17T07:48:44.884667+00:00"
}
}
[stdout]
{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketListing",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::vault-bucket",
"Condition": {
"StringLike": {
"s3:prefix": [
"confidential/*"
]
}
}
},
{
"Sid": "ObjectOps",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::vault-bucket/confidential/*"
},
{
"Sid": "KmsForVault",
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:GenerateDataKeyWithoutPlaintext",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48"
}
]
},
"VersionId": "v2",
"IsDefaultVersion": false,
"CreateDate": "2026-05-17T07:48:44.884667+00:00"
}
}{
"command": "aws s3api list-buckets --region us-east-1 --output json; aws kms list-aliases --region us-east-1 --output json | head -40; aws iam list-access-keys --user-name analyst-user --region us-east-1 --output json",
"description": "Check bucket, kms, access keys"
}{
"Buckets": [
{
"Name": "vault-bucket",
"CreationDate": "2026-05-17T07:48:42+00:00",
"BucketRegion": "us-east-1",
"BucketArn": "arn:aws:s3:::vault-bucket"
}
],
"Owner": {
"ID": "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
},
"Prefix": null
}
{
"Aliases": [
{
"AliasName": "alias/vault-kms",
"AliasArn": "arn:aws:kms:us-east-1:000000000000:alias/vault-kms",
"TargetKeyId": "4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48",
"CreationDate": "2026-05-17T07:48:41.763833+00:00"
}
]
}
{
"AccessKeyMetadata": [
{
"UserName": "analyst-user",
"AccessKeyId": "LKIAQAAAAAAANHRXNXRG",
"Status": "Active",
"CreateDate": "2026-05-17T07:48:46.066116+00:00"
}
]
}
[stdout]
{
"Buckets": [
{
"Name": "vault-bucket",
"CreationDate": "2026-05-17T07:48:42+00:00",
"BucketRegion": "us-east-1",
"BucketArn": "arn:aws:s3:::vault-bucket"
}
],
"Owner": {
"ID": "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"
},
"Prefix": null
}
{
"Aliases": [
{
"AliasName": "alias/vault-kms",
"AliasArn": "arn:aws:kms:us-east-1:000000000000:alias/vault-kms",
"TargetKeyId": "4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48",
"CreationDate": "2026-05-17T07:48:41.763833+00:00"
}
]
}
{
"AccessKeyMetadata": [
{
"UserName": "analyst-user",
"AccessKeyId": "LKIAQAAAAAAANHRXNXRG",
"Status": "Active",
"CreateDate": "2026-05-17T07:48:46.066116+00:00"
}
]
}{
"command": "aws iam set-default-policy-version --policy-arn arn:aws:iam::000000000000:policy/AnalystBoundary --version-id v2 --region us-east-1 && echo \"Set boundary v2 as default\"",
"description": "Promote boundary v2 to default"
}Set boundary v2 as default [stdout] Set boundary v2 as default
{
"command": "aws iam put-user-permissions-boundary --user-name analyst-user --permissions-boundary arn:aws:iam::000000000000:policy/AnalystBoundary --region us-east-1 && echo \"Boundary attached to user\"",
"description": "Attach boundary to analyst-user"
}Boundary attached to user [stdout] Boundary attached to user
{
"command": "aws ssm put-parameter --name /harbor/boundary/policy-arn --type String --value arn:aws:iam::000000000000:policy/AnalystBoundary --overwrite --region us-east-1 && echo \"SSM pointer fixed\"",
"description": "Fix SSM policy-arn pointer"
}{
"Version": 2,
"Tier": "Standard"
}
SSM pointer fixed
[stdout]
{
"Version": 2,
"Tier": "Standard"
}
SSM pointer fixed{
"file_path": "/tmp/identity.json",
"content": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"AnalystS3\",\n \"Effect\": \"Allow\",\n \"Action\": \"s3:*\",\n \"Resource\": \"*\"\n },\n {\n \"Sid\": \"AnalystKms\",\n \"Effect\": \"Allow\",\n \"Action\": \"kms:*\",\n \"Resource\": \"*\"\n }\n ]\n}\n"
}File created successfully at: /tmp/identity.json (file state is current in your context , no need to Read it back)
{
"command": "aws iam create-policy-version --policy-arn arn:aws:iam::000000000000:policy/AnalystIdentityPolicy --policy-document file:///tmp/identity.json --set-as-default --region us-east-1 --output json",
"description": "Create new identity policy version"
}{
"PolicyVersion": {
"VersionId": "v2",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:53:45.449625+00:00"
}
}
[stdout]
{
"PolicyVersion": {
"VersionId": "v2",
"IsDefaultVersion": true,
"CreateDate": "2026-05-17T07:53:45.449625+00:00"
}
}{
"command": "aws iam get-user --user-name analyst-user --region us-east-1 --output json",
"description": "Verify PermissionsBoundary on user"
}{
"User": {
"Path": "/",
"UserName": "analyst-user",
"UserId": "AIDAQAAAAAAACIBMMHTQF",
"Arn": "arn:aws:iam::000000000000:user/analyst-user",
"CreateDate": "2026-05-17T07:48:45.276665+00:00",
"PermissionsBoundary": {
"PermissionsBoundaryType": "Policy",
"PermissionsBoundaryArn": "arn:aws:iam::000000000000:policy/AnalystBoundary"
}
}
}
[stdout]
{
"User": {
"Path": "/",
"UserName": "analyst-user",
"UserId": "AIDAQAAAAAAACIBMMHTQF",
"Arn": "arn:aws:iam::000000000000:user/analyst-user",
"CreateDate": "2026-05-17T07:48:45.276665+00:00",
"PermissionsBoundary": {
"PermissionsBoundaryType": "Policy",
"PermissionsBoundaryArn": "arn:aws:iam::000000000000:policy/AnalystBoundary"
}
}
}{
"command": "aws iam get-policy-version --policy-arn arn:aws:iam::000000000000:policy/AnalystBoundary --version-id v2 --region us-east-1 --query 'PolicyVersion.IsDefaultVersion'; aws iam get-policy-version --policy-arn arn:aws:iam::000000000000:policy/AnalystIdentityPolicy --version-id v2 --region us-east-1 --query 'PolicyVersion.IsDefaultVersion'",
"description": "Verify defaults"
}true true [stdout] true true
{
"command": "export AK=$(aws ssm get-parameter --name /harbor/boundary/analyst-access-key-id --region us-east-1 --query Parameter.Value --output text)\nexport SK=$(aws ssm get-parameter --name /harbor/boundary/analyst-secret-key --with-decryption --region us-east-1 --query Parameter.Value --output text)\necho \"AK=$AK len(SK)=${#SK}\"",
"description": "Load analyst credentials from SSM"
}AK=LKIAQAAAAAAANHRXNXRG len(SK)=40 [stdout] AK=LKIAQAAAAAAANHRXNXRG len(SK)=40
{
"command": "set +e\nAK=$(aws ssm get-parameter --name /harbor/boundary/analyst-access-key-id --region us-east-1 --query Parameter.Value --output text)\nSK=$(aws ssm get-parameter --name /harbor/boundary/analyst-secret-key --with-decryption --region us-east-1 --query Parameter.Value --output text)\nKMS_ARN=$(aws ssm get-parameter --name /harbor/boundary/kms-key-arn --region us-east-1 --query Parameter.Value --output text)\nKMS_KEY_ID=${KMS_ARN##*/}\n\nrun() { echo \"=== $1 ===\"; shift; AWS_ACCESS_KEY_ID=$AK AWS_SECRET_ACCESS_KEY=$SK ENFORCE_IAM=1 AWS_REGION=us-east-1 \"$@\" 2>&1 | tail -20; echo; }\n\necho hello > /tmp/cf.txt\necho hello > /tmp/pub.txt\n\nrun \"PutObject confidential (should ALLOW)\" aws s3api put-object --bucket vault-bucket --key confidential/test1.txt --body /tmp/cf.txt --server-side-encryption aws:kms --ssekms-key-id \"$KMS_ARN\"\nrun \"GetObject confidential (should ALLOW)\" aws s3api get-object --bucket vault-bucket --key confidential/test1.txt /tmp/out.txt\nrun \"PutObject public (should DENY)\" aws s3api put-object --bucket vault-bucket --key public/test.txt --body /tmp/pub.txt\nrun \"PutObject other bucket (should DENY)\" aws s3api put-object --bucket some-other-bucket --key x.txt --body /tmp/pub.txt\nrun \"kms:CreateKey (should DENY)\" aws kms create-key --description \"shouldnt\"\nrun \"kms:GenerateDataKey on vault cmk (should ALLOW)\" aws kms generate-data-key --key-id \"$KMS_ARN\" --key-spec AES_256\nrun \"kms:Decrypt path: encrypt with vault cmk first\" aws kms encrypt --key-id \"$KMS_ARN\" --plaintext \"$(echo hello | base64)\"",
"description": "End-to-end behaviour tests as analyst"
}=== PutObject confidential (should ALLOW) ===
{
"ETag": "\"b1946ac92492d2347c6235b4d2611184\"",
"ChecksumCRC64NVME": "akP7S61aVgc=",
"ChecksumType": "FULL_OBJECT",
"ServerSideEncryption": "aws:kms",
"SSEKMSKeyId": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48",
"BucketKeyEnabled": true
}
=== GetObject confidential (should ALLOW) ===
{
"AcceptRanges": "bytes",
"LastModified": "2026-05-17T07:54:16+00:00",
"ContentLength": 6,
"ETag": "\"b1946ac92492d2347c6235b4d2611184\"",
"ChecksumCRC64NVME": "akP7S61aVgc=",
"ChecksumType": "FULL_OBJECT",
"ContentType": "binary/octet-stream",
"ServerSideEncryption": "aws:kms",
"Metadata": {},
"SSEKMSKeyId": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48",
"BucketKeyEnabled": true
}
=== PutObject public (should DENY) ===
aws: [ERROR]: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
=== PutObject other bucket (should DENY) ===
aws: [ERROR]: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
=== kms:CreateKey (should DENY) ===
aws: [ERROR]: An error occurred (AccessDeniedException) when calling the CreateKey operation: User: arn:aws:iam::000000000000:user/analyst-user is not authorized to perform: kms:CreateKey on resource: * because no identity-based policy allows the kms:CreateKey action
=== kms:GenerateDataKey on vault cmk (should ALLOW) ===
{
"CiphertextBlob": "NGJkNGQyZGQtZGY2MC00ZDU2LTgzMmMtYjZlN2E0ZTNhZTQ4SLeCwNG+xXBlpPLa+TMODbzlsPHMw0ImZPyvkupmgItU6FgfeDnYk/m3nZgAWkUvGthSTaliP9AudWM2u7Zg8k14nMA0GZn/s/dB1wNeOHI=",
"Plaintext": "eBu1aE4L2qLAosxV5Olc0NyRXDhsBdcxKWuYOZtl1Io=",
"KeyId": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48"
}
=== kms:Decrypt path: encrypt with vault cmk first ===
{
"CiphertextBlob": "NGJkNGQyZGQtZGY2MC00ZDU2LTgzMmMtYjZlN2E0ZTNhZTQ4lhOiDJS+afYrS1dNEUOPI1iXqmX4uaE3jLx8jeg0JQ09nLc0BRKBPFc3TbVOeAUl",
"KeyId": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48"
}
[stdout]
=== PutObject confidential (should ALLOW) ===
{
"ETag": "\"b1946ac92492d2347c6235b4d2611184\"",
"ChecksumCRC64NVME": "akP7S61aVgc=",
"ChecksumType": "FULL_OBJECT",
"ServerSideEncryption": "aws:kms",
"SSEKMSKeyId": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48",
"BucketKeyEnabled": true
}
=== GetObject confidential (should ALLOW) ===
{
"AcceptRanges": "bytes",
"LastModified": "2026-05-17T07:54:16+00:00",
"ContentLength": 6,
"ETag": "\"b1946ac92492d2347c6235b4d2611184\"",
"ChecksumCRC64NVME": "akP7S61aVgc=",
"ChecksumType": "FULL_OBJECT",
"ContentType": "binary/octet-stream",
"ServerSideEncryption": "aws:kms",
"Metadata": {},
"SSEKMSKeyId": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48",
"BucketKeyEnabled": true
}
=== PutObject public (should DENY) ===
aws: [ERROR]: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
=== PutObject other bucket (should DENY) ===
aws: [ERROR]: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
=== kms:CreateKey (should DENY) ===
aws: [ERROR]: An error occurred (AccessDeniedException) when calling the CreateKey operation: User: arn:aws:iam::000000000000:user/analyst-user is not authorized to perform: kms:CreateKey on resource: * because no identity-based policy allows the kms:CreateKey action
=== kms:GenerateDataKey on vault cmk (should ALLOW) ===
{
"CiphertextBlob": "NGJkNGQyZGQtZGY2MC00ZDU2LTgzMmMtYjZlN2E0ZTNhZTQ4SLeCwNG+xXBlpPLa+TMODbzlsPHMw0ImZPyvkupmgItU6FgfeDnYk/m3nZgAWkUvGthSTaliP9AudWM2u7Zg8k14nMA0GZn/s/dB1wNeOHI=",
"Plaintext": "eBu1aE4L2qLAosxV5Olc0NyRXDhsBdcxKWuYOZtl1Io=",
"KeyId": "arn:aws:kms:us-east-1:000000000000:key/4bd4d2dd-df60-4d56-832c-b6e7a4e3ae48"
}
=== kms:Decr
…[truncated]No file changes, the agent left the workspace untouched.
downloading uv 0.9.7 aarch64-unknown-linux-gnu
Downloading botocore (12.7MiB)
Downloading pygments (1.2MiB)
Downloading pygments
Downloading botocore
Installed 13 packages in 27ms
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-8.4.1, pluggy-1.6.0 -- /root/.cache/uv/archive-v0/2xPRADEQjrtaY0z4tRFkt/bin/python
cachedir: .pytest_cache
rootdir: /tests
plugins: json-ctrf-0.3.5
collecting ... collected 27 items
../tests/test_outputs.py::test_01_analyst_user_exists PASSED [ 3%]
../tests/test_outputs.py::test_02_identity_policy_attached_to_user PASSED [ 7%]
../tests/test_outputs.py::test_03_boundary_attached_via_get_user PASSED [ 11%]
../tests/test_outputs.py::test_04_vault_bucket_exists_with_public_access_block PASSED [ 14%]
../tests/test_outputs.py::test_05_kms_alias_and_ssm_pointers_resolve PASSED [ 18%]
../tests/test_outputs.py::test_06_identity_policy_grants_full_s3_and_full_kms PASSED [ 22%]
../tests/test_outputs.py::test_07_identity_policy_has_no_explicit_deny_anywhere PASSED [ 25%]
../tests/test_outputs.py::test_08_user_has_no_admin_managed_policy_attached PASSED [ 29%]
../tests/test_outputs.py::test_09_boundary_effect_allow_only PASSED [ 33%]
../tests/test_outputs.py::test_10_boundary_has_no_NotResource_or_NotAction PASSED [ 37%]
../tests/test_outputs.py::test_11_boundary_object_actions_scoped_to_confidential_prefix PASSED [ 40%]
../tests/test_outputs.py::test_12_boundary_listbucket_uses_s3_prefix_condition PASSED [ 44%]
../tests/test_outputs.py::test_13_boundary_kms_actions_scoped_to_cmk_arn PASSED [ 48%]
../tests/test_outputs.py::test_14_boundary_does_not_grant_kms_create_key_or_wildcard_kms PASSED [ 51%]
../tests/test_outputs.py::test_15_boundary_does_not_grant_iam_self_modify PASSED [ 55%]
../tests/test_outputs.py::test_16_boundary_size_under_managed_policy_limit PASSED [ 59%]
../tests/test_outputs.py::test_17_boundary_allows_confidential_put_via_simulator PASSED [ 62%]
../tests/test_outputs.py::test_18_boundary_denies_public_put_via_simulator PASSED [ 66%]
../tests/test_outputs.py::test_19_boundary_allows_kms_decrypt_via_simulator PASSED [ 70%]
../tests/test_outputs.py::test_20_boundary_denies_kms_create_key_via_simulator PASSED [ 74%]
../tests/test_outputs.py::test_21_analyst_can_put_to_confidential_prefix PASSED [ 77%]
../tests/test_outputs.py::test_22_analyst_cannot_put_to_public_prefix PASSED [ 81%]
../tests/test_outputs.py::test_23_analyst_cannot_create_kms_key PASSED [ 85%]
../tests/test_outputs.py::test_24_analyst_cannot_put_to_a_different_bucket PASSED [ 88%]
../tests/test_outputs.py::test_25_boundary_object_resource_prefix_is_lowercase_confidential PASSED [ 92%]
../tests/test_outputs.py::test_26_ssm_policy_arn_resolves_to_a_live_boundary_managed_policy PASSED [ 96%]
../tests/test_outputs.py::test_27_boundary_default_version_reflects_the_runtime_intended_shape PASSED [100%]
=============================== warnings summary ===============================
test_outputs.py: 54 warnings
/root/.cache/uv/archive-v0/2xPRADEQjrtaY0z4tRFkt/lib/python3.12/site-packages/botocore/auth.py:424: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
datetime_now = datetime.datetime.utcnow()
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED ../tests/test_outputs.py::test_01_analyst_user_exists
PASSED ../tests/test_outputs.py::test_02_identity_policy_attached_to_user
PASSED ../tests/test_outputs.py::test_03_boundary_attached_via_get_user
PASSED ../tests/test_outputs.py::test_04_vault_bucket_exists_with_public_access_block
PASSED ../tests/test_outputs.py::test_05_kms_alias_and_ssm_pointers_resolve
PASSED ../tests/test_outputs.py::test_06_identity_policy_grants_full_s3_and_full_kms
PASSED ../tests/test_outputs.py::test_07_identity_policy_has_no_explicit_deny_anywhere
PASSED ../tests/test_outputs.py::test_08_user_has_no_admin_managed_policy_attached
PASSED ../tests/test_outputs.py::test_09_boundary_effect_allow_only
PASSED ../tests/test_outputs.py::test_10_boundary_has_no_NotResource_or_NotAction
PASSED ../tests/test_outputs.py::test_11_boundary_object_actions_scoped_to_confidential_prefix
PASSED ../tests/test_outputs.py::test_12_boundary_listbucket_uses_s3_prefix_condition
PASSED ../tests/test_outputs.py::test_13_boundary_kms_actions_scoped_to_cmk_arn
PASSED ../tests/test_outputs.py::test_14_boundary_does_not_grant_kms_create_key_or_wildcard_kms
PASSED ../tests/test_outputs.py::test_15_boundary_does_not_grant_iam_self_modify
PASSED ../tests/test_outputs.py::test_16_boundary_size_under_managed_policy_limit
PASSED ../tests/test_outputs.py::test_17_boundary_allows_confidential_put_via_simulator
PASSED ../tests/test_outputs.py::test_18_boundary_denies_public_put_via_simulator
PASSED ../tests/test_outputs.py::test_19_boundary_allows_kms_decrypt_via_simulator
PASSED ../tests/test_outputs.py::test_20_boundary_denies_kms_create_key_via_simulator
PASSED ../tests/test_outputs.py::test_21_analyst_can_put_to_confidential_prefix
PASSED ../tests/test_outputs.py::test_22_analyst_cannot_put_to_public_prefix
PASSED ../tests/test_outputs.py::test_23_analyst_cannot_create_kms_key
PASSED ../tests/test_outputs.py::test_24_analyst_cannot_put_to_a_different_bucket
PASSED ../tests/test_outputs.py::test_25_boundary_object_resource_prefix_is_lowercase_confidential
PASSED ../tests/test_outputs.py::test_26_ssm_policy_arn_resolves_to_a_live_boundary_managed_policy
PASSED ../tests/test_outputs.py::test_27_boundary_default_version_reflects_the_runtime_intended_shape
======================= 27 passed, 54 warnings in 0.57s ========================Reproduce this trial: git checkout 2f94510 && PYTHONPATH=src python3 scripts/build_site.py , then open trial/trial_ac2e4bca60f44f1b. Re-running the agent live requires EVAL_PLATFORM_ENABLE_OAUTH_SMOKE=1 and is non-deterministic.
Trial trial_ac2e4bca60f44f1b · verifier authoritative; classifier explanatory.