簡體   English   中英

AWS使用StsClient限制對臨時憑證getSessionToken的訪問

[英]AWS restrict access to temporary credentials getSessionToken using StsClient

商業Senario

有多個辦公室擁有自己的AWS S3存儲桶。 一個辦公室中的任何用戶都無法訪問另一個辦公室S3存儲桶。

因此,對於每個辦公室,都有一個S3 Bucket和一個IAM user 每個IAM用戶都只能訪問一個存儲桶。 由於辦公室不常增長,因此可通過AWS Console手動完成IAM用戶的創建和分配權限。

應用程序Senario

瀏覽器(Javascript)要求服務器(PHP API)提供臨時憑證,以將文件上傳到AWS S3 PHP API從數據庫中獲取Access key IDSecret access key (基於登錄的Office) 然后使用AWS PHP SDK調用StsClient並使用getSessionToken()方法獲取臨時憑證並將其傳遞給Javascript。

PHP代碼

use Aws\Sts\StsClient;
$credentials = new Aws\Credentials\Credentials($resultset['awssecret'], $resultset['awspass']);

$stsoptions = [
  'region'            => 'ap-south-1',
  'version'           => '2011-06-15',
  'signature_version' => 'v4',
  'credentials'       => $credentials,
];

$stsClient = new StsClient($stsoptions);
$response = $stsClient->getSessionToken();

當前,IAM用戶擁有對相應存儲桶的完全訪問權限。 我想將臨時憑據訪問限制為僅某些授權。 就像只允許上傳一樣,不喜歡刪除文件或列出所有文件。

我可以在StsClient中傳遞一個附加參數以限制存儲桶的權限嗎?

編輯1

通過策略為用戶分配權限。 以下是添加到策略的權限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketByTags",
                "s3:GetBucketTagging",
                "s3:DeleteObjectVersion",
                "s3:GetObjectVersionTagging",
                "s3:ListBucketVersions",
                "s3:GetBucketLogging",
                "s3:RestoreObject",
                "s3:ListBucket",
                "s3:GetAccelerateConfiguration",
                "s3:GetObjectAcl",
                "s3:AbortMultipartUpload",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectTagging",
                "s3:GetMetricsConfiguration",
                "s3:PutObjectTagging",
                "s3:DeleteObject",
                "s3:PutBucketVersioning",
                "s3:GetIpConfiguration",
                "s3:DeleteObjectTagging",
                "s3:ListBucketMultipartUploads",
                "s3:GetBucketWebsite",
                "s3:PutObjectVersionTagging",
                "s3:DeleteObjectVersionTagging",
                "s3:GetBucketVersioning",
                "s3:GetBucketAcl",
                "s3:GetReplicationConfiguration",
                "s3:ListMultipartUploadParts",
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetBucketCORS",
                "s3:GetAnalyticsConfiguration",
                "s3:GetObjectVersionForReplication",
                "s3:GetBucketLocation",
                "s3:ReplicateDelete",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::aws:s3:::mybucket",
                "arn:aws:s3:::*/*"
            ]
        }
    ]
}

我的解決方案基於“接受答案”建議的答案。

根據答案,添加權限

 {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "*"
 }

現在我的PHP代碼是

$policy = '{
  "Id": "Policy1534086947311",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1534086676951",
      "Action": [
        "s3:PutObject",
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::mybucket"
      }
    }
  ]
}';

$awsrole = [
  'Policy' => $policy,
  'RoleArn' => 'arn:aws:s3:::mybucket',
  'RoleSessionName' => 'credApi' // just a random value
];
$response = $stsClient->assumeRole($awsrole);

創建具有更嚴格范圍的權限的IAM角色,然后使用IAM用戶憑據來調用AssumeRole以獲取臨時憑據。 IAM角色將只允許s3:PutObject *進入相關存儲桶。 IAM用戶將需要獲得許可才能承擔角色。

或者只是讓您的服務器生成一個預簽名的URL,以上傳到相關S3存儲桶中的對象。 客戶端將無法將該URL用於其他任何S3操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM