權限原則範例 AWS Secrets Manager - AWS Secrets Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

權限原則範例 AWS Secrets Manager

許可政策是 JSON 結構化文字。請參閱 JSON 政策文件結構

連接至資源和身分的許可政策非常相似。您在政策中包含以存取秘密的一些元素包括:

  • Principal:授予存取權的人。請參閱 IAM 使用者指南中的指定委託人。將政策連接到身分時,您不會在該政策中包含 Principal 元素。

  • Action:他們可以做什麼。請參閱Secrets Manager 動作

  • Resource:他們可以存取哪些秘密。請參閱 Secrets Manager 資源

    萬用字元 (*) 具有不同的意義,具體意義視政策的連接目標而定:

    • 在連接至秘密的政策中,* 表示該政策適用於此秘密。

    • 在連接至身分的政策中,* 表示該政策適用於帳戶中的所有資源 (包括秘密)。

若要將政策連接至秘密,請參閱 將許可政策連接至 AWS Secrets Manager 秘密

若要將政策連接至身分,請參閱 將許可政策連接至身分

範例:擷取每個秘密值的許可

若要授予擷取秘密值的許可,您可以將政策連接至秘密或身分。如需判斷要使用哪種政策的說明,請參閱身分型政策和資源型政策。如需連接政策的相關資訊,請參閱 將許可政策連接至 AWS Secrets Manager 秘密將許可政策連接至身分

下列範例展示了授予對秘密的存取權的兩種不同方式。第一個範例是您可以連接至秘密的資源型政策。如果想要將對單一秘密的存取權授予多個使用者或角色,此範例非常有用。第二個範例是身分型政策,您可以將其連接至 IAM 中的使用者或角色。如果想要將存取權授予 IAM 群組,此範例很有用。若要授與批次 API 呼叫中擷取一組秘密的權限,請參閱範例:在批次中擷取一組密碼值的權限

範例 讀取一個秘密 (連接至秘密)

您可以透過將下列政策連接至秘密,授予對秘密的存取權。若要使用此政策,請參閱 將許可政策連接至 AWS Secrets Manager 秘密

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:role/EC2RoleToAccessSecrets" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
範例 讀取使用客戶管理的金鑰 (連接至身分) 加密的秘密

如果秘密是以客戶受管金鑰加密,您可以將下列政策連接至身分,授予讀取秘密的存取權。若要使用此政策,請參閱 將許可政策連接至身分

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "SecretARN" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "KMSKeyARN" } ] }

範例:讀取和描述個別機密的權限

範例 閱讀並描述一個秘密(附加到身份)

您可以透過將下列政策連接至身分,授予對秘密的存取權。若要使用此政策,請參閱 將許可政策連接至身分

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "SecretARN" } ] }

範例:在批次中擷取一組密碼值的權限

範例 讀取批次中的秘密群組 (連接至身分)

您可以透過將下列政策連接至身分,授予在 API 呼叫擷取一組秘密的存取權。此原則會限制呼叫者,以便他們只能擷取 SecretARN1SecretARN2SecretARN3 所指定的密碼,即使批次呼叫包含其他機密也是如此。如果呼叫者也要求批次 API 呼叫中的其他秘密,秘密管理員將不會傳回它們。如需詳細資訊,請參閱BatchGetSecretValue 。若要使用此政策,請參閱 將許可政策連接至身分

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:BatchGetSecretValue", "secretsmanager:ListSecrets" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "SecretARN1", "SecretARN2", "SecretARN3" ] } ] }

範例:萬用字元

您可以使用萬用字元在政策元素中包含一組值。

範例 存取路徑中的所有秘密 (連接至身分)

