dr3*_*m3r 10 amazon-web-services amazon-iam amazon-redshift
我创建了一个带有 redshift 集群和主用户的 cloudformation 堆栈:testuser
"RedshiftCluster" : {
"IamRoles" : [
{
"Fn::GetAtt": [
"IAMInstanceRole",
"Arn"
]
}
]
... other configurations
Run Code Online (Sandbox Code Playgroud)
它使用以下处于同步状态的 IAM 角色 (IAMInstanceRole),并且 redshift 集群已启动并正在运行:
"IAMInstanceRole": {
"Properties": {
"RoleName": "test-iam-role",
"AssumeRolePolicyDocument": {
"Statement": [
{
"Action": [
"sts:AssumeRole"
],
"Effect": "Allow",
"Principal": {
"Service": [
"ec2.amazonaws.com",
"redshift.amazonaws.com",
"s3.amazonaws.com"
]
}
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "root",
"PolicyDocument": {
"Version" : "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用复制命令和 iam_role 作为凭据将 csv 文件从 s3 加载到 redshift。iam_role 具有 IAMInstanceRole 的 arn(在上面声明)。每当我执行以下命令时:
copy test_table from 's3://test-bucket/test.csv' CREDENTIALS 'aws_iam_role=arn:aws:iam::<account-id>:role/test-iam-role' MAXERROR 100000 removequotes TRIMBLANKS emptyasnull blanksasnull delimiter '|';
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ERROR: User arn:aws:redshift:us-west-2:189675173661:dbuser:automated-data-sanity-redshiftcluster-fbp9fgls6lri/sanityuser is not authorized to assume IAM Role arn:aws:iam::189675173661:role/sanity-test-iam-instance-role
DETAIL:
-----------------------------------------------
error: User arn:aws:redshift:us-west-2:<account-id>:dbuser:test-redshiftcluster-fbp9fgls6lri/testuser is not authorized to assume IAM Role arn:aws:iam::<account-id>:role/test-iam-role
code: 8001
context: IAM Role=arn:aws:iam::<account-id>:role/test-iam-role
query: 1139
location: xen_aws_credentials_mgr.cpp:236
process: padbmaster [pid=29280]
-----------------------------------------------
Run Code Online (Sandbox Code Playgroud)
请提出一些解决方案。
小智 10
我遇到了同样的问题,但经过 1 小时的故障排除后,我意识到我在创建集群时未能将 Redshift 角色添加到集群中。如果您从 Redshift 中选择集群,请选择“操作”下拉菜单并选择“管理 IAM 角色”,您将能够附加您可能为此集群创建的 Redshift 角色。
无论如何,这为我解决了问题。希望这可以帮助。
小智 5
我解决了这个问题!!默认情况下,Amazon Redshift 集群可用的 IAM 角色可供该集群上的所有用户使用。您可以选择将 IAM 角色限制为特定集群或特定区域上的特定 Amazon Redshift 数据库用户。
要仅允许特定数据库用户使用 IAM 角色,请执行以下步骤。
识别有权访问 IAM 角色的特定数据库用户
确定 Amazon Redshift 集群中数据库用户的 Amazon 资源名称 (ARN)。数据库用户的 ARN 格式为:arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name。
通过 url="https://console.aws.amazon.com/ 打开 IAM 控制台。
在导航窗格中,选择角色。
选择您想要限制为特定 Amazon Redshift 数据库用户的 IAM 角色。
选择信任关系选项卡,然后选择编辑信任关系。允许 Amazon Redshift 代表您访问其他 AWS 服务的新 IAM 角色具有如下信任关系:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "redshift.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Run Code Online (Sandbox Code Playgroud)
例如,以下信任关系指定只有 us-west-2 区域中集群 my-cluster 上的数据库用户 user1 和 user2 有权使用此 IAM 角色。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "redshift.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": [
"arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1",
"arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2"
]
}
}
}]
}
Run Code Online (Sandbox Code Playgroud)
7.选择更新信任策略。
搜索了一段时间后得到了解决方案。我按照 John 的建议为 redshift 创建了单独的 IAM 角色,这是一个正确的建议,但在我的情况下不是问题。然后按照线程解决问题:使用 IAM 角色从远程 S3 复制 - 未授权承担 IAM 角色
| 归档时间: |
|
| 查看次数: |
18363 次 |
| 最近记录: |