When/How 在无服务器功能中使用权限边界?
When/How to use permission boundary in serverless function?
SAM 模板下方:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello-world/
Handler: app.LambdaHandler
Runtime: nodejs8.10
Events:
MySQSEvent:
Type: SQS
Properties:
Queue: !GetAtt somequeue.Arn
BatchSize: 10
somequeue:
Type: AWS::SQS::Queue
使用以下策略自动创建默认角色(JSON):
{
"roleName": "somestack-HelloWorldFunctionRole-AAAAAAAAA",
"policies": [
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
},
"name": "AWSLambdaSQSQueueExecutionRole",
"id": "ANPAJFWJZI6JNND4TSELK",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaSQSQueueExecutionRole"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
},
"name": "AWSLambdaBasicExecutionRole",
"id": "ANPAJNCQGXC42545SKXIK",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
],
"trustedEntities": [
"lambda.amazonaws.com"
]
}
我们需要对特定资源(如下所示)的特定操作执行访问规则,并拒绝访问其他资源(在日志组中)。
1) 我是否需要使用权限边界或策略来执行以下这些规则?对于上述 SAM 模板...
- Effect: Allow
Action:
- "logs:CreateLogGroup"
Resource:
- !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:*"
2)
创建Permission boundary的过程是什么?通过 Lambda 函数的 SAM 模板.. 因为它要求 ARN
我认为你应该使用策略。
权限边界是一项 AWS IAM 功能,主要设计为 "to delegate permissions management to trusted employees"(即您希望为某些用户提供创建或管理现有 AWS 用户的可能性)。 [1]
作为初始配置系统的管理员,使用包含 Allow 和 Deny 操作的语句的权限应该足以实现什么你要。
编辑:
您可以通过以下策略限制授予权限的资源,例如:
- Effect: Deny
Action:
- "logs:CreateLogGroup"
NotResource:
- !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:*"
参考资料
我不建议在这种情况下使用权限边界。上述权限由 SAM 默认创建。如果您需要更多限制性权限,那么您可以创建自己的角色并使用该角色,而不是 SAM 自动创建的角色。
如果您使用自己的角色,SAM 不会为其添加额外的权限,因此您可以根据需要进行定制。
这是一个如何做到这一点的例子。
Transform: 'AWS::Serverless-2016-10-31'
Resources:
ThumbnailFunction:
Type: 'AWS::Serverless::Function'
Properties:
Runtime: nodejs8.10
Handler: index.handler
CodeUri: ./src
Role: !GetAtt FunctionInvokeRole.Arn
Events:
MySQSEvent:
Type: SQS
Properties:
Queue: !GetAtt somequeue.Arn
BatchSize: 10
somequeue:
Type: AWS::SQS::Queue
FunctionInvokeRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Principal:
Service:
- 'lambda.amazonaws.com'
Action:
- 'sts:AssumeRole'
Policies:
- PolicyName: 'root'
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Action: '*'
Resource: '*'
使用 FunctionInvokeRole
中的 Policies
属性指定您自己的政策。
SAM 模板下方:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: hello-world/
Handler: app.LambdaHandler
Runtime: nodejs8.10
Events:
MySQSEvent:
Type: SQS
Properties:
Queue: !GetAtt somequeue.Arn
BatchSize: 10
somequeue:
Type: AWS::SQS::Queue
使用以下策略自动创建默认角色(JSON):
{
"roleName": "somestack-HelloWorldFunctionRole-AAAAAAAAA",
"policies": [
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:ReceiveMessage",
"sqs:DeleteMessage",
"sqs:GetQueueAttributes",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
},
"name": "AWSLambdaSQSQueueExecutionRole",
"id": "ANPAJFWJZI6JNND4TSELK",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaSQSQueueExecutionRole"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
},
"name": "AWSLambdaBasicExecutionRole",
"id": "ANPAJNCQGXC42545SKXIK",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
],
"trustedEntities": [
"lambda.amazonaws.com"
]
}
我们需要对特定资源(如下所示)的特定操作执行访问规则,并拒绝访问其他资源(在日志组中)。
1) 我是否需要使用权限边界或策略来执行以下这些规则?对于上述 SAM 模板...
- Effect: Allow
Action:
- "logs:CreateLogGroup"
Resource:
- !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:*"
2)
创建Permission boundary的过程是什么?通过 Lambda 函数的 SAM 模板.. 因为它要求 ARN
我认为你应该使用策略。
权限边界是一项 AWS IAM 功能,主要设计为 "to delegate permissions management to trusted employees"(即您希望为某些用户提供创建或管理现有 AWS 用户的可能性)。 [1]
作为初始配置系统的管理员,使用包含 Allow 和 Deny 操作的语句的权限应该足以实现什么你要。
编辑:
您可以通过以下策略限制授予权限的资源,例如:
- Effect: Deny
Action:
- "logs:CreateLogGroup"
NotResource:
- !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:*"
参考资料
我不建议在这种情况下使用权限边界。上述权限由 SAM 默认创建。如果您需要更多限制性权限,那么您可以创建自己的角色并使用该角色,而不是 SAM 自动创建的角色。
如果您使用自己的角色,SAM 不会为其添加额外的权限,因此您可以根据需要进行定制。
这是一个如何做到这一点的例子。
Transform: 'AWS::Serverless-2016-10-31'
Resources:
ThumbnailFunction:
Type: 'AWS::Serverless::Function'
Properties:
Runtime: nodejs8.10
Handler: index.handler
CodeUri: ./src
Role: !GetAtt FunctionInvokeRole.Arn
Events:
MySQSEvent:
Type: SQS
Properties:
Queue: !GetAtt somequeue.Arn
BatchSize: 10
somequeue:
Type: AWS::SQS::Queue
FunctionInvokeRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Principal:
Service:
- 'lambda.amazonaws.com'
Action:
- 'sts:AssumeRole'
Policies:
- PolicyName: 'root'
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: 'Allow'
Action: '*'
Resource: '*'
使用 FunctionInvokeRole
中的 Policies
属性指定您自己的政策。