我正在尝试运行复制命令,将一些数据从帐户A中的s3存储桶复制到帐户B中的红移。我已经创建了两个不同的IAM角色,一个用于帐户A中的s3,另一个用于帐户B中的红移。我已经将IAM角色附加到红移集群,并为s3角色添加了相同的信任实体。
以下是s3 IAM角色的信任策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<redshiftAccountId>:root"
},
"Action": "sts:AssumeRole"
}
]
}下面是redshift IAM角色的内联策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"rds-db:connect",
"redshift:GetClusterCredentials",
"redshift:JoinGroup",
"redshift:CreateClusterUser"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::<s3AccountId>:role/<s3Role>"
}
]
}每次运行复制命令时,我都会得到以下错误:ERROR: User arn:aws:redshift:<redshiftAccountRegion>:<redshiftAccountId>:dbuser:<redshift-cluster>/<database-user> is not authorized to assume IAM Role arn:aws:iam::<redshiftAccountid>:role/<redshift-role>,arn:aws:iam::<s3AccountId>:role/<s3Role>
发布于 2021-03-17 17:55:20
我解决了这个问题。我在我的s3存储桶中添加了一个存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<redshiftAccountId>:root"
},
"Action": [
"s3:PutObject",
"s3:ListBucket",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::<bucket-name>/*",
"arn:aws:s3:::<bucket-name>"
]
}
}我还为我的红移IAM角色附加了一项新策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<bucket-name>/*",
"arn:aws:s3:::<bucket-name>"
]
}
]
}下面是我的红移查询:
COPY users
FROM 's3://<bucket-name>/<file-name>'
iam_role 'arn:aws:iam::<redshiftAccountId>:role/<redshiftRole>'
DELIMITER '|'
REGION '<aws-region>'请参阅以下内容:https://www.pmg.com/blog/cross-account-redshift-unload-copy/
https://stackoverflow.com/questions/66657704
复制相似问题