2017-08-06 19 views
0

アクセスが制限されたプライベートS3バケットを作成しようとしています。私は自分自身をユーザーとして、EC2の役割はバケットにアクセスしたいと思っています。バケットの目的は、オートスケーリンググループ内のマシンにコピーされる暗号化されたSSHキーを保存することです。私はAWSは、バケットに対して同期を実行するとき今、ここでの出力は次のようになります。S3プライベートバケット

[email protected]:~$ aws s3 sync s3://sshfolder.companycloud.com/cogility /home/cogility/.ssh 
download failed: s3://sshfolder.companycloud.com/cogility/id_rsa to ../cogility/.ssh/id_rsa An error occurred (AccessDenied) when calling the GetObject operation: Access Denied 
download failed: s3://sshfolder.companycloud.com/cogility/id_rsa.pub to ../cogility/.ssh/id_rsa.pub An error occurred (AccessDenied) when calling the GetObject operation: Access Denied 

私は次の権限を持つEC2の役割とEC2インスタンスを作成します。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "", 
      "Effect": "Allow", 
      "Action": [ 
       "kms:List*", 
       "kms:Get*", 
       "kms:Describe*" 
      ], 
      "Resource": "arn:aws:kms:us-west-2:0000000000:key/kms-id-" 
     }, 
     { 
      "Sid": "", 
      "Effect": "Allow", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::sshfolder.companycloud.com/*", 
       "arn:aws:s3:::sshfolder.companycloud.com" 
      ] 
     }, 
     { 
      "Sid": "", 
      "Effect": "Allow", 
      "Action": [ 
       "elasticloadbalancing:*", 
       "ec2:*", 
       "cloudwatch:*", 
       "autoscaling:*" 
      ], 
      "Resource": "*" 
     }, 
     { 
      "Sid": "", 
      "Effect": "Allow", 
      "Action": [ 
       "lambda:List*", 
       "lambda:Invoke*", 
       "lambda:Get*" 
      ], 
      "Resource": "*" 
     } 
    ] 
} 

そして、ここでは、バケットですポリシー:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::sshfolder.companycloud.com", 
       "arn:aws:s3:::sshfolder.companycloud.com/*" 
      ], 
      "Condition": { 
       "StringNotLike": { 
        "aws:userId": [ 
         "AROAXXXXXXXXXXXXXXXXX", <-- autoscaling-ec2-role user id 
         "AROAXXXXXXXXXXXXXXXXX", 
         "AIDAXXXXXXXXXXXXXXXXX", 
         "AIDAXXXXXXXXXXXXXXXXX" 
        ], 
        "aws:sourceVpce": "vpce-abc82480d" 
       }, 
       "ArnNotLike": { 
        "aws:SourceArn": "arn:aws:sts::000000000000:assumed-role/autoscaling-ec2-role/" 
       } 
      } 
     }, 
     { 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::000000000000:root" 
      }, 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::sshfolder.companycloud.com", 
       "arn:aws:s3:::sshfolder.companycloud.com/*" 
      ] 
     } 
    ] 
} 

なぜ私はEC2インスタンスからS3バケットにアクセスできないのですか?

答えて

0

あなたのバケツポリシーではトランプが許可されません。これを達成するためにプリンシパルを使用する必要はありません。

"Statement": [ 
    { 
     "Effect": "Deny", 
     "NotPrincipal": { 
      "AWS": "arn:aws:iam::000000000000:root" 
     }, 
     "Action": "s3:*", 
     "Resource": [ 
      "arn:aws:s3:::sshfolder.companycloud.com", 
      "arn:aws:s3:::sshfolder.companycloud.com/*" 
     ], 
     "Condition": { 
      "StringNotLike": { 
       "aws:userId": [ 
        "AROAXXXXXXXXXXXXXXXXX", <-- autoscaling-ec2-role user id 
        "AROAXXXXXXXXXXXXXXXXX", 
        "AIDAXXXXXXXXXXXXXXXXX", 
        "AIDAXXXXXXXXXXXXXXXXX" 
       ], 
       "aws:sourceVpce": "vpce-abc82480d" 
      }, 
      "ArnNotLike": { 
       "aws:SourceArn": "arn:aws:sts::000000000000:assumed-role/autoscaling-ec2-role/" 
      } 
     } 
    } 
] 

主成分を逆転させるだけです。 NotActionとNotResourceを同様に適切に使用することができます。あなたはあなたの条件をすべて削除して、それらのすべてにNotPrincipalを使用することができます。これは一般的に条件よりも優れています。ここで

は、その上のリソースです:https://aws.amazon.com/blogs/security/how-to-create-a-policy-that-whitelists-access-to-sensitive-amazon-s3-buckets/

1

のAmazon S3バケットは、デフォルトではプライベートです。そのため、1つのアプローチは次のようになります。

  • バケットポリシーを使用しないでください。代わりにバケツに

にアクセスするには、あなたのIAMユーザーとIAMのロールに権限を追加します。

  • バケットポリシーを使用してIAMユーザおよびIAMロールへのアクセスを許可する

あなたのニーズを満たすにはどちらも十分でしょう。

あなたは(s3:**の校長となど)誰かが誤ってバケットへのアクセスを許可する可能性があること、さらに被害妄想している場合は、その後、明示的にユーザー&役割以外の者へのアクセスを拒否するのあなたのアプローチが良いアプローチです。

関連する問題