身分型政策 - AWS Secrets Manager

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

身分型政策

您可以將許可政策連接至IAM身分:使用者、使用者群組和角色 。在身分型政策中,您指定該身分可以存取哪些秘密以及該身分可以對該秘密執行哪些動作。如需詳細資訊,請參閱新增和移除IAM身分許可

您可以向代表其他服務中應用程式或使用者的角色授予許可。例如,在 Amazon EC2執行個體上執行的應用程式可能需要存取資料庫。您可以建立連接至EC2執行個體設定檔IAM的角色,然後使用許可政策授予角色存取包含資料庫憑證的秘密。如需詳細資訊,請參閱使用 IAM角色將許可授予在 Amazon EC2執行個體上執行的應用程式。您可以連接角色以包含 Amazon Redshift、 AWS LambdaAmazon ECS的其他服務。

您也可以將許可授予 以外的身分系統驗證的使用者IAM。例如,您可以將IAM角色與使用 Amazon Cognito 登入的行動應用程式使用者建立關聯。角色將利用角色許可政策中的許可來授予應用程式暫時登入資料。然後,您可以使用許可政策將對秘密的存取權授予角色。如需相關資訊,請參閱《身分提供者和聯合》。

您可以使用身分型政策:

  • 授予身分對多個秘密的存取權。

  • 控制誰可以建立新秘密,以及誰可以存取尚未建立的秘密。

  • 授予IAM群組對秘密的存取權。

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

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

當您想要授予IAM群組存取權時,此範例很有用。若要授予在批次API呼叫中擷取秘密群組的許可,請參閱 範例:擷取批次中一組秘密值的許可

範例 讀取使用客戶受管金鑰加密的秘密

如果使用客戶受管金鑰加密秘密,您可以透過將下列政策連接至身分來授予讀取秘密的存取權。 \

{ "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呼叫中擷取秘密群組的存取權。此政策會限制呼叫者,以便他們只能擷取 指定的秘密 SecretARN1, SecretARN2SecretARN3,即使批次呼叫包含其他秘密。如果呼叫者也在批次API呼叫中請求其他秘密,Secrets Manager 將不會傳回它們。如需詳細資訊,請參閱 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 許可。若要使用此政策,請參閱 身分型政策

若要符合秘密名稱,您可以ARN為秘密建立 ,方法是將區域、帳戶 ID、秘密名稱和萬用字元 (?) 組合在一起,以比對個別的隨機字元。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" } } } ] }