我一直在使用AWS PHP SDK,除了IAM角色和权限之外,我似乎什么都能得到。
请有人用最简单的术语向我解释IAM角色是如何工作的,并用简单的英语解释以下术语:StatementId
、Action
、ARN
,最重要的是Principal
?
让你知道我困惑的根源,这是我最近遇到的一个问题。我正在尝试创建一个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') + '/*'};
为什么第一个不包含任何帐户信息,而第二个包含?此外,还有一个人粘贴了完全不同的东西,为他做同样的工作。上一个例子中有很多键(比如"Fn::Join"),我甚至不知道从哪里开始,它做什么。
如何找到这些政策?我们只是从某个地方复制粘贴它们吗?有办法确定它们如果是,则必须始终指定哪些键。
任何帮助都将不胜感激,因为我现在完全困惑了
首先,欢迎来到AWS的世界!!:-D
让我试着用一个类比来解释你对如何理解IAM(一般)的疑虑。
想象一下有一个叫做ORG1的组织。
Deparments of ORG1:
人力资源部、测试部、开发部
Employees of ORG1:
EMP1、EMP2、EMP3。。。EMP10
Members of HR dept:
HR1、HR2、HR3
现在,我想为人力资源部门创建一个角色,允许他们雇用/暂停员工。政策如下:
{
"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功能的可定制性。
How does one figure out where to find these policies?
您需要参考AWS文档了解特定服务,以了解它们支持的原则、操作和声明。例如,如果您需要了解DynamoDB的策略,请检查DynamoDB API权限。一开始可能会让人困惑,因为AWS需要使用IAM来授权他们的所有服务,但随着时间的推移,这会变得直截了当。
让我解释政策的每一部分
StatementId(Sid)-它是唯一的可选语句标识符(如1、2、abcd等),对于某些服务(如SQS、SNS),它需要唯一性。
行动-您的政策允许在AWS服务上做什么。例如,对于DynamoDB,您可以允许创建表,放置新项目&对于EC2实例,它可以允许启动和停止。
ARN(亚马逊资源名称)-这是一个唯一的名称,用于唯一标识AWS资源,如EC2服务器、S3存储桶、DynamoDB表,甚至IAM策略、Role&等
Principal-Principal用于限制允许使用此策略的人员。它可以是允许或拒绝访问资源的用户(IAM用户、联合用户或假定角色用户)、AWS帐户、AWS服务或其他主体实体。
此外,您还需要包括Resource参数,在该参数中,您可以使用通配符"*"或包含帐户ID的ARN。
我认为大多数答案都是正确的,但这里是来自马的嘴/伟大的AWS文档(完全信用)
角色:IAM角色是您可以在具有特定权限的帐户中创建的IAM标识。
策略:IAM策略定义操作的权限,而不考虑您用于执行操作的方法
通常,您有一个角色,并为您的角色分配策略。
回答你问题的最后一部分";如何找到这些政策;。这完全取决于你想做什么,但总是从最少的权限开始(与linux文件权限相同的概念不会给出777)。您如何定义您的政策?您的AWS帐户中已经定义了标准政策,但您可以使用以下工具使用工具自定义您的政策
https://awspolicygen.s3.amazonaws.com/policygen.html