简单英语的 AWS IAM 角色和策略?

AWS IAM Roles and policies in simple English?

我一直在使用 AWS PHP SDK,我似乎获得了除 IAM 角色和权限之外的所有内容。

谁能用最简单的术语向我解释 IAM 角色的工作原理并解释以下术语:StatementIdActionARN 以及最重要的 Principal 简单的英语?

为了告诉你我困惑的根源,这是我最近遇到的一个问题。我正在尝试创建一个 API 网关,其中资源的方法会触发 Lambda 函数。在我复制粘贴这个位之前它没有工作:

$lambdaClient->addPermission([
                'FunctionName' => 'fn name',
                'StatementId' => 'ManagerInvokeAccess',
                'Action' => 'lambda:InvokeFunction',
                'Principal' => 'apigateway.amazonaws.com',
            ]);

但在其他一些线程中有人建议使用以下内容:

const permissions = {
    FunctionName: target,
    StatementId: 'api-gateway-execute',
    Action: 'lambda:InvokeFunction',
    Principal: 'apigateway.amazonaws.com',
    SourceArn: 'arn:aws:execute-api:' + nconf.get('awsRegion') + ':' + nconf.get('awsAccountId') + ':' + nconf.get('apiGatewayId') + '/*'};

为什么第一个不包含任何帐户信息而第二个有?然后还有另一个人粘贴了一些完全不同的东西以获得相同的工作 him。最后一个例子中的键太多了(比如"Fn::Join"),我什至不知道从哪里开始以及它的作用。

如何找到这些政策?我们是否只是从某个地方复制粘贴它们是否有办法确定它们。 如果是这样,必须始终指定哪些键。

任何帮助将不胜感激,因为我现在完全困惑。

How does one figure out where to find these policies?

您需要参考具体服务的AWS文档,了解它们支持的原则、动作和语句。例如,如果您需要查找 DynamoDB 的策略,请检查 DynamoDB API Permissions。一开始可能会让人感到困惑,因为 AWS 需要迎合使用 IAM 来授权他们的所有服务,但随着时间的推移它会变得直截了当。

让我解释一下政策的每个部分

  • StatementId(Sid) - 它只是可选的语句标识符(例如 1、2、abcd 等),对于某些服务(例如 SQS、SNS),它需要唯一性。

  • 操作 - 您的策略允许对 AWS 服务执行的操作。例如,对于 DynamoDB,您可以允许创建表、放置新项目等。对于 EC2 实例,它可以允许启动和停止。

  • ARN(Amazon Resource Name) - 这是唯一标识 AWS 资源的唯一名称,如 EC2 服务器、S3 存储桶、DynamoDB table 甚至 IAM 策略、角色等

  • Principal - 主要是为了限制允许使用此策略的人。它可以是用户(IAM 用户、联合用户或担任角色的用户)、AWS 账户、AWS 服务或其他允许或拒绝访问资源的委托人实体。

此外,您需要包含 Resource 参数,您可以在其中使用通配符“*”或其中包含帐户 ID 的 ARN。

首先,欢迎来到 AWS 的世界!!! :-D

让我试着用一个类比来解释你对如何理解 IAM(一般)的疑惑。

认为有一个名为 ORG1 的组织。

Deparments of ORG1: 人力资源部、测试部、开发部

Employees of ORG1: EMP1, EMP2, EMP3 ... EMP10

Members of HR dept: HR1, HR2, HR3

现在我想为人力资源部创建一个角色,授予他们对 hire/suspend 一名员工的权限。该政策如下所示:

{
    "Version": "2012-10-17", // This is version of the template. Don't change this. This is NOT a date field for your use.
    "Statement": [
        {
            "Sid": "SOME-RANDOM-ID-WITH-NUMBER-1P1PP43EZUVRM", // This is used as ID in some cases to identify different statments
            "Principal": HR-dept, // the dept who is allowed to assume this role or the one who is allowed to invoke this role
            "Effect": "Allow", // has only 2 values: ALLOW/DENY. Either You want to provided the below privileges or you want to striped off these privileges.
            "Action": [
                "hire",
                "suspend",
            ],  // these are privileges which are granted
            "Resource": "EMP1", // the entity on whom do you want to apply those actions on. In this case employee EMP1.
            "Condition": {
                "ArnLike": {
                    "AWS:SourceArn": "HR*" // You want anyone from HR-dept whose id starts with HR to be able to execute the action.ie HR1,HR2 or HR3 .
                }
            }
        }
    ]
}

现在尝试从相同的角度理解下面的代码(这段代码在内部创建了一个类似于上面的模板):

const permissions = {
        FunctionName: target,
        StatementId: 'api-gateway-execute', // This is just an ID. Dont sweat about it.
        Principal: 'apigateway.amazonaws.com', //which entity group the invoker belongs to
        Action: 'lambda:InvokeFunction', // The privilege you are giving to API gateway api's
        SourceArn: 'arn:aws:execute-api:.. blah blah blah' // ie. the exact  Id of api-gateway which all has rights to invoke lambda function
}; 

在 AWS 中 ARN 是唯一的 ID 资源。有点像 company.This 中的 EmployeeId 是全球唯一的。

相信我,起初您似乎很难理解您在 AWS 中尝试做的事情,但在某些时候您会开始适应,因为您会继续跨越您面临的每个障碍。然后您会惊叹于 AWS 功能的可定制性。

我认为大部分答案都是正确的,但这是来自马的 mouth/the 很棒的 AWS 文档(完整学分)

Role:IAM 角色是您可以在您的账户中创建的具有特定权限的 IAM 身份。

Policies:无论您使用何种方法执行操作,IAM 策略都定义操作的权限

通常你有一个角色,你可以为你的角色分配策略。

回答您问题的最后一部分“如何找到这些政策”。这完全取决于您要执行的操作,但始终以最少的权限开始(与 linux 文件权限相同的概念不要给 777 )。您如何定义您的政策,您的 AWS 账户中已经定义了标准政策,但您可以使用以下工具自定义您的政策

https://awspolicygen.s3.amazonaws.com/policygen.html