IAM策略可以通过两种方式创建:
托管策略(较新的方式)
内联策略(旧方法)
下面的SAM模板正在创建内联策略:
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello-world/
Handler: app.LambdaHandler
Runtime: nodejs8.10
Policies:
- Statement:
- Sid: AccessToS3Policy
Effect: Allow
Action:
- s3:GetObject
- s3:GetObjectACL
Resource: 'arn:aws:s3:::some-bucket/*'
扮演最终角色,如下所示:
{
"roleName": "somestack-HelloWorldFunctionRole-AAAAAAAA",
"policies": [
{
"document": {
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:GetObjectACL"
],
"Resource": "arn:aws:s3:::some-bucket/*",
"Effect": "Allow",
"Sid": "AccessToS3Policy"
}
]
},
"name": "HelloWorldFunctionRolePolicy0",
"type": "inline"
},
.....
]
}
对于Lambda函数,
1)如何创建客户管理的政策?
2)内联策略与客户托管策略有何不同?
答案 0 :(得分:2)
如果您在SAM模板中使用此语法
Policies:
- Statement:
- Sid: AccessToS3Policy
Effect: Allow
Action:
- s3:GetObject
- s3:GetObjectACL
Resource: 'arn:aws:s3:::some-bucket/*'
它将自动创建内联策略。如果要创建客户托管策略而非内联策略,则需要在模板中将策略定义为单独的Resource
,并在policies
中引用它。或者,您可以在模板之外创建角色(例如,通过AWS控制台),然后以与引用AWS托管策略相同的方式引用该策略。
内联策略与客户托管策略有何不同?
我不会真的说内联策略是做事的老方法。内联策略和客户托管策略之间的唯一区别是内联策略不能重复使用(您不能将内联策略分配给两个或多个实体)。但这通常很方便,如果您需要将来不打算重复使用的特定策略。