AWS IAM角色和政策简体中文?

时间:2017-10-26 08:28:48

标签: amazon-web-services amazon-iam aws-php-sdk

我一直在使用AWS PHP SDK,除了IAM角色和权限之外我似乎得到了所有东西。

有人可以用最简单的术语向我解释IAM角色的工作原理并解释以下术语:StatementIdActionARN,最重要的是Principal in简单的英语?

为了让您了解我的困惑,这是我最近遇到的一个问题。我正在尝试创建一个API网关,其中Resource的方法触发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”),我甚至不知道从哪里开始以及它做了什么。

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

任何帮助都将受到赞赏,因为我现在完全感到困惑。

3 个答案:

答案 0 :(得分:6)

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

让我试着通过类比来解释你对如何理解IAM(一般)的怀疑。

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

Deparments of ORG1: HR-dept,Test-dept,DEV-dept

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

Members of HR dept: HR1,HR2,HR3

现在,我想为HR部门创建一个角色,授予他们雇用/暂停员工的权限。该政策如下所示:

{
    "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。有点像公司里的EmployeeId。这在全球范围内是独一无二的。

相信我,起初看起来您在AWS中尝试做的事情很难理解,但在某些时候,当您跨越每个障碍时,您将开始变得舒适。然后,您将欣赏AWS功能的可定制性。

答案 1 :(得分:3)

How does one figure out where to find these policies?

您需要参考AWS文档以获取特定服务,以了解它们支持的主要内容,操作和声明。例如,如果您需要查找DynamoDB的策略,请检查DynamoDB API Permission。起初可能会让人感到困惑,因为AWS需要使用IAM来提供所有服务的授权,但随着时间的推移它会变得很直接。

让我解释政策的每个部分

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

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

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

  • Principal - 校长是限制允许谁使用此政策。它可以是用户(IAM用户,联合用户或假定角色用户),AWS账户,AWS服务或允许或拒绝访问资源的其他主体实体。

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

答案 2 :(得分:0)

我认为大部分答案都是正确的,但这里来自马口/伟大的 AWS 文档(全额信用)

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

Policies:IAM 策略定义操作的权限,而不管您用于执行操作的方法

通常您有一个角色,并为您的角色分配策略。

回答您问题的最后一部分“人们如何找出在哪里可以找到这些政策”。这完全取决于您要尝试做什么,但始终以最少的权限开始(与 linux 文件权限相同的概念不提供 777 )。您如何定义您的策略 您的 AWS 账户中已经定义了标准的策略,但您可以使用以下工具来自定义您的策略

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