我的 Amazon S3 儲存貯體具有使用自訂 AWS KMS key 的預設加密功能。如何允許使用者從儲存貯體下載並上傳到儲存貯體?

2 分的閱讀內容
0

我將 Amazon Simple Storage Service (Amazon S3) 儲存貯體設定為使用預設加密搭配自訂 AWS Key Management Service (AWS KMS) 金鑰。我希望 AWS Identity and Access Management (IAM) 使用者能夠從儲存貯體下載並上傳到儲存貯體。我該如何操作?

解決方法

IAM 使用者和 AWS KMS key 屬於相同的 AWS 帳戶

1.    開啟 AWS KMS 主控台,然後使用政策檢視以檢視金鑰政策文件。修改金鑰的政策,以授予 kms:GenerateDataKeykms:Decrypt 動作的 IAM 使用者最低權限。您可以新增如下所示的陳述式:

{
  "Sid": "ExampleStmt",
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:user/Jane"
  },
  "Resource": "*"
}

**注意事項:**此範例政策僅包含個別 IAM 使用者下載並上傳到加密 S3 儲存貯體所需的最低權限。您可以根據使用案例修改或擴充權限。

2.    開啟 IAM 主控台向 IAM 使用者新增政策,以授予在儲存貯體中上傳和下載的權限。您可以使用類似下列內容的政策:

注意事項:針對資源值,請使用萬用字元輸入儲存貯體的 Amazon Resource Name (ARN),以指出儲存貯體中的物件。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

**重要事項:**IAM 使用者政策授予的 S3 權限可能會被儲存貯體政策中的明確拒絕陳述式封鎖。請務必檢閱儲存貯體政策,確認沒有任何明確拒絕陳述式與 IAM 使用者政策相衝突。

IAM 使用者所在的帳戶與 AWS KMS key 和 S3 儲存貯體所在帳戶不同

**重要事項:**您可以對客戶受管 AWS KMS key (但不能對 AWS 受管 AWS KMS key) 授予跨帳戶存取權。無法修改 AWS 受管 AWS KMS key 的金鑰政策。

1.    開啟 AWS KMS 主控台,然後使用政策檢視以檢視金鑰政策文件。修改金鑰的政策,以授予 kms:GenerateDataKeykms:Decrypt 動作的 IAM 使用者最低權限。您可以新增類似下列內容的陳述式:

{
  "Sid": "ExampleStmt",
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:user/Jane"
  },
  "Resource": "*"
}

**注意事項:**此範例政策僅包含個別 IAM 使用者下載並上傳到加密 S3 儲存貯體所需的最低權限。您可以根據使用案例修改或擴充權限。

2.    從 IAM 使用者所屬的帳戶開啟 IAM 主控台向 IAM 使用者新增政策,以授予在儲存貯體中上傳和下載的權限。此政策也必須與儲存貯體相關聯的 AWS KMS key 搭配使用。

對於跨帳戶案例,請考慮授予 s3:PutObjectAcl 權限,以便 IAM 使用者可以上傳物件。然後,授予儲存貯體帳戶對物件的完整控制權 (bucket-owner-full-control)。此外,請考慮授予 s3:ListBucket 權限,這是執行同步操作遞迴複製操作所需的權限。您可以使用類似下列內容的政策:

注意事項:針對第一個資源值,請使用萬用字元輸入儲存貯體的 ARN,以指出儲存貯體中的物件。針對第二個資源值,輸入儲存貯體的 ARN。針對第三個資源值,輸入 AWS KMS key 的 ARN。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DownloadandUpload",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
    },
    {
      "Sid": "KMSAccess",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
  ]
}

3.    從擁有 S3 儲存貯體的帳戶開啟 Amazon S3 主控台更新儲存貯體政策以授予 IAM 使用者存取儲存貯體的存取權。您可以使用如下的政策:

注意事項:針對主體值,請輸入 IAM 使用者的 ARN。針對第一個資源值,請使用萬用字元輸入儲存貯體的 ARN,以指出儲存貯體中的物件。針對第二個資源值,輸入儲存貯體的 ARN。

{
  "Id": "Policy1584399307003",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DownloadandUpload",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Jane"
        ]
      }
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Jane"
        ]
      }
    }
  ]
}

相關資訊

編輯金鑰

aws s3 cp

將 IAM 政策與 AWS KMS 搭配使用

Amazon S3: 允許對 S3 儲存貯體中的物件進行讀取和寫入存取

對所有新儲存貯體停用 ACL 並強制執行物件擁有權

AWS 官方
AWS 官方已更新 2 年前