我们使用 IAM Identity Center 进行 SSO 身份验证和 权限集。我创建了一个简单的自定义 IAM 策略,该策略授予一些 S3 权限,将其添加到权限集,然后将其应用到一个组,并将该组添加到一个账户。一切都成功了。
然后,昨天,它停止工作了。该组中的用户不再拥有正确的权限。查看身份中心,它说应用它的帐户的权限设置状态为“过时”(参见屏幕截图)。
我单击了控制台中的“更新”按钮,但失败并出现错误(恐怕无法再回忆起确切的错误消息)。
所以我删除了该策略,然后尝试重新添加它(通过Pulumi)。现在,当我尝试通过 Pulumi
CustomerManagedPolicyAttachment
将其添加到组/项目时,会出现错误。错误是:
Received a 404 status error: Not supported policy arn:aws:iam::838965223641:policy/cloud_devs_s3_list_all_buckets_policy
我尝试过精简政策,所以它只是:
Policy(
resource_name,
name=name,
path='/',
description=description,
policy=json.dumps(
{
'Version': '2012-10-17',
'Statement': [
{
'Effect': 'Allow',
'Action': [
's3:PutObject',
],
'Resource': 'arn:aws:s3:::*',
}
],
}
),
)
但这并没有帮助。我看过一些在线帖子(例如这个),说该策略需要位于您将应用它的“帐户中”,但我至少不认为将策略放入帐户中不在普卢米。
知道我错过了什么吗?
我想我已经明白了。 Pulumi 使用从当前用户的凭据派生的默认“提供者”。如果该用户是管理/计费用户,它将使用该用户,从而在全局范围内创建资源,例如策略。但是(未记录)您必须在最终绑定权限集的同一帐户中创建要应用于身份中心组的策略。解决方法是手动创建与您将绑定的帐户关联的 Pulumi 提供程序,然后一切正常。比如:
aws.Provider(
name,
allowed_account_ids=[acct_id],
assume_role=aws.ProviderAssumeRoleArgs(
role_arn=pulumi.Output.format('arn:aws:iam::{}:role/{}', acct_id, acct_role_name)
),
)
然后像这样使用它:
SomeResource(
'resouce_name',
...,
opts=ResourceOptions(provider=provider),
)