在存储桶策略中获取Lambda角色的ARN

时间:2018-02-07 17:33:02

标签: amazon-web-services amazon-s3 amazon-iam

我正在尝试编写一个存储桶策略,拒绝除了我的特定Lambda之外对我的存储桶的所有访问权限。我试图通过将Lambda的角色列入白名单并假定角色ARN来实现这一目标,如下面的政策所示。

之所以这样,是因为我在公司的AWS账户下工作,联盟用户认为他们是一名高级用户"或"只读"角色。 "超级用户"角色可以完全访问s3。我没有管理这些角色的权限,我需要阻止其他企业用户承担这些角色的权限用户"访问我的桶的角色。

我正在尝试使用AWS:SourceArn全局条件上下文密钥获取角色ARN,但似乎AWS:SourceArn无法正常工作:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "WhitelistRegistryAPILambdaRole",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "s3:PutObject",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion",
            "s3:GetObjectVersion",
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::{BucketName}",
            "arn:aws:s3:::{BucketName}/*"
        ],
        "Condition": {
            "ArnLike": {
                "aws:SourceArn": "arn:aws:iam::{AccountId}:role/{LambdaRoleName}"
            }
        }
    },
    {
        "Sid": "WhitelistRegistryAPILambdaAssumedRole",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "s3:PutObject",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion",
            "s3:GetObjectVersion",
            "s3:GetObject"
        ],
        "Resource": [
            "arn:aws:s3:::{BucketName}",
            "arn:aws:s3:::{BucketName}/*"
        ],
        "Condition": {
            "ArnLike": {
                "AWS:SourceARN": "arn:aws:sts::{AccountId}:assumed-role/{LambdaRoleName}/{LambdaFunctionName}"
            }
        }
    }
]}

docs表示aws:SourceArn全局条件上下文密钥不适用于所有服务。我接近这个吗?

1 个答案:

答案 0 :(得分:2)

你正在倒退。

除非您公开说明,否则无人可以访问内容。

为Lambda创建角色,为其授予访问存储区的权限。将角色分配给Lambda。

现在只有Lambda可以访问存储桶。如果其他服务或用户需要访问存储桶,请创建授予该用户或服务访问权限的IAM策略或角色。