下列策略授與存取名稱以 "TestEnv/" 開頭的所有密碼的存取權。若要使用此政策,請參閱 將許可政策連接至身分

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:Region:AccountId:secret:TestEnv/*" } }
範例 存取所有秘密的中繼資料 (連接至身分)

下列政策授予 DescribeSecret 和開頭為 List (ListSecretsListSecretVersionIds) 的許可。若要使用此政策,請參閱 將許可政策連接至身分

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:List*" ], "Resource": "*" } }
範例 比對秘密名稱 (連接至身分)

下列政策會依名稱授予秘密的所有 Secrets Manager 許可。若要使用此政策,請參閱 將許可政策連接至身分

若要比對秘密名稱,您可以將區域、帳戶 ID、秘密名稱和萬用字元 (?) 放在一起,以此比對單個隨機字元,從而建立秘密的 ARN。Secrets Manager 會將六個隨機字元連接到秘密名稱作為其 ARN 的一部分,因此您可以使用此萬用字元來比對那些字元。如果您使用的是語法 "another_secret_name-*",則 Secrets Manager 不僅會比對含有 6 個隨機字元的所需秘密,還會比對 "another_secret_name-<anything-here>a1b2c3"

您可以預測 ARN 除了 6 個隨機字元以外的所有部分,因此使用萬元字元 '??????' 語法可讓您安全地將許可授予尚不存在的秘密。不過,請注意,如果您刪除秘密,然後以相同名稱將其重建,使用者會自動收到新秘密的許可,即使那 6 個字元已變更。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:*", "Resource": [ "arn:aws:secretsmanager:Region:AccountId:secret:a_specific_secret_name-a1b2c3", "arn:aws:secretsmanager:Region:AccountId:secret:another_secret_name-??????" ] } ] }

範例:建立秘密的許可

若要將建立秘密的許可授予使用者,建議您將許可政策連接至使用者所屬的 IAM 群組。請參閱 IAM 使用者群組

範例 建立秘密 (連接至身分)

下列政策會授予建立秘密和檢視秘密清單的許可。若要使用此政策,請參閱 將許可政策連接至身分

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

範例:拒絕特定 AWS KMS 金鑰以加密密碼

重要

若要拒絕客戶管理的金鑰,建議您使用金鑰原則或金鑰授與來限制存取。如需詳細資訊,請參閱AWS Key Management Service 開發人員指南 AWS KMS的驗證和存取控制

範例 拒絕受 AWS 管理金鑰 aws/secretsmanager (附加至身分識別)

下列原則顯示如何拒絕使用 AWS 受管理的金鑰來aws/secretsmanager建立或更新密碼。這表示密碼必須使用客戶管理的金鑰加密。如果aws/secretsmanager金鑰存在,您也必須包含其金鑰 ID。您也會包含空字串,因為 Secrets Manager 會將該字串解譯為 AWS 受管理的金鑰aws/secretsmanager。第二個陳述式會拒絕要求建立不包含 KMS 金鑰的密碼,因為 Secrets Manager 會將其解譯為 AWS 受管理金鑰。aws/secretsmanager

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireCustomerManagedKeysOnSecrets", "Effect": "Deny", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:UpdateSecret" ], "Resource": "*", "Condition": { "ForAnyValue:StringLikeIfExists": { "secretsmanager:KmsKeyId": [ "*alias/aws/secretsmanager", "*<key_ID_of_the_AWS_managed_key>", "" ] } } }, { "Sid": "RequireKmsKeyIdParameterOnCreate", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "secretsmanager:KmsKeyId": "true" } } } ] }

範例:許可和 VPC

如果您需要從 VPC 中存取 Secrets Manager,則可以透過在許可政策中包含條件,來確保對 Secrets Manager 的請求都來自 VPC。如需更多詳細資訊,請參閱 VPC 端點條件使用 AWS Secrets Manager VPC 端點

確保從其他 AWS 服務訪問密碼的請求也來自 VPC,否則此策略將拒絕他們訪問。

範例 要求請求透過 VPC 端點提出 (連接至秘密)

例如,以下政策允許使用者執行 Secrets Manager 操作,但僅限請求是透過 VPC 端點 vpce-1234a5678b9012c 提出的情況。若要使用此政策,請參閱 將許可政策連接至 AWS Secrets Manager 秘密

{ "Id": "example-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictGetSecretValueoperation", "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234a5678b9012c" } } } ] }
範例 要求請求來自 VPC (連接至秘密)

以下政策只在命令來自 vpc-12345678 時,才允許這些命令建立和管理秘密。此外,此政策只在請求來自 vpc-2b2b2b2b 時,才允許存取秘密加密值的操作。如果您在某個 VPC 中執行應用程式,但您使用第二個隔離的 VPC 來執行管理功能,您可能會使用如下的政策。若要使用此政策,請參閱 將許可政策連接至 AWS Secrets Manager 秘密

{ "Id": "example-policy-2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAdministrativeActionsfromONLYvpc-12345678", "Effect": "Deny", "Principal": "*", "Action": [ "secretsmanager:Create*", "secretsmanager:Put*", "secretsmanager:Update*", "secretsmanager:Delete*", "secretsmanager:Restore*", "secretsmanager:RotateSecret", "secretsmanager:CancelRotate*", "secretsmanager:TagResource", "secretsmanager:UntagResource" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "AllowSecretValueAccessfromONLYvpc-2b2b2b2b", "Effect": "Deny", "Principal": "*", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } } ] }

範例:使用標籤控制對秘密的存取

您可以使用標籤來控制對秘密的存取。使用標籤控制許可,在成長快速的環境中相當有幫助,也能在政策管理變得繁瑣時提供協助。其中一種策略是將標籤連接至秘密,然後在秘密具有特定標籤時將許可授予身分。

範例 允許使用特定標籤存取秘密 (連接至身分)

下列原則允許針DescribeSecret對具有金鑰 "" 和值為 ServerName"ServerABC" 之標籤的密碼。若要使用此政策,請參閱 將許可政策連接至身分

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/ServerName": "ServerABC" } } } }

範例:使用符合秘密標籤的標籤限制對身分的存取

其中一種策略是將標籤同時連接至秘密和 IAM 身分。然後您可以建立許可政策,從而在身分的標籤與秘密的標籤相符時允許操作。如需完整的教學課程,請參閱根據標籤定義秘密的存取許可。

使用標籤控制許可,在成長快速的環境中相當有幫助,也能在政策管理變得繁瑣時提供協助。如需詳細資訊,請參閱 AWS的 ABAC 是什麼?

範例 允許存取與秘密具有相同標籤的角色 (連接至秘密)

下列政策僅在標籤 AccessProject 的秘密和角色值相同時,才會向帳戶 123456789012 授予 GetSecretValue。若要使用此政策,請參閱 將許可政策連接至 AWS Secrets Manager 秘密

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "123456789012" }, "Condition": { "StringEquals": { "aws:ResourceTag/AccessProject": "${ aws:PrincipalTag/AccessProject }" } }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } }

範例:服務委託人

如果附加到秘密的資源政策包含AWS 服務主體,建議您使用 aws: SourceArnaws: SourceAccount 全域條件金鑰。ARN 和帳戶值只會在請求從另一個 AWS 服務來到 Secrets Manager 中時,包含在授權內容中。此條件組合會避免潛在的混淆代理人案例

若資源 ARN 包含資源政策中不允許的字元,則您便不能將該資源 ARN 用於 aws:SourceArn 條件金鑰的值中。請改用 aws:SourceAccount 條件金鑰。如需更多資訊,請參閱《IAM 需求》。

服務主體通常不會用作附加至密碼之原則中的主參與者,但有些 AWS 服務需要它。如需服務要求您連接至秘密之資源政策的相關資訊,請參閱服務的說明文件。

範例 允許服務使用服務委託人存取秘密 (連接至秘密)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "service-name.amazonaws.com" ] }, "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "ArnLike": { "aws:sourceArn": "arn:aws:service-name::123456789012:*" }, "StringEquals": { "aws:sourceAccount": "123456789012" } } } ] }