我正在尝试以编程方式创建工作邮件导出作业。我可以访问 aws workmail 组织,我什至创建了一个角色,允许访问 s3 存储桶以允许写入其中。我无法弄清楚从 boto 描述邮箱导出作业中得到的响应。它基本上失败了,但我不明白为什么。
我还需要回答的问题是:
我花了很多时间更改 AWS IAM 角色的配置,以允许角色信任不同的委托人。
我对我的程序没有正确的权限有一些想法,但我确实可以访问邮箱中列出的用户等,我不知道我错过了什么。
以下是角色的可信关系状态...
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{My Account}:user/{The username associated with the account}",
"Service": [
"workmail.amazonaws.com",
"s3.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
我开始的一项工作的回应:
{'EntityId': '{entity id}',
'Description': 'Testing job for mailbox export.',
'RoleArn': 'arn:aws:iam::{Account}:role/ApiReadRole',
'KmsKeyArn': 'arn:aws:kms:us-west-2:{Account}:key/{arn Id}',
'S3BucketName': 'communications',
'S3Prefix': 'media/private/emails',
'S3Path': 'media/private/emails/{some id}.zip',
'EstimatedProgress': 0,
'State': 'FAILED',
'ErrorInfo': 'Unable to assume role "arn:aws:iam::{Account}:role/ApiReadRole"',
'StartTime': datetime.datetime(2022, 12, 2, 8, 48, 9, 642000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2022, 12, 2, 8, 48, 11, 121000, tzinfo=tzlocal()),
'ResponseMetadata': {'RequestId': '{some id}',
'HTTPStatusCode': 200,
'HTTPHeaders': {'x-amzn-requestid': '{some id}',
'content-type': 'application/x-amz-json-1.1',
'content-length': '616',
'date': 'Fri, 02 Dec 2022 06:48:53 GMT'},
'RetryAttempts': 0}
}
我按照此文档并设法执行了导出作业。
https://docs.aws.amazon.com/workmail/latest/adminguide/mail-export.html
但是,我也遇到了一个问题,我无法成功运行该作业。
原因是我没有在 KMS 密钥上设置密钥策略,该密钥是加密 s3 存储桶上导出的内容所需的。 配置密钥策略后,作业就成功运行了。
一定要设置关键策略。 下面的文档中也提到了 KMS 密钥的这种行为:
https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html
任何 AWS 委托人(包括账户根用户或密钥创建者)都没有对 KMS 密钥的任何权限,除非在密钥策略、IAM 策略或授权中明确允许且从未拒绝。