我正在尝试为 CloudTrail > S3 > SQS > Splunk 工作流配置权限。
https://docs.splunk.com/Documentation/AddOns/released/AWS/ConfigureAWSpermissions
- 我创建了一个角色,附加了一项策略来授予 S3、SQS 等的权限。
- 我转到信任关系策略并添加了相同的帐号和用户,因为用户将在同一个帐户中。
- 然后我找到用户并附加一个策略来假设角色,并提供角色名称和完整的 ARN。
- 然后我启动一个 EC2 实例,转到 aws 配置,提供访问权限、密钥和区域。
- 然后我运行 aws s3 ls 或 aws s3 list-queues,出现以下错误。不知道我在这里做错了什么。
调用 ListBuckets 操作时发生错误(AccessDenied):访问被拒绝。
Splunk 策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:GetQueueAttributes",
"sqs:ListQueues",
"sqs:ReceiveMessage",
"sqs:GetQueueUrl",
"sqs:DeleteMessage",
"s3:Get*",
"s3:List*",
"s3:Delete*"
],
"Resource": [
"*"
]
}
]
}
信任关系:
{ "Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/username"
},
"Action": "sts:AssumeRole",
"Condition": {}
用户名政策:
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::XXXXXXXXXXXX:role/roleforsplunk"
答案1
你不需要信任关系当从同一帐户承担角色时。删除它,它应该可以工作。
顺便说一下,不要在 EC2 实例上使用访问密钥和密钥。而是使用EC2 实例角色这将为您的 Splunk 进程提供所需的权限。
此外,可能不需要从 EC2 实例角色中承担另一个角色 - 只需赋予该角色所需的策略/权限。
希望有帮助:)
答案2
为了澄清其他答案中有关跨账户承担角色的一些信息:
- 因为担任不同的帐户,您需要 IAM 策略从允许目标角色的帐户
sts:AssumeRole
和信任“源帐户”(“根”用户)的目标角色上的信任策略 - 对于在同一账户中承担角色,您可以执行与跨账户情况相同的操作,或者只需添加从信托政策的作用到角色
来自AWS 文档:
想要访问其他账户中的角色的用户还必须具有用户账户管理员委派的权限。管理员必须附加一个策略,允许用户为其他账户中的角色的 ARN 调用 AssumeRole。如果用户与角色位于同一账户中,则可以执行以下操作之一:
- 为用户附加一个策略(与不同账户中的前一个用户相同)。
- 直接在角色的信任策略中将用户添加为主体。
在这种情况下,信任策略充当 IAM 基于资源的策略。与角色位于同一账户中的用户无需明确权限即可担任该角色。有关信任策略和基于资源的策略的更多信息,请参阅 IAM 用户指南中的 IAM 策略。
当然,一旦您创建了可以担任的角色,您就需要真正“担任”该角色。担任角色会为您提供一组“临时”凭证,然后您可以使用这些凭证以新的权限集执行操作。
答案3
步骤 3 不是必需的,因为 IAM 角色将由 IAM 用户承担在同一 AWS 账户内不需要明确允许sts:AssumeRole
用户授予权限。
我猜你在 EC2 实例中启用 ListBuckets 操作的原因AccessDenied
是,用于调用 ListBuckets 操作的凭证实际上是你的 IAM 用户,而不是角色本身。在步骤 4 中简单地配置用户的访问密钥 ID/秘密访问密钥并不意味着它会自动为你承担角色。你必须发出命令来aws sts assume-role
获取代表要使用的角色凭证的临时安全令牌,或者配置 AWS CLI 以承担角色。
正如 @MLu 所述,在 EC2 实例中直接使用 IAM 用户的访问密钥 ID/秘密访问密钥并不是一个好的做法。考虑使用实例配置文件反而。