【问题标题】:Cross-Account IAM Access Denied with GUI Client, but permitted via CLI跨账户 IAM 访问被 GUI 客户端拒绝,但通过 CLI 允许
【发布时间】:2020-01-23 18:15:08
【问题描述】:

我无法将最终用户访问权限配置为跨账户共享存储桶,需要帮助确定使用客户端访问存储桶是否有特定的策略要求,而不是直接使用 CLI。

IAM 用户账户在我们的“核心”AWS 账户中进行管理。 S3 存储桶预置在我们的“开发”AWS 账户中。 Dev Account 中的 S3 Bucket 使用 Dev Account 中的 KMS 密钥加密。

我们已配置存储桶策略以允许用户访问。 我们已配置用户策略以允许访问 S3 存储桶。 我们已配置用户策略以允许使用 KMS 密钥。

使用 CLI 时,我们的用户帐户可以成功访问和使用 S3 存储桶。当尝试连接 GUI 客户端(Win-SCP、Cyber​​Duck、MAC ForkLift)时,我们会收到权限被拒绝错误。

存储桶政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::[DEVACCOUNT#]:role/EC2-ROLE-FOR-APP-ACCESS",
                    "arn:aws:iam::[COREACCOUNT#]:user/end.user"
                ]
            },
            "Action": "s3:List*",
            "Resource": [
                "arn:aws:s3:::dev-mybucket",
                "arn:aws:s3:::dev-mybucket/*"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::[DEVACCOUNT#]:role/EC2-ROLE-FOR-APP-ACCESS",
                    "arn:aws:iam::[COREACCOUNT#]:user/end.user"
                ]
            },
            "Action": [
                "s3:GetObject",
                "s3:Put*"
            ],
            "Resource": "arn:aws:s3:::dev-mybucket/*"
        }
    ]
}

用户政策 - 访问 KMS

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUseOfDevAPPSKey",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Resource": [
                "arn:aws:kms:ca-central-1:[DEVACCOUNT#]:key/[redacted-key-number]"
            ]
        },
        {
            "Sid": "AllowAttachmentOfPersistentResources",
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant",
                "kms:List*",
                "kms:RevokeGrant"
            ],
            "Resource": [
                "arn:aws:kms:ca-central-1:[DEVACCOUNT#]:key/[redacted-key-number]"
            ],
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": true
                }
            }
        }
    ]
}

用户政策 - 访问 S3 存储桶

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAccessToMyBucket",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::dev-mybucket/",
                "arn:aws:s3:::dev-mybucket/*"
            ]
        }
    ]

}

通过 aws s3 命​​令,我们可以“ls”内容和“cp”内容从本地到远程以及从远程到本地。

使用 GUI 客户端配置访问时,我们总是会收到一些通用的“权限被拒绝”或“访问被拒绝”类型错误。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    GUI 客户端可能正在调用不是List*Put*GetObject

    例如,它可能会调用GetObjectVersionGetObjectAclGetBucketAcl

    尝试在List* 之外添加Get* 权限。

    您还可以查看您的 AWS CloudTrail 跟踪中的事件,了解哪些特定 API 调用被拒绝。

    详情见:Specifying Permissions in a Policy - Amazon Simple Storage Service

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2012-10-17
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多