2017-04-12 123 views
1

我有一些應用程序配置存儲在S3存儲桶(api密鑰)中的文件中。我將S3存儲桶配置爲僅允許通過特定的VPC端點進行訪問,該端點將鍵連接到特定環境,並防止例如在臨時或測試環境中偶然使用生產密鑰。允許從特定的VPC或控制檯訪問S3存儲桶

然而偶爾我需要修改這些鍵,這是一個痛苦。當前存儲桶策略會阻止控制檯訪問,因此我必須刪除存儲桶策略,更新文件,然後替換策略。

我該如何允許從控制檯,特定的VPC端點進行訪問,而不需要其他地方?

目前的政策,在那裏我已經試過,並且已經失敗:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy12345", 
    "Statement": [ 
     { 
      "Sid": "Principal-Access", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::account-id:root" 
      }, 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::my-keys-staging", 
       "arn:aws:s3:::my-keys-staging/*" 
      ] 
     }, 
     { 
      "Sid": "Access-to-specific-VPCE-only", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::my-keys-staging", 
       "arn:aws:s3:::my-keys-staging/*" 
      ], 
      "Condition": { 
       "StringNotEquals": { 
        "aws:sourceVpce": "vpce-vpceid" 
       } 
      } 
     } 
    ] 
} 
+1

爲什麼你有'拒絕'條件? Amazon S3中的內容默認爲私有,因此只有在您希望重寫通過其他方式授予的權限(例如授予IAM用戶)時才需要「拒絕」。因此,您無法分配權限以允許特定用戶(例如您!)訪問存儲桶。 –

+0

要添加到@JohnRotenstein評論,請參閱http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplay,具體爲「默認拒絕的請求與明確拒絕的區別在一個策略中是很重要的,默認情況下,拒絕請求,但這可以被允許覆蓋,相反,如果策略明確拒絕請求,則拒絕不能被覆蓋。你已經指定了一個明確的拒絕,它不能被覆蓋。 – jarmod

回答

5

正如在評論中提到,有一個明確的Deny不能被重寫。通過包含連接到特定VPC的Deny,您不能添加任何其他Allow元素來抵消該Deny聲明。

選項1

一個選項是改變你的「拒絕如果不從VPC ABC」聲明「允許在從VPC ABC」。這將允許您將額外的Allow聲明添加到您的政策中,以允許您從其他地方訪問存儲區。

然而,有2個與這樣做,一起去很重要的注意事項:

  1. 通過IAM策略「通用」 S3訪問將有機會獲得桶,並
  2. 任何角色的所有用戶/來自所述VPC的用戶將被允許進入你的存儲桶。

所以通過改變DenyAllow,你將不再有在桶水平VPC-限制。

這可能也可能不在貴組織的安全要求範圍內。

選項2

相反,你可以修改現有的Deny添加附加條件,這將在和處境工作:

"Condition": { 
    "StringNotEquals": { 
    "aws:sourceVpce": "vpce-vpceid", 
    "aws:username": "your-username" 
    } 
} 

這種類型的條件將拒絕該請求,如果:

  1. 該請求不是來自您的魔法VPC,並且
  2. 請求不是從您的用戶名來

所以,你應該能夠保持限制要求與您的用戶登錄將被從任何地方允許桶訪問異常的VPC的限制

注意你這樣做的安全漏洞。您應確保將用戶名限制爲(a)沒有分配任何訪問密鑰的用戶名,以及(b)已啓用MFA的用戶名。

相關問題