#python #amazon-web-services #amazon-s3 #amazon-cloudformation #aws-sam
Вопрос:
Я пытаюсь загрузить данные паркета в красное смещение с помощью спектра красного смещения.
У меня есть свои доверительные отношения и т. Д., И я могу нормально взять на себя роль из Redshift.
Однако я получаю ошибку Отказа в доступе к S3, которую, похоже, не могу решить.
Политика корзины S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<BUCKET>",
"arn:aws:s3:::<BUCKET>/*"
],
"Condition": {
"ArnEquals": {
"aws:PrincipalArn": [
"<ADMIN ROLE 1 ARN>",
"<ADMIN ROLE 2 ARN>"
]
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetBucketNotification",
"s3:GetBucketVersioning",
"s3:DeleteObject",
"s3:PutObject",
"s3:ListBucket",
"s3:GetObject",
"s3:ListBucketVersions"
],
"Resource": [
"arn:aws:s3:::<BUCKET>",
"arn:aws:s3:::<BUCKET>/*"
],
"Condition": {
"ArnEquals": {
"aws:PrincipalArn": [
"arn:aws:iam::123456781234:role/GlueRole",
"arn:aws:iam::123456781234:role/ExtractSQLRole",
"arn:aws:iam::123456781234:role/RedshiftRole"
]
}
}
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<BUCKET>/*",
"arn:aws:s3:::<BUCKET>"
],
"Condition": {
"ArnNotEquals": {
"aws:PrincipalArn": [
"<ADMIN ROLE 1 ARN>",
"<ADMIN ROLE 2 ARN>",
"arn:aws:iam::123456781234:role/GlueRole",
"arn:aws:iam::123456781234:role/ExtractSQLRole",
"arn:aws:iam::123456781234:role/RedshiftRole"
]
}
}
}
]
}
Схема спектра, созданная с помощью:
create external schema 'Schema1'
from data catalog
database 'spectrum_database'
iam_role 'arn:aws:iam::123456781234:role/RedshiftRole'
catalog_role 'arn:aws:iam::123456781234:role/GlueRole'
Роль Клея:
GlueRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: glue.amazonaws.com
Action: sts:AssumeRole
- Effect: Allow
Principal:
Service: redshift.amazonaws.com
Action: sts:AssumeRole
Condition:
StringEquals:
sts:ExternalId:
- arn:aws:iam::123456781234:role/GlueRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
При этом я получаю список таблиц, но всегда эта ошибка:
Мне нужно, чтобы корзина была привязана только к определенным ролям, но также нужен спектр для запроса… какие-нибудь советы?
Ответ №1:
У вас есть явное отрицание всех ваших принципов:
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<BUCKET>/*",
"arn:aws:s3:::<BUCKET>"
],
"Condition": {
"ArnEquals": {
"aws:PrincipalArn": [
"<ADMIN ROLE 1 ARN>",
"<ADMIN ROLE 2 ARN>",
"arn:aws:iam::123456781234:role/GlueRole",
"arn:aws:iam::123456781234:role/ExtractSQLRole",
"arn:aws:iam::123456781234:role/RedshiftRole"
]
}
}
}
Отрицание всегда побеждает, поэтому вам всегда будет отказано, и никто allow
этого не изменит. Я не уверен, чего вы хотите добиться с помощью этого явного отрицания. Может быть, вы хотите использовать ArnNotEquals
?
Комментарии:
1. Ах, это опечатка, поскольку я играл с политикой. Он установлен в значение ArnNotEquals. Исправлено в исходном посте. Спасибо.