You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用AWS Entity Resolution API遇权限问题,缺失哪一步?

调用AWS Entity Resolution API权限问题排查

我正尝试调用AWS Entity Resolution的GetMatchId API,当前配置如下:

IAM用户详情

  • IAM用户:user1
  • 关联策略:AssumeRolePolicy

已为user1生成访问密钥和密钥密码,并在Spring Boot应用中使用。

附加到user1的AssumeRolePolicy策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::004724176825:role/scv-er-poc-er-service-sbox"
        }
    ]
}

角色scv-er-poc-er-service-sbox详情

该角色已附加AWSEntityResolutionConsoleFullAccess策略,其信任实体配置如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::004724176825:user/user1",
                "Service": "entityresolution.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

遇到的错误

User: arn:aws:iam::004724176825:user/user1 is not authorized to perform: entityresolution:GetMatchId on resource: arn:aws:entityresolution:eu-west.

我的Spring Boot代码

@Bean
public EntityResolutionClient entityResolutionClient() {
    AwsCredentials credentials = AwsBasicCredentials.create("<Access key>",
            "<Secret>");
    StaticCredentialsProvider staticProvider = StaticCredentialsProvider.create(credentials);

    Region region = Region.EU_WEST_1;
    EntityResolutionClient entityResolutionClient = EntityResolutionClient.builder()
            .region(region)
            .credentialsProvider(staticProvider)
            .build();
    return entityResolutionClient;
}

请问在这个流程中我缺失了哪一步?


问题根源与解决步骤

你当前的代码直接使用user1的访问密钥调用API,但user1本身仅有sts:AssumeRole权限,没有直接调用entityresolution:GetMatchId的权限。必须先通过user1的凭证扮演scv-er-poc-er-service-sbox角色,再用该角色的临时凭证发起API请求。

修改后的Java代码示例:

@Bean
public EntityResolutionClient entityResolutionClient() {
    // 1. 用user1的凭证创建STS客户端
    AwsCredentials userCredentials = AwsBasicCredentials.create("<Access key>", "<Secret>");
    StsClient stsClient = StsClient.builder()
            .region(Region.EU_WEST_1)
            .credentialsProvider(StaticCredentialsProvider.create(userCredentials))
            .build();

    // 2. 调用AssumeRole获取临时凭证
    AssumeRoleRequest assumeRoleRequest = AssumeRoleRequest.builder()
            .roleArn("arn:aws:iam::004724176825:role/scv-er-poc-er-service-sbox")
            .roleSessionName("entity-resolution-session") // 自定义会话名称
            .build();
    AssumeRoleResponse assumeRoleResponse = stsClient.assumeRole(assumeRoleRequest);
    Credentials tempCredentials = assumeRoleResponse.credentials();

    // 3. 用临时凭证创建Entity Resolution客户端
    AwsSessionCredentials sessionCredentials = AwsSessionCredentials.create(
            tempCredentials.accessKeyId(),
            tempCredentials.secretAccessKey(),
            tempCredentials.sessionToken());

    return EntityResolutionClient.builder()
            .region(Region.EU_WEST_1)
            .credentialsProvider(StaticCredentialsProvider.create(sessionCredentials))
            .build();
}

额外注意事项:

  • 确认AWSEntityResolutionConsoleFullAccess策略包含entityresolution:GetMatchId权限(可在IAM控制台查看策略详情)。
  • 错误信息中的资源ARN不完整(应为eu-west-1加对应资源标识),这是权限不足导致的提示异常,完成凭证扮演后会自动修正。

内容的提问来源于stack exchange,提问作者Sarangan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:45:27