1

我正在使用命令行通过 aws 运行一些情绪分析,并且遇到了一些 IAM 问题。在运行“detect_dominant_language”函数时,尽管有允许所有理解函数的策略,但我还是遇到了 NotAuthorizedExceptions。该帐户的政策是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "comprehend:*",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "iam:ListRoles",
                "iam:GetRole"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

关于我可能在哪里出错的任何想法?我已经三重检查了我的访问密钥,以确保我指的是正确的帐户。当我检查政策时,它就在那里,所以我对断开连接有点不知所措。S3 似乎也运行良好。

已经采取的步骤:

  1. 重置访问密钥/秘密访问密钥。
  2. 创建明确引用所需功能的 iam 策略并将其附加到“管理员”用户。
  3. 从 CLI 调用此方法(得到相同的错误)。

下面,我提供了可能有用的其他信息......

检查 iam 政策的代码:

iam = boto3.client('iam',
                   aws_access_key_id = '*********************',
                   aws_secret_access_key = '*************************************')

iam.list_attached_user_policies(UserName="Admin")

输出:

{'AttachedPolicies': [{'PolicyName': 'ComprehendFullAccess',
   'PolicyArn': 'arn:aws:iam::aws:policy/ComprehendFullAccess'},
  {'PolicyName': 'AdministratorAccess',
   'PolicyArn': 'arn:aws:iam::aws:policy/AdministratorAccess'},
  {'PolicyName': 'Comprehend-Limitied',
   'PolicyArn': 'arn:aws:iam::401311205158:policy/Comprehend-Limitied'}],
 'IsTruncated': False,
 'ResponseMetadata': {'RequestId': '9094d8ff-1730-44b8-af0f-9222a63b32e9',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'x-amzn-requestid': '9094d8ff-1730-44b8-af0f-9222a63b32e9',
   'content-type': 'text/xml',
   'content-length': '871',
   'date': 'Thu, 20 Jan 2022 21:48:11 GMT'},
  'RetryAttempts': 0}}

触发错误的代码:

comprehend = boto3.client('comprehend',
                   aws_access_key_id = '*********************',
                   aws_secret_access_key = '********************************')

test_language_string = "This is a test string. I'm hoping that AWS Comprehend can interprete this as english..."

comprehend.detect_dominant_language(Text=test_language_string)

输出:

ClientError: An error occurred (NotAuthorizedException) when calling the DetectDominantLanguage operation: Your account is not authorized to make this call.
4

2 回答 2

1

我遇到了同样的错误,我最终为该特定 API 访问创建了一个新用户组和一个用户。简而言之,以下是步骤:

  • 创建用户组(例如Research

  • 授予访问权限ComprehendFullAccess

  • ComprehendUser在新创建的用户组(即)下 创建一个用户(如 Research

  • 答对了!它现在应该可以工作了。

如何从 btot3 访问 Amazon AWS Comprehend

这是我的代码片段:

# import packages
import boto3

# aws access credentials
AWS_ACCESS_KEY_ID = 'your-access-key'
AWS_SECRET_ACCESS_KEY = 'your-secret-key'

comprehend = boto3.client('comprehend',
                          aws_access_key_id=AWS_ACCESS_KEY_ID,
                          aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                          region_name='us-east-1')

test_language_string = "This is a test string. I'm hoping that AWS Comprehend can interprete this as english..."
comprehend.detect_dominant_language(Text=test_language_string)

预期产出

{'Languages': [{'LanguageCode': 'en', 'Score': 0.9753355979919434}],
 'ResponseMetadata': {'RequestId': 'd2ab429f-6ff7-4f9b-9ec2-dbf494ebf20a',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'x-amzn-requestid': 'd2ab429f-6ff7-4f9b-9ec2-dbf494ebf20a',
   'content-type': 'application/x-amz-json-1.1',
   'content-length': '64',
   'date': 'Mon, 07 Feb 2022 16:31:36 GMT'},
  'RetryAttempts': 0}}
于 2022-02-07T16:38:22.790 回答
0

更新:感谢大家的所有反馈!事实证明 us-west-1 不支持理解。切换到不同的可用区就可以了,所以我建议任何有类似问题的人在深入挖掘权限//访问密钥之前尝试不同的区域。

于 2022-02-08T05:53:02.407 回